+void BlockAllocator::advance_to(const Block *block)
+{
+ BlockList::iterator end;
+ if(block)
+ end = find_if(cur_blocks_end, blocks.end(), BlockMatch(*block));
+ else
+ end = blocks.end();
+
+ SetFlag setf(advancing);
+ BlockList::iterator i = cur_blocks_end;
+ // Update cur_blocks_end first to keep things consistent.
+ cur_blocks_end = end;
+ for(; i!=end; ++i)
+ train.signal_advanced.emit(**i);
+}
+