]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.h
Make route planning threaded
[r2c2.git] / source / libr2c2 / trainrouteplanner.h
index f5bbf570d2fecc52d7027eaf850f410ce8178580..54ecadb8e905cd19138ef5070f11cd88b16da75e 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <list>
 #include <vector>
+#include <msp/core/thread.h>
 #include <msp/time/timedelta.h>
 #include "trackiter.h"
 #include "trainrouter.h"
@@ -112,23 +113,42 @@ private:
                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