3 This file is part of the MSP Märklin suite
4 Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
9 #include <msp/time/utils.h>
12 #include "tracktype.h"
13 #include "trafficmanager.h"
21 TrafficManager::TrafficManager(Control &c, Layout &l):
25 const set<Track *> &tracks=layout.get_tracks();
27 set<Track *> used_tracks;
28 for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
30 if(unsigned tid=(*i)->get_turnout_id())
31 new Turnout(control, tid, (*i)->get_type().get_n_routes()>=3);
32 if(unsigned sid=(*i)->get_sensor_id())
33 new Sensor(control, sid);
35 if(used_tracks.count(*i)==0)
37 Block *block=new Block(*this, **i);
38 blocks.push_back(block);
39 used_tracks.insert(block->get_tracks().begin(), block->get_tracks().end());
43 for(list<Block *>::iterator i=blocks.begin(); i!=blocks.end(); ++i)
44 for(list<Block *>::iterator j=i; j!=blocks.end(); ++j)
46 (*i)->check_link(**j);
49 TrafficManager::~TrafficManager()
51 for(list<Block *>::iterator i=blocks.begin(); i!=blocks.end(); ++i)
53 for(list<Train *>::iterator i=trains.begin(); i!=trains.end(); ++i)
57 Block &TrafficManager::get_block_by_track(const Track &t) const
59 for(list<Block *>::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
61 const set<Track *> &tracks=(*i)->get_tracks();
62 if(tracks.count(const_cast<Track *>(&t)))
66 throw InvalidParameterValue("Unknown track");
69 void TrafficManager::add_train(Train *t)
71 if(find(trains.begin(), trains.end(), t)==trains.end())
75 void TrafficManager::tick()
77 Time::TimeStamp t=Time::now();
83 for(list<Train *>::iterator i=trains.begin(); i!=trains.end(); ++i)
87 void TrafficManager::turnout_route_changed(unsigned, Turnout *)
91 } // namespace Marklin