]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/block.cpp
Convert engineer to use mspgbase instead of SDL
[r2c2.git] / source / libmarklin / block.cpp
index 3bd251f3afd03189edad88502b1a7b28f50ec4b3..0106a50731d6dc3fb98e2e5a8f68a4c359614a04 100644 (file)
@@ -14,7 +14,7 @@ namespace Marklin {
 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);
@@ -31,7 +31,7 @@ Block::Block(TrafficManager &tm, Track &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]);
@@ -123,7 +123,10 @@ bool Block::reserve(const Train *t)
        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;
        }
@@ -157,7 +160,7 @@ void Block::find_routes(Track &track, unsigned track_ep, unsigned route, set<Tra
        {
                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;
 
@@ -170,8 +173,6 @@ void Block::find_routes(Track &track, unsigned track_ep, unsigned route, set<Tra
                                        j->routes|=route;
                }
        }
-
-       visited.erase(--visited.end());
 }
 
 unsigned Block::next_id=1;