]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/route.h
BasicLoader is now called ObjectLoader
[r2c2.git] / source / libr2c2 / route.h
index 86a0f61780e1423ec68a1644f160f77bb9e55bb2..3ee7e5ead2306313d2afb293bae4b7931124f439 100644 (file)
@@ -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 <set>
 #include <string>
 #include <sigc++/trackable.h>
-#include <msp/datafile/loader.h>
+#include <msp/datafile/objectloader.h>
 
 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<unsigned, int> TurnoutMap;
 
-       class Loader: public Msp::DataFile::BasicLoader<Route>
+       class Loader: public Msp::DataFile::ObjectLoader<Route>
        {
        private:
                TurnoutMap turnouts;
@@ -66,12 +80,13 @@ public:
        bool has_track(Track &) const;
        void save(std::list<Msp::DataFile::Statement> &) 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<Track *> &);
 };