]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/block.cpp
Detect conflicting blocks and avoid creating duplicate sensors
[r2c2.git] / source / libr2c2 / block.cpp
index f02762c85a958e668b5b4e200c86bcbb877f0767..33627f8a7cf354afd006ace1b18436090d979441 100644 (file)
@@ -18,6 +18,7 @@ Block::Block(Layout &l, Track &start):
        id(0),
        sensor_id(start.get_sensor_id()),
        turnout_id(start.get_turnout_id()),
+       conflict(false),
        sensor(0),
        train(0)
 {
@@ -44,7 +45,11 @@ Block::Block(Layout &l, Track &start):
 
        determine_id();
 
-       if(sensor_id)
+       const set<Block *> &blocks = layout.get_all<Block>();
+       for(set<Block *>::const_iterator i=blocks.begin(); (!conflict && i!=blocks.end()); ++i)
+               conflict = (id==(*i)->get_id());
+
+       if(!conflict && sensor_id)
                sensor = new TrackCircuit(layout, *this);
 
        layout.add(*this);