3 This file is part of the MSP Märklin suite
4 Copyright © 2006-2008 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):
56 add("locomotive", &Loader::locomotive);
57 add("track", &Loader::track);
60 void Catalogue::Loader::locomotive(unsigned art_no)
62 map<unsigned, LocoType *>::iterator i=cat.locos.find(art_no);
63 if(i!=cat.locos.end())
64 throw Exception("Duplicate locomotive number");
66 RefPtr<LocoType> loco=new LocoType(art_no);
68 unsigned art_nr=loco->get_article_number();
69 cat.locos[art_nr]=loco.release();
72 void Catalogue::Loader::track(unsigned art_no)
74 map<unsigned, TrackType *>::iterator i=cat.tracks.find(art_no);
75 if(i!=cat.tracks.end())
76 throw Exception("Duplicate track number");
78 RefPtr<TrackType> trk=new TrackType(art_no);
80 unsigned art_nr=trk->get_article_number();
81 cat.tracks[art_nr]=trk.release();
84 } // namespace Marklin