};
private:
+ struct BlockMatch;
+
typedef std::list<BlockIter> BlockList;
Train &train;
+ bool active;
BlockList blocks;
BlockList::iterator cur_blocks_end;
+ Sensor *next_sensor;
Block *pending_block;
const Block *stop_at_block;
bool reserving;
+ bool advancing;
public:
BlockAllocator(Train &);
+ void set_active(bool);
+ bool is_active() const { return active; }
+
void start_from(const BlockIter &);
+ void rewind_to(const Block &);
void clear();
bool empty() const { return blocks.empty(); }
void stop_at(const Block *);
bool has_block(const Block &) const;
bool is_block_current(const Block &) const;
-private:
- BlockList::const_iterator find_block(const BlockList::const_iterator &, const BlockList::const_iterator &, const Block &) const;
-public:
- void reserve_more();
private:
+ void reserve_more();
bool reserve_block(const BlockIter &);
-public:
- bool release_from(const Block &);
- void release_noncurrent();
-private:
+ void advance_front(const Block *, bool);
+ void advance_front(const Sensor *);
+ void advance_back();
void release_blocks_begin(const BlockList::iterator &);
void release_blocks_end(const BlockList::iterator &);
void release_block(const BlockList::iterator &);
void reverse();
private:
+ void turnout_path_changing(Track &);
void turnout_path_changed(Track &);
void block_reserved(Block &, const Train *);
void sensor_state_changed(Sensor &, Sensor::State);
+ void update_next_sensor(Sensor *);
public:
void save(std::list<Msp::DataFile::Statement> &) const;