#define LIBR2C2_TIMETABLE_H_
#include <msp/datafile/objectloader.h>
+#include "trackchain.h"
#include "trainai.h"
namespace R2C2 {
class Layout;
-class TrackChain;
class Timetable: public TrainAI
{
private:
void block(unsigned);
void time(Msp::Time::RawTime);
- void zone(const std::string &, unsigned);
+ void zone(const std::string &);
+ void zone_numbered(const std::string &, unsigned);
};
RowType type;
TrackChain *target;
+ TrackChain::Direction direction;
Msp::Time::TimeDelta time;
Row();
void save(std::list<Msp::DataFile::Statement> &) const;
};
+ struct RowTypeMatch
+ {
+ RowType type;
+
+ RowTypeMatch(RowType t): type(t) { }
+
+ bool operator()(const Row &r) const { return r.type==type; }
+ };
+
sigc::signal<void, unsigned, const Row &> signal_row_added;
sigc::signal<void, unsigned, const Row &> signal_row_modified;
sigc::signal<void, unsigned> signal_row_removed;
std::list<Row> rows;
std::list<Row>::iterator current_row;
bool update_pending;
+ bool sync_to_clock;
+ bool late_arrival;
+ std::list<Row>::iterator next_depart;
public:
Timetable(Train &);
const Row &get_row(unsigned) const;
virtual void tick(const Msp::Time::TimeDelta &);
+private:
+ bool passed_row(const Row &, const Msp::Time::TimeDelta &) const;
+public:
void save(std::list<Msp::DataFile::Statement> &) const;
private:
- void check_update(std::list<Row>::const_iterator);
+ void check_update(const std::list<Row>::const_iterator &);
+ std::list<Row>::iterator find_trip(const std::list<Row>::iterator &, std::list<Row>::iterator *);
void update_route();
void event(TrainAI &, const Message &);
void record_time();
+ void clock_discontinuity();
};
} // namespace R2C2