void set_function(unsigned, bool);
float get_control(const std::string &) const;
float get_speed() const;
void set_function(unsigned, bool);
float get_control(const std::string &) const;
float get_speed() const;
bool is_active() const { return active; }
bool get_function(unsigned) const;
unsigned get_functions() const { return functions; }
void add_ai(TrainAI &);
void remove_ai(TrainAI &);
bool is_active() const { return active; }
bool get_function(unsigned) const;
unsigned get_functions() const { return functions; }
void add_ai(TrainAI &);
void remove_ai(TrainAI &);
void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
void save(std::list<Msp::DataFile::Statement> &) const;
void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
void save(std::list<Msp::DataFile::Statement> &) const;
void reserve_more();
void check_turnout_paths(bool);
float get_reserved_distance_until(const Block *, bool) const;
void reserve_more();
void check_turnout_paths(bool);
float get_reserved_distance_until(const Block *, bool) const;
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;