X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Froute.h;h=3bd4a445e5ecc6ffcddd096b828cdfa42f700d0d;hb=7c98e23312cf01ce1fa6c1ffd8e36c22d2fa6110;hp=0dd16f44342c89b84650dcbc5de6865c0a9c2f04;hpb=e214fd389b9819eac0379cfb78e0f446e267b839;p=r2c2.git diff --git a/source/libr2c2/route.h b/source/libr2c2/route.h index 0dd16f4..3bd4a44 100644 --- a/source/libr2c2/route.h +++ b/source/libr2c2/route.h @@ -6,6 +6,7 @@ #include #include #include +#include "trackchain.h" namespace R2C2 { @@ -15,27 +16,8 @@ class Track; class TrackIter; class Zone; -enum RouteValidityMask -{ - ROUTE_INVALID = 0, - ROUTE_LINKED = 1, - ROUTE_LINEAR = 2, - ROUTE_SMOOTH = 4, - ROUTE_VALID = 7 -}; - -class bad_route: public std::logic_error -{ -public: - bad_route(RouteValidityMask m): std::logic_error(get_message(m)) { } - virtual ~bad_route() throw() { } - -private: - static std::string get_message(RouteValidityMask); -}; - -class Route: public sigc::trackable +class Route: public TrackChain { public: typedef std::map TurnoutMap; @@ -55,10 +37,8 @@ public: sigc::signal signal_name_changed; private: - Layout &layout; std::string name; bool temporary; - std::set tracks; TurnoutMap turnouts; public: @@ -69,22 +49,20 @@ public: const std::string &get_name() const { return name; } void set_temporary(bool); bool is_temporary() const { return temporary; } - void set_turnout(unsigned, unsigned); void update_turnouts(); +private: + void update_turnout(Track &); +public: int get_turnout(unsigned) const; unsigned get_path(Track &) const; const std::map &get_turnouts() const { return turnouts; } - void add_track(Track &); - void add_tracks(const std::set &); - void add_track_chain(const TrackIter &, const TurnoutMap &); - const std::set &get_tracks() const { return tracks; } - bool has_track(Track &) const; - void save(std::list &) const; private: - RouteValidityMask check_validity(Track &) const; - void object_removed(Object &); + void add_turnout(Track &, unsigned); + virtual void on_track_added(Track &); public: + void save(std::list &) const; + static Route *find(const TrackIter &, Track &); static Route *find(const TrackIter &, const Route &); static Route *find(const TrackIter &, const Zone &);