3 This file is part of the MSP Märklin suite
4 Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
9 #include <msp/time/utils.h>
12 #include "trafficmanager.h"
20 TrafficManager::TrafficManager(Control &c, Layout &l):
24 const set<Track *> &tracks=layout.get_tracks();
26 set<Track *> used_tracks;
27 for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
29 if(unsigned tid=(*i)->get_turnout_id())
30 new Turnout(control, tid);
31 if(unsigned sid=(*i)->get_sensor_id())
32 new Sensor(control, sid);
34 if(used_tracks.count(*i)==0)
36 Block *block=new Block(*this, **i);
37 blocks.push_back(block);
38 used_tracks.insert(block->get_tracks().begin(), block->get_tracks().end());
42 for(list<Block *>::iterator i=blocks.begin(); i!=blocks.end(); ++i)
43 for(list<Block *>::iterator j=i; j!=blocks.end(); ++j)
45 (*i)->check_link(**j);
48 TrafficManager::~TrafficManager()
50 for(list<Block *>::iterator i=blocks.begin(); i!=blocks.end(); ++i)
52 for(list<Train *>::iterator i=trains.begin(); i!=trains.end(); ++i)
56 Block &TrafficManager::get_block_by_track(const Track &t) const
58 for(list<Block *>::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
60 const set<Track *> &tracks=(*i)->get_tracks();
61 if(tracks.count(const_cast<Track *>(&t)))
65 throw InvalidParameterValue("Unknown track");
68 void TrafficManager::add_train(Train *t)
70 if(find(trains.begin(), trains.end(), t)==trains.end())
74 void TrafficManager::tick()
76 Time::TimeStamp t=Time::now();
78 for(list<Train *>::iterator i=trains.begin(); i!=trains.end(); ++i)
82 void TrafficManager::turnout_route_changed(unsigned, Turnout *)
86 } // namespace Marklin