27 #include "../util/PlanningUtil.h"
39 auto currentTaskStatus = taskStatus.load();
41 bool invalidTransition =
false;
42 switch (newTaskStatus)
44 case TaskStatus::eNew:
45 case TaskStatus::eTaskStatusSize:
46 invalidTransition =
true;
49 case TaskStatus::eQueued:
50 if (currentTaskStatus != TaskStatus::eNew)
52 invalidTransition =
true;
55 case TaskStatus::ePlanning:
56 if (currentTaskStatus != TaskStatus::eQueued)
58 invalidTransition =
true;
61 case TaskStatus::eRefining:
62 if (currentTaskStatus != TaskStatus::ePlanning)
64 invalidTransition =
true;
67 case TaskStatus::ePlanningAborted:
68 if ((currentTaskStatus != TaskStatus::eNew) &&
69 (currentTaskStatus != TaskStatus::eQueued) &&
70 (currentTaskStatus != TaskStatus::ePlanning))
72 invalidTransition =
true;
75 case TaskStatus::ePlanningFailed:
76 if (currentTaskStatus != TaskStatus::ePlanning)
78 invalidTransition =
true;
81 case TaskStatus::eRefinementAborted:
82 if (currentTaskStatus != TaskStatus::eRefining)
84 invalidTransition =
true;
87 case TaskStatus::eDone:
88 if ((currentTaskStatus != TaskStatus::eRefining) &&
89 (currentTaskStatus != TaskStatus::ePlanning))
91 invalidTransition =
true;
94 case TaskStatus::eException:
97 invalidTransition =
true;
99 if (invalidTransition)
101 if (currentTaskStatus != newTaskStatus)
110 if (taskStatus.compare_exchange_strong(currentTaskStatus, newTaskStatus))
119 if (newTaskStatus == TaskStatus::eRefining)
124 for (
auto& cb : taskStatusCallbacks)