1 #ifndef LIBMARKLIN_TRAIN_H_
2 #define LIBMARKLIN_TRAIN_H_
4 #include <sigc++/signal.h>
5 #include <sigc++/trackable.h>
6 #include <msp/time/timestamp.h>
15 class Train: public sigc::trackable
23 BlockRef(Block *s, unsigned e): block(s), entry(e) { }
26 TrafficManager &trfc_mgr;
29 std::list<BlockRef> cur_blocks;
30 std::list<BlockRef> rsv_blocks;
31 unsigned target_speed;
32 Msp::Time::TimeStamp try_reserve;
34 Msp::Time::TimeStamp last_entry_time;
39 sigc::signal<void, const std::string &> signal_name_changed;
40 sigc::signal<void, const std::string &> signal_status_changed;
42 Train(TrafficManager &, Locomotive &);
44 void set_name(const std::string &);
45 void set_speed(unsigned);
46 const std::string &get_name() const { return name; }
47 Locomotive &get_locomotive() const { return loco; }
48 const std::string &get_status() const { return status; }
49 void place(Block *, unsigned);
50 bool free_block(Block *);
51 void tick(const Msp::Time::TimeStamp &);
53 void sensor_event(bool, Sensor *);
55 void set_status(const std::string &);
58 } // namespace Marklin