]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.h
Move duplicated successor step creation code to a function
[r2c2.git] / source / libr2c2 / trainrouteplanner.h
index c4850d46a61c00185f9630b8259885d0582b5f5e..3076c3978efa5ed0b27edae5cec7b4130e72afa7 100644 (file)
@@ -32,7 +32,11 @@ private:
        {
                Train *train;
                float speed;
+               Block *first_noncritical;
                TrainRouter *router;
+               std::vector<TrainRouter::Waypoint> waypoints;
+               std::vector<const TrainRouteMetric *> metrics;
+               bool has_duration;
                std::list<Route *> routes;
                Track *track_history[2];
                std::list<TrainRouter::SequencePoint> sequence;
@@ -65,14 +69,15 @@ private:
        {
                TrainRoutingInfo *info;
                TrackIter track;
-               unsigned path;
+               unsigned char path;
+               bool critical;
                OccupiedTrack *occupied_tracks;
                float offset;
                float back_offset;
                TrainState state;
                Msp::Time::TimeDelta delay;
                Msp::Time::TimeDelta duration;
-               int waypoint;
+               unsigned waypoint;
                float distance_traveled;
                float remaining_estimate;
                Msp::Time::TimeDelta wait_time;
@@ -89,11 +94,13 @@ private:
                void advance(const Msp::Time::TimeDelta &);
                void advance_track(unsigned);
                void update_estimate();
+               bool is_viable() const;
        };
 
        struct RoutingStep
        {
                Msp::Time::TimeDelta time;
+               Msp::Time::TimeDelta penalty;
                Msp::Time::TimeDelta cost_estimate;
                std::vector<TrainRoutingState> trains;
                const RoutingStep *prev;
@@ -102,6 +109,7 @@ private:
                RoutingStep(const RoutingStep *);
 
                void create_successors(std::list<RoutingStep> &) const;
+               static void create_successor(RoutingStep &, unsigned, unsigned, std::list<RoutingStep> &);
                bool update_states();
                bool check_deadlocks() const;
                int get_occupant(Track &) const;
@@ -130,6 +138,7 @@ private:
        std::list<RoutingStep> steps;
        std::list<RoutingStep> queue;
        const RoutingStep *goal;
+       Msp::Time::TimeDelta timeout;
        Result result;
        PlanningThread *thread;
 
@@ -137,10 +146,11 @@ public:
        TrainRoutePlanner(Layout &);
        ~TrainRoutePlanner();
 
+       void set_timeout(const Msp::Time::TimeDelta &);
        Result plan();
        void plan_async();
        Result check();
-       Result get_result() { return result; }
+       Result get_result() const { return result; }
        const std::list<Route *> &get_routes_for(const Train &) const;
        const std::list<TrainRouter::SequencePoint> &get_sequence_for(const Train &) const;
 private: