public:
struct Endpoint
{
- Track *track;
- const Track::Endpoint *track_ep;
- Block *link;
+ Track *track;
+ unsigned track_ep;
+ Block *link;
unsigned routes;
- Endpoint(Track *, const Track::Endpoint *);
+ Endpoint(Track *, unsigned);
};
- typedef std::list<Endpoint> EndpointSeq;
- Block(TrafficManager &, Track *);
- unsigned get_sensor_id() const { return sensor_id; }
- const TrackSet &get_tracks() const { return tracks; }
- const EndpointSeq &get_endpoints() const { return endpoints; }
- const Endpoint *get_endpoint_by_link(const Block *) const;
- const Endpoint *traverse(const Endpoint *) const;
- void check_link(Block &);
- bool reserve(const Train *);
- void print_debug();
private:
TrafficManager &trfc_mgr;
unsigned id;
unsigned sensor_id;
- TrackSet tracks;
- EndpointSeq endpoints;
+ std::set<Track *> tracks;
+ std::vector<Endpoint> endpoints;
const Train *train;
- void find_routes(Track *, const Track::Endpoint *, unsigned, TrackSet &);
+public:
+ Block(TrafficManager &, Track &);
+ unsigned get_sensor_id() const { return sensor_id; }
+ const std::set<Track *> &get_tracks() const { return tracks; }
+ const std::vector<Endpoint> &get_endpoints() const { return endpoints; }
+ int get_endpoint_by_link(const Block &) const;
+ int traverse(unsigned) const;
+ void check_link(Block &);
+ Block *get_link(unsigned) const;
+ bool reserve(const Train *);
+ void print_debug();
+private:
+ void find_routes(Track &, unsigned, unsigned, std::set<Track *> &);
static unsigned next_id;
};