X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fblock.cpp;h=25b3bc8b85163d0bfd2ece6a54718f02b840ec6d;hb=ece91e92af821bd6b468bd1134302efb7c28f019;hp=a0d90f3a3ea153586342cc202707fe88ee313f3a;hpb=508ee4bfcc0f8fb1373fb7af251c59c873ef896f;p=r2c2.git diff --git a/source/libr2c2/block.cpp b/source/libr2c2/block.cpp index a0d90f3..25b3bc8 100644 --- a/source/libr2c2/block.cpp +++ b/source/libr2c2/block.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include "block.h" @@ -20,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); @@ -167,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