+void Layout::sensor_state_changed(Sensor &sensor, Sensor::State state)
+{
+ if(state==Sensor::ACTIVE)
+ {
+ Block *block = sensor.get_block();
+ if(block && !block->get_train())
+ emergency(block, "Unreserved sensor triggered");
+ }
+}
+
+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);
+ }
+ }
+}
+
+
+template<typename B>
+Layout::Storage<B>::~Storage()
+{
+ while(!base.empty())
+ delete *base.begin();
+}
+
+template<typename B>
+bool Layout::Storage<B>::insert(B &b)