-
- if(end!=blocks.begin() && end!=cur_blocks_end)
- // Free blocks up to the last inactive sensor
- release_blocks(blocks.begin(), end);
- }
-}
-
-void Train::turnout_path_changed(Track &track)
-{
- for(list<BlockIter>::iterator i=blocks.begin(); i!=blocks.end(); ++i)
- if((*i)->get_turnout_id()==track.get_turnout_id() && !reserving && &**i==pending_block)
- reserve_more();
-}
-
-void Train::halt_event(bool h)
-{
- if(h)
- accurate_position = false;
-}
-
-void Train::block_reserved(const Block &block, const Train *train)
-{
- if(&block==pending_block && !train && !reserving)
- reserve_more();
-}
-
-void Train::reserve_more()
-{
- if(!active || blocks.empty())
- return;
-
- BlockIter start = blocks.back();
- if(&*start==stop_at_block)
- return;
- else if(&*start==pending_block)
- {
- TrackIter track = start.track_iter();
- if(!(track.endpoint().paths&(1<<track->get_active_path())))
- return;