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");
43 void Catalogue::load(const string &fn)
45 IO::File in(fn.c_str());
47 DataFile::Parser parser(in, fn);
53 Catalogue::Loader::Loader(Catalogue &c):
54 DataFile::BasicLoader<Catalogue>(c)
56 add("locomotive", &Loader::locomotive);
57 add("track", &Loader::track);
60 void Catalogue::Loader::locomotive(unsigned art_nr)
62 if(obj.locos.count(art_nr))
63 throw Exception("Duplicate locomotive number");
65 RefPtr<LocoType> loco=new LocoType(art_nr);
67 obj.locos[art_nr]=loco.release();
70 void Catalogue::Loader::track(unsigned art_nr)
72 if(obj.tracks.count(art_nr))
73 throw Exception("Duplicate track number");
75 RefPtr<TrackType> trk=new TrackType(art_nr);
77 obj.tracks[art_nr]=trk.release();
80 } // namespace Marklin