X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fblock.cpp;h=25b3bc8b85163d0bfd2ece6a54718f02b840ec6d;hb=ece91e92af821bd6b468bd1134302efb7c28f019;hp=e4292eab40960e338ba0a7df7acd68f447e3e14f;hpb=1ac853ffc606b29ffd88b923ed3551ee6282afb2;p=r2c2.git diff --git a/source/libr2c2/block.cpp b/source/libr2c2/block.cpp index e4292ea..25b3bc8 100644 --- a/source/libr2c2/block.cpp +++ b/source/libr2c2/block.cpp @@ -1,8 +1,8 @@ #include +#include #include #include #include "block.h" -#include "driver.h" #include "layout.h" #include "route.h" #include "trackcircuit.h" @@ -21,7 +21,9 @@ Block::Block(Layout &l, Track &start): turnout_addr(start.get_turnout_address()), conflict(false), sensor(0), - train(0) + train(0), + pending_train(0), + emitting_reserve(false) { add_track(start); @@ -168,10 +170,19 @@ Block *Block::get_link(unsigned epi) const bool Block::reserve(Train *t) { - if(!t || !train) + if(!t || !(emitting_reserve ? pending_train : train)) { - train = t; - signal_reserved.emit(train); + pending_train = t; + if(!emitting_reserve) + { + while(pending_train!=train) + { + train = pending_train; + SetFlag setf(emitting_reserve); + signal_reserved.emit(train); + } + } + return true; } else