control(c),
layout(l)
{
- const TrackSeq &tracks=layout.get_tracks();
+ const set<Track *> &tracks=layout.get_tracks();
- TrackSet used_tracks;
- for(TrackSeq::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
+ set<Track *> used_tracks;
+ for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
{
if(unsigned tid=(*i)->get_turnout_id())
- {
- Turnout *t=control.get_turnout(tid);
- if(!t)
- t=new Turnout(control, tid);
- //t->signal_route_changed.connect(sigc::mem_fun(*i, &Track::set_current_route));
- }
+ new Turnout(control, tid);
if(unsigned sid=(*i)->get_sensor_id())
- {
- Sensor *s=control.get_sensor(sid);
- if(!s)
- s=new Sensor(control, sid);
- }
+ new Sensor(control, sid);
+
if(used_tracks.count(*i)==0)
{
- Section *sect=new Section(*this, *i);
- sections.push_back(sect);
- used_tracks.insert(sect->get_tracks().begin(), sect->get_tracks().end());
+ Block *block=new Block(*this, **i);
+ blocks.push_back(block);
+ used_tracks.insert(block->get_tracks().begin(), block->get_tracks().end());
}
}
- for(SectionSeq::iterator i=sections.begin(); i!=sections.end(); ++i)
+ for(BlockSeq::iterator i=blocks.begin(); i!=blocks.end(); ++i)
{
- for(SectionSeq::iterator j=i; j!=sections.end(); ++j)
+ for(BlockSeq::iterator j=i; j!=blocks.end(); ++j)
if(j!=i)
(*i)->check_link(**j);
(*i)->print_debug();
}
}
-Section *TrafficManager::get_section_by_track(const Track *t) const
+TrafficManager::~TrafficManager()
+{
+ for(BlockSeq::iterator i=blocks.begin(); i!=blocks.end(); ++i)
+ delete *i;
+ for(TrainSeq::iterator i=trains.begin(); i!=trains.end(); ++i)
+ delete *i;
+}
+
+Block *TrafficManager::get_block_by_track(const Track *t) const
{
- for(SectionSeq::const_iterator i=sections.begin(); i!=sections.end(); ++i)
+ for(BlockSeq::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
{
- const TrackSet &tracks=(*i)->get_tracks();
+ const set<Track *> &tracks=(*i)->get_tracks();
if(tracks.count(const_cast<Track *>(t)))
return *i;
}