1 #include <msp/core/refptr.h>
2 #include <msp/datafile/parser.h>
12 Catalogue::~Catalogue()
14 for(map<unsigned, TrackType *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
18 TrackType &Catalogue::get_track(unsigned art_nr) const
20 map<unsigned, TrackType *>::const_iterator i=tracks.find(art_nr);
22 throw KeyError("Unknown track type");
27 LocoType &Catalogue::get_locomotive(unsigned art_nr) const
29 map<unsigned, LocoType *>::const_iterator i=locos.find(art_nr);
31 throw KeyError("Unknown locomotive type");
36 void Catalogue::load(const string &fn)
38 IO::File in(fn.c_str());
40 DataFile::Parser parser(in, fn);
46 Catalogue::Loader::Loader(Catalogue &c):
49 add("locomotive", &Loader::locomotive);
50 add("track", &Loader::track);
53 void Catalogue::Loader::locomotive(unsigned art_no)
55 map<unsigned, LocoType *>::iterator i=cat.locos.find(art_no);
56 if(i!=cat.locos.end())
57 throw Exception("Duplicate locomotive number");
59 RefPtr<LocoType> loco=new LocoType(art_no);
61 unsigned art_nr=loco->get_article_number();
62 cat.locos[art_nr]=loco.release();
65 void Catalogue::Loader::track(unsigned art_no)
67 map<unsigned, TrackType *>::iterator i=cat.tracks.find(art_no);
68 if(i!=cat.tracks.end())
69 throw Exception("Duplicate track number");
71 RefPtr<TrackType> trk=new TrackType(art_no);
73 unsigned art_nr=trk->get_article_number();
74 cat.tracks[art_nr]=trk.release();
77 } // namespace Marklin