1 #include <msp/core/refptr.h>
2 #include <msp/datafile/parser.h>
11 Catalogue::~Catalogue()
13 for(map<unsigned, TrackType *>::iterator i=tracks.begin(); i!=tracks.end(); ++i)
17 TrackType &Catalogue::get_track(unsigned art_nr)
19 map<unsigned, TrackType *>::const_iterator i=tracks.find(art_nr);
21 throw KeyError("Unknown track type");
26 void Catalogue::load(const string &fn)
28 IO::File in(fn.c_str());
30 DataFile::Parser parser(in, fn);
36 Catalogue::Loader::Loader(Catalogue &c):
39 add("track", &Loader::track);
42 void Catalogue::Loader::track(unsigned art_no)
44 map<unsigned, TrackType *>::iterator i=cat.tracks.find(art_no);
45 if(i!=cat.tracks.end())
46 throw Exception("Duplicate track number");
48 RefPtr<TrackType> trk=new TrackType(art_no);
50 unsigned art_nr=trk->get_article_number();
51 cat.tracks.insert(map<unsigned, TrackType *>::value_type(art_nr, trk.release()));
54 } // namespace Marklin