+/* $Id$
+
+This file is part of the MSP Märklin suite
+Copyright © 2007-2009 Mikkosoft Productions, Mikko Rasa
+Distributed under the GPL
+*/
+
#ifndef LIBMARKLIN_ROUTE_H_
#define LIBMARKLIN_ROUTE_H_
-#include <list>
+#include <map>
+#include <set>
#include <string>
-#include "track.h"
+#include <msp/datafile/loader.h>
namespace Marklin {
+class Layout;
+class Track;
+class Turnout;
+
class Route
{
public:
- typedef std::map<unsigned, unsigned> TurnoutMap;
+ class Loader: public Msp::DataFile::BasicLoader<Route>
+ {
+ public:
+ Loader(Route &);
+ private:
+ void turnout(unsigned, unsigned);
+ };
- Route();
- const TurnoutMap &get_turnouts() const { return turnouts; }
- void add_track(Track *);
- ~Route();
private:
std::string name;
- TrackSeq tracks;
- TurnoutMap turnouts;
+ std::set<const Track *> tracks;
+ std::map<unsigned, int> turnouts;
+
+public:
+ Route(Layout &, const std::string &);
+
+ const std::string &get_name() const { return name; }
+ 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 &);
};
-typedef std::list<Route *> RouteSeq;
} // namespace Marklin