+void Layout::block_reserved(Block &block, Train *train)
+{
+ if(emitting_block_reserved)
+ block_reserve_queue.push_back(BlockReservation(block, train));
+ else
+ {
+ SetFlag setf(emitting_block_reserved);
+ signal_block_reserved.emit(block, train);
+ while(!block_reserve_queue.empty())
+ {
+ BlockReservation br = block_reserve_queue.front();
+ block_reserve_queue.pop_front();
+ signal_block_reserved.emit(br.block, br.train);
+ }
+ }
+}
+