]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/train.h
Improve the block reservation algorithm
[r2c2.git] / source / libmarklin / train.h
index d4c7e186acd24b251d14e5680bcee5d7a8ca65e8..3fc71316371bb5fb3a11d59ddb434005bccdc174 100644 (file)
@@ -16,8 +16,10 @@ Distributed under the GPL
 namespace Marklin {
 
 class Locomotive;
+class Route;
 class Sensor;
 class TrafficManager;
+class Turnout;
 
 class Train: public sigc::trackable
 {
@@ -32,6 +34,7 @@ public:
 
        sigc::signal<void, const std::string &> signal_name_changed;
        sigc::signal<void, unsigned> signal_target_speed_changed;
+       sigc::signal<void, const Route *> signal_route_changed;
        sigc::signal<void, const std::string &> signal_status_changed;
 
 private:
@@ -57,7 +60,9 @@ private:
        Locomotive &loco;
        std::list<BlockRef> cur_blocks;
        std::list<BlockRef> rsv_blocks;
+       Block *pending_block;
        unsigned target_speed;
+       const Route *route;
        Msp::Time::TimeStamp try_reserve;
        std::string status;
 
@@ -78,13 +83,16 @@ public:
        void set_name(const std::string &);
        void set_speed(unsigned);
        void set_reverse(bool);
+       void set_route(const Route *);
        const std::string &get_name() const { return name; }
        Locomotive &get_locomotive() const { return loco; }
        unsigned get_target_speed() const { return target_speed; }
+       const Route *get_route() const { return route; }
        const std::string &get_status() const { return status; }
        const Point &get_position() const { return pos; }
        void place(Block *, unsigned);
        bool free_block(Block *);
+       int get_entry_to_block(Block *) const;
        void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
        void save(std::list<Msp::DataFile::Statement> &) const;
 private: