3 This file is part of the MSP Märklin suite
4 Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
8 #include <msp/core/refptr.h>
9 #include <msp/datafile/parser.h>
10 #include "catalogue.h"
12 #include "tracktype.h"
19 Catalogue::~Catalogue()
21 for(map<unsigned, TrackType *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
25 TrackType &Catalogue::get_track(unsigned art_nr) const
27 map<unsigned, TrackType *>::const_iterator i=tracks.find(art_nr);
29 throw KeyError("Unknown track type");
34 LocoType &Catalogue::get_locomotive(unsigned art_nr) const
36 map<unsigned, LocoType *>::const_iterator i=locos.find(art_nr);
38 throw KeyError("Unknown locomotive type");
44 Catalogue::Loader::Loader(Catalogue &c):
45 DataFile::BasicLoader<Catalogue>(c)
47 add("locomotive", &Loader::locomotive);
48 add("track", &Loader::track);
51 void Catalogue::Loader::locomotive(unsigned art_nr)
53 if(obj.locos.count(art_nr))
54 throw Exception("Duplicate locomotive number");
56 RefPtr<LocoType> loco = new LocoType(art_nr);
58 obj.locos[art_nr] = loco.release();
61 void Catalogue::Loader::track(unsigned art_nr)
63 if(obj.tracks.count(art_nr))
64 throw Exception("Duplicate track number");
66 RefPtr<TrackType> trk = new TrackType(art_nr);
68 obj.tracks[art_nr] = trk.release();
71 } // namespace Marklin