X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Ftrain.h;h=117211244cea2984eacfe1600ec488a268075cee;hb=aead7f2da831199fbb8f6950b067656b2965c2fa;hp=23bd3cc1b09405fedfae44d62af17e10a40a8f6b;hpb=06c100aacb559fbbe7380e15981c4772092c269b;p=r2c2.git diff --git a/source/libmarklin/train.h b/source/libmarklin/train.h index 23bd3cc..1172112 100644 --- a/source/libmarklin/train.h +++ b/source/libmarklin/train.h @@ -3,44 +3,47 @@ #include #include +#include #include "block.h" namespace Marklin { class Locomotive; +class Sensor; class TrafficManager; class Train: public sigc::trackable { -public: - sigc::signal signal_name_changed; - - Train(TrafficManager &, Locomotive &); - void set_name(const std::string &); - void set_speed(unsigned); - const std::string &get_name() const { return name; } - Locomotive &get_locomotive() const { return loco; } - void place(Block *, const Block::Endpoint *); - bool free_block(Block *); - void tick(); private: struct BlockRef { Block *block; - const Block::Endpoint *entry; + unsigned entry; - BlockRef(Block *s, const Block::Endpoint *e): block(s), entry(e) { } + BlockRef(Block *s, unsigned e): block(s), entry(e) { } }; - typedef std::list BlockRefSeq; TrafficManager &trfc_mgr; std::string name; Locomotive &loco; - BlockRefSeq cur_blocks; - BlockRefSeq rsv_blocks; + std::list cur_blocks; + std::list rsv_blocks; unsigned target_speed; + Msp::Time::TimeStamp try_reserve; - void sensor_event(unsigned, bool); +public: + sigc::signal signal_name_changed; + + Train(TrafficManager &, Locomotive &); + void set_name(const std::string &); + void set_speed(unsigned); + const std::string &get_name() const { return name; } + Locomotive &get_locomotive() const { return loco; } + void place(Block *, unsigned); + bool free_block(Block *); + void tick(const Msp::Time::TimeStamp &); +private: + void sensor_event(bool, Sensor *); bool reserve_more(); }; typedef std::list TrainSeq;