#include <set>
#include <string>
#include <sigc++/trackable.h>
-#include <msp/datafile/loader.h>
+#include <msp/datafile/objectloader.h>
namespace R2C2 {
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;
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: