]> 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 c6ca741555282c767bf7247e76c6fa49407aabb3..f5bbf570d2fecc52d7027eaf850f410ce8178580 100644 (file)
@@ -5,6 +5,7 @@
 #include <vector>
 #include <msp/time/timedelta.h>
 #include "trackiter.h"
+#include "trainrouter.h"
 
 namespace R2C2 {
 
@@ -12,24 +13,20 @@ class Layout;
 class Route;
 class Track;
 class Train;
-class TrainRouter;
 
 class TrainRoutePlanner
 {
-private:
-       struct TrainRoutingState;
-       struct TrainRoutingInfo;
-
-       struct SequencingInfo
+public:
+       enum Result
        {
-               Track *track;
-               TrainRoutingInfo *preceding;
-               unsigned sequence_in;
-               unsigned sequence_out;
-
-               SequencingInfo(Track *, unsigned);
+               PENDING,
+               COMPLETE,
+               FAILED
        };
 
+private:
+       struct TrainRoutingState;
+
        struct TrainRoutingInfo
        {
                Train *train;
@@ -37,7 +34,7 @@ private:
                TrainRouter *router;
                std::list<Route *> routes;
                Track *track_history[3];
-               std::list<SequencingInfo> sequence;
+               std::list<TrainRouter::SequencePoint> sequence;
 
                TrainRoutingInfo(Train &);
        };
@@ -118,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 &);