+ bool temporary;
+ std::set<const Track *> tracks;
+ std::map<unsigned, int> turnouts;
+
+public:
+ Route(Layout &, const std::string &);
+ ~Route();
+
+ const std::string &get_name() const { return name; }
+ void set_temporary(bool);
+ bool is_temporary() const { return temporary; }
+ int get_turnout(unsigned) const;
+ const std::map<unsigned, int> &get_turnouts() const { return turnouts; }
+ void add_track(const Track &);
+ void add_tracks(const std::set<const Track *> &);
+ const std::set<const Track *> &get_tracks() const { return tracks; }
+ void save(std::list<Msp::DataFile::Statement> &) const;
+private:
+ void update_turnouts();
+ unsigned check_validity(const Track &) const;
+ void track_removed(Track &);
+
+public:
+ static Route *find(const Track &, unsigned, const Track &);
+ static Route *find(const Track &, unsigned, const Route &);