- void route(const std::string &);
- void track(unsigned);
- void track(ArticleNumber);
- void train(unsigned, unsigned, const std::string &);
- void train(ArticleNumber, unsigned, const std::string &);
+ void signal(const std::string &);
+ void terrain(const std::string &);
+ void track(const std::string &);
+ void train(const std::string &, unsigned, const std::string &);
+ void turnout(unsigned);
+ void turnout2(unsigned, unsigned);
+ void zone();
+ };
+
+private:
+ template<typename B>
+ class Storage
+ {
+ private:
+ std::set<B *> base;
+ mutable std::list<Msp::Variant> caches;
+
+ public:
+ ~Storage();
+
+ bool insert(B &);
+ bool erase(B &);
+
+ const std::set<B *> &get() const { return base; }
+
+ template<typename T>
+ const std::set<T *> &get() const;
+
+ template<typename T>
+ void del();
+ };
+
+ struct BlockReservation
+ {
+ Block █
+ Train *train;
+
+ BlockReservation(Block &, Train *);