#include <algorithm>
+#include <msp/core/raii.h>
#include <msp/strings/format.h>
#include <msp/time/units.h>
#include "block.h"
-#include "driver.h"
#include "layout.h"
#include "route.h"
#include "trackcircuit.h"
turnout_addr(start.get_turnout_address()),
conflict(false),
sensor(0),
- train(0)
+ train(0),
+ pending_train(0),
+ emitting_reserve(false)
{
add_track(start);
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