namespace R2C2 {
-class SignalType;
-class TrackType;
-class VehicleType;
+class ObjectType;
class Catalogue
{
void vehicle(ArticleNumber);
};
- typedef std::map<ArticleNumber, TrackType *> TrackMap;
- typedef std::map<ArticleNumber, VehicleType *> VehicleMap;
- typedef std::map<ArticleNumber, SignalType *> SignalMap;
+ typedef std::map<ArticleNumber, ObjectType *> ObjectMap;
- sigc::signal<void, const TrackType &> signal_track_added;
- sigc::signal<void, const VehicleType &> signal_vehicle_added;
- sigc::signal<void, const SignalType &> signal_signal_added;
+ sigc::signal<void, const ObjectType &> signal_object_added;
private:
float scale;
Profile rail_profile;
Profile ballast_profile;
std::string track_technique;
- TrackMap tracks;
- VehicleMap vehicles;
- SignalMap signals;
+ ObjectMap objects;
Layout layout;
public:
const Profile &get_ballast_profile() const { return ballast_profile; }
const std::string &get_track_technique() const { return track_technique; }
- void add_track(TrackType &);
- const TrackType &get_track(const ArticleNumber &) const;
- const TrackMap &get_tracks() const { return tracks; }
+ void add(ObjectType &);
+ const ObjectType &get(const ArticleNumber &) const;
+ const ObjectMap &get_all() const { return objects; }
- void add_vehicle(VehicleType &);
- const VehicleType &get_vehicle(const ArticleNumber &) const;
- const VehicleMap &get_vehicles() const { return vehicles; }
-
- void add_signal(SignalType &);
- const SignalType &get_signal(const ArticleNumber &) const;
- const SignalMap &get_signals() const { return signals; }
+ template<typename T>
+ const T &get(const ArticleNumber &an) const
+ { return dynamic_cast<const T &>(get(an)); }
Layout &get_layout() { return layout; }
};