]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.h
Redesign the interface between TrainRouter and TrainRoutePlanner
[r2c2.git] / source / libr2c2 / trainrouteplanner.h
index 57d2de508cdc27be0dbc17c3953d24bc2d9c4c61..f5bbf570d2fecc52d7027eaf850f410ce8178580 100644 (file)
@@ -5,6 +5,7 @@
 #include <vector>
 #include <msp/time/timedelta.h>
 #include "trackiter.h"
+#include "trainrouter.h"
 
 namespace R2C2 {
 
@@ -12,10 +13,17 @@ class Layout;
 class Route;
 class Track;
 class Train;
-class TrainRouter;
 
 class TrainRoutePlanner
 {
+public:
+       enum Result
+       {
+               PENDING,
+               COMPLETE,
+               FAILED
+       };
+
 private:
        struct TrainRoutingState;
 
@@ -26,7 +34,7 @@ private:
                TrainRouter *router;
                std::list<Route *> routes;
                Track *track_history[3];
-               std::list<const TrainRoutingState *> waits;
+               std::list<TrainRouter::SequencePoint> sequence;
 
                TrainRoutingInfo(Train &);
        };
@@ -107,12 +115,17 @@ private:
        std::vector<TrainRoutingInfo> routed_trains;
        std::list<RoutingStep> steps;
        std::list<RoutingStep> queue;
+       Result result;
 
 public:
        TrainRoutePlanner(Layout &);
 
        void plan();
+       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 add_steps(const RoutingStep &);
        void create_routes(const RoutingStep &);