X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fblock.cpp;h=59ad3a3c990965ac67b9e0ccad5602aff5c35abb;hb=59b3cebecfd8f1462c95bab447be70dfb5f38e92;hp=f02762c85a958e668b5b4e200c86bcbb877f0767;hpb=91385545a7d76784a17af421b0def49775be0d4c;p=r2c2.git diff --git a/source/libr2c2/block.cpp b/source/libr2c2/block.cpp index f02762c..59ad3a3 100644 --- a/source/libr2c2/block.cpp +++ b/source/libr2c2/block.cpp @@ -16,8 +16,9 @@ namespace R2C2 { Block::Block(Layout &l, Track &start): TrackChain(l), id(0), - sensor_id(start.get_sensor_id()), - turnout_id(start.get_turnout_id()), + sensor_addr(start.get_sensor_address()), + turnout_addr(start.get_turnout_address()), + conflict(false), sensor(0), train(0) { @@ -44,7 +45,11 @@ Block::Block(Layout &l, Track &start): determine_id(); - if(sensor_id) + const set &blocks = layout.get_all(); + for(set::const_iterator i=blocks.begin(); (!conflict && i!=blocks.end()); ++i) + conflict = (id==(*i)->get_id()); + + if(!conflict && sensor_addr) sensor = new TrackCircuit(layout, *this); layout.add(*this); @@ -76,7 +81,7 @@ void Block::on_track_added(Track &track) TrackChain::Validity Block::check_validity(Track &track) const { - if(track.get_sensor_id()!=sensor_id || track.get_turnout_id()!=turnout_id) + if(track.get_sensor_address()!=sensor_addr || track.get_turnout_address()!=turnout_addr) return INCOMPATIBLE; return TrackChain::check_validity(track); @@ -169,10 +174,10 @@ bool Block::reserve(Train *t) void Block::determine_id() { - if(sensor_id) - id = 0x1000|sensor_id; - else if(turnout_id) - id = 0x2000|turnout_id; + if(sensor_addr) + id = 0x1000|sensor_addr; + else if(turnout_addr) + id = 0x2000|turnout_addr; else if(endpoints.size()==2) { unsigned id1 = endpoints[0].link ? endpoints[0].link->get_id() : 1;