X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Froute.h;h=e5164ce06a283f854d5ce2f7e1881bbac159610f;hb=51d3c122fb489f9e3f00060f885f00c1fae7ceb5;hp=86a0f61780e1423ec68a1644f160f77bb9e55bb2;hpb=1ff06c5bc46a677fa389ef86c6b26664368f1653;p=r2c2.git diff --git a/source/libr2c2/route.h b/source/libr2c2/route.h index 86a0f61..e5164ce 100644 --- a/source/libr2c2/route.h +++ b/source/libr2c2/route.h @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of R²C² -Copyright © 2007-2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #ifndef LIBR2C2_ROUTE_H_ #define LIBR2C2_ROUTE_H_ @@ -12,20 +5,41 @@ Distributed under the GPL #include #include #include -#include +#include namespace R2C2 { class Layout; 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 { public: typedef std::map TurnoutMap; - class Loader: public Msp::DataFile::BasicLoader + class Loader: public Msp::DataFile::ObjectLoader { private: TurnoutMap turnouts; @@ -61,17 +75,18 @@ public: const std::map &get_turnouts() const { return turnouts; } void add_track(Track &); void add_tracks(const std::set &); - void add_track_chain(Track &, unsigned, const TurnoutMap &); + 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: - unsigned check_validity(Track &) const; + RouteValidityMask check_validity(Track &) const; void track_removed(Track &); public: static Route *find(const TrackIter &, Track &); static Route *find(const TrackIter &, const Route &); + static Route *find(const TrackIter &, const Zone &); static Route *find(const TrackIter &, const std::set &); };