]> git.tdb.fi Git - r2c2.git/blob - source/libmarklin/block.h
4a22aa97862bfc2019890aefc8090f83e7114ea9
[r2c2.git] / source / libmarklin / block.h
1 #ifndef MARKLIN_3D_BLOCK_H_
2 #define MARKLIN_3D_BLOCK_H_
3
4 #include <list>
5 #include <set>
6 #include "track.h"
7
8 namespace Marklin {
9
10 class Train;
11 class TrafficManager;
12
13 class Block
14 {
15 public:
16         struct Endpoint
17         {
18                 Track *track;
19                 const Track::Endpoint *track_ep;
20                 Block  *link;
21                 unsigned routes;
22
23                 Endpoint(Track *, const Track::Endpoint *);
24         };
25         typedef std::list<Endpoint> EndpointSeq;
26
27         Block(TrafficManager &, Track *);
28         unsigned get_sensor_id() const { return sensor_id; }
29         const TrackSet &get_tracks() const { return tracks; }
30         const EndpointSeq &get_endpoints() const { return endpoints; }
31         const Endpoint *get_endpoint_by_link(const Block *) const;
32         const Endpoint *traverse(const Endpoint *) const;
33         void check_link(Block &);
34         bool reserve(const Train *);
35         void print_debug();
36 private:
37         TrafficManager &trfc_mgr;
38         unsigned       id;
39         unsigned       sensor_id;
40         TrackSet       tracks;
41         EndpointSeq    endpoints;
42         const Train    *train;
43
44         void find_routes(Track *, const Track::Endpoint *, unsigned, TrackSet &);
45
46         static unsigned next_id;
47 };
48 typedef std::list<Block *> BlockSeq;
49
50 } // namespace Marklin
51
52 #endif