const Route *get_route() const;
void place(Block &, unsigned);
void unplace();
bool is_placed() const { return !blocks.empty(); }
bool free_block(Block &);
void free_noncritical_blocks();
const Route *get_route() const;
void place(Block &, unsigned);
void unplace();
bool is_placed() const { return !blocks.empty(); }
bool free_block(Block &);
void free_noncritical_blocks();
float get_reserved_distance() const;
void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
float get_reserved_distance() const;
void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
void release_blocks();
void release_blocks(BlockList::iterator, BlockList::iterator);
void reverse_blocks(BlockList &) const;
void release_blocks();
void release_blocks(BlockList::iterator, BlockList::iterator);
void reverse_blocks(BlockList &) const;