#include <list>
#include <vector>
+#include <msp/core/thread.h>
#include <msp/time/timedelta.h>
#include "trackiter.h"
#include "trainrouter.h"
bool operator<(const RoutingStep &) const;
};
+ class PlanningThread: public Msp::Thread
+ {
+ private:
+ TrainRoutePlanner &planner;
+
+ public:
+ PlanningThread(TrainRoutePlanner &);
+
+ private:
+ virtual void main();
+ };
+
std::vector<TrainRoutingInfo> routed_trains;
std::list<RoutingStep> steps;
std::list<RoutingStep> queue;
+ const RoutingStep *goal;
Result result;
+ PlanningThread *thread;
public:
TrainRoutePlanner(Layout &);
+ ~TrainRoutePlanner();
- void plan();
+ Result plan();
+ void plan_async();
+ Result check();
Result get_result() { return result; }
const std::list<Route *> &get_routes_for(const Train &) const;
const std::list<TrainRouter::SequencePoint> &get_sequence_for(const Train &) const;
private:
const TrainRoutingInfo &get_train_info(const Train &) const;
const RoutingStep &get_step();
+ void prepare_plan();
+ void create_plan();
void add_steps(const RoutingStep &);
- void create_routes(const RoutingStep &);
+ void finalize_plan();
};
} // namespace R2C2