#ifndef LIBR2C2_LAYOUT_H_
#define LIBR2C2_LAYOUT_H_
+#include <deque>
#include <set>
#include <sigc++/sigc++.h>
#include <msp/datafile/objectloader.h>
Loader(Layout &);
private:
void beamgate();
+ void clock();
void route();
- void signal(ArticleNumber);
- void terrain(ArticleNumber);
- void track(ArticleNumber);
- void train(ArticleNumber, unsigned, const std::string &);
- void turnout(unsigned, unsigned);
+ void signal(const std::string &);
+ void terrain(const std::string &);
+ void track(const std::string &);
+ void train(const std::string &, unsigned, const std::string &);
+ void turnout(unsigned);
+ void turnout2(unsigned, unsigned);
void zone();
};
void del();
};
+ struct BlockReservation
+ {
+ Block █
+ Train *train;
+
+ BlockReservation(Block &, Train *);
+ };
+
public:
typedef std::vector<Zone *> ZoneArray;
sigc::signal<void, Train &> signal_train_removed;
sigc::signal<void, Block &, Train *> signal_block_reserved;
sigc::signal<void, Sensor &, Sensor::State> signal_sensor_state_changed;
- sigc::signal<void, const std::string &> signal_emergency;
+ sigc::signal<void, Block *, const std::string &> signal_emergency;
private:
Catalogue &catalogue;
std::map<unsigned, Train *> trains;
Msp::Time::TimeStamp last_tick;
unsigned next_turnout_addr;
+ bool emitting_block_reserved;
+ std::deque<BlockReservation> block_reserve_queue;
public:
Layout(Catalogue &, Driver * = 0);
void remove_train(Train &);
void tick();
- void emergency(const std::string &);
+ void emergency(Block *, const std::string &);
void save(const std::string &) const;
void save_dynamic(const std::string &) const;
private:
void sensor_state_changed(Sensor &, Sensor::State);
+ void block_reserved(Block &, Train *);
};
} // namespace R2C2