]> 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 33e6ef5f1b4c5c7f22e23432eb3ed87932191e0c..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 &);
        };
@@ -63,7 +71,9 @@ private:
                TrainState state;
                Msp::Time::TimeDelta delay;
                int waypoint;
+               float distance_traveled;
                float remaining_estimate;
+               Msp::Time::TimeDelta wait_time;
                int blocked_by;
 
                TrainRoutingState(TrainRoutingInfo &);
@@ -82,7 +92,7 @@ private:
        struct RoutingStep
        {
                Msp::Time::TimeDelta time;
-               Msp::Time::TimeDelta total_estimate;
+               Msp::Time::TimeDelta cost_estimate;
                std::vector<TrainRoutingState> trains;
                const RoutingStep *prev;
 
@@ -105,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 &);