Block::Block(TrafficManager &tm, Track &start):
trfc_mgr(tm),
id(next_id++),
- sensor_id(0),
+ sensor_id(start.get_sensor_id()),
train(0)
{
tracks.insert(&start);
for(unsigned i=0; i<links.size(); ++i)
if(links[i] && !tracks.count(links[i]))
{
- if(links[i]->get_sensor_id()==start.get_sensor_id())
+ if(links[i]->get_sensor_id()==sensor_id)
{
queue.push_back(links[i]);
tracks.insert(links[i]);
if(!t || !train)
{
train=t;
- cout<<"Block "<<this<<" reserved for train "<<train<<'\n';
+ if(train)
+ cout<<"Block "<<this<<" reserved for train "<<train<<'\n';
+ else
+ cout<<"Block "<<this<<" freed\n";
trfc_mgr.signal_block_reserved.emit(*this, train);
return true;
}
{
if(i==track_ep) continue;
Track *link=track.get_link(i);
- if(link) continue;
+ if(!link) continue;
if(visited.count(link)) continue;
if(!(eps[i].routes&eps[track_ep].routes)) continue;
j->routes|=route;
}
}
-
- visited.erase(--visited.end());
}
unsigned Block::next_id=1;