- /* We are arriving at a turnout. See if we have enough blocks and
- distance reserved. */
- if(nsens>=3 && dist>=min_dist)
- break;
- }
-
- blocks.push_back(block);
- if(!block->reserve(this))
- {
- blocks.pop_back();
- pending_block = &*block;
- break;
- }
-
- if(cur_blocks_end==blocks.end())
- --cur_blocks_end;
-
- TrackIter track = block.track_iter();
- if(track->is_path_changing())
- {
- pending_block = &*block;
- break;
- }
- else
- {
- const TrackType::Endpoint &entry_ep = track.endpoint();
- unsigned path = track->get_active_path();
- if(!(entry_ep.paths&(1<<path)))
- {
- const TrackType::Endpoint &exit_ep = track.reverse().endpoint();
- if(unsigned mask = entry_ep.paths&exit_ep.paths)
+ TrackIter track = allocator.iter_for(*block).track_iter();
+ for(; (track && &track->get_block()==block); track=track.next())
+ if(track.track()==gate->get_track())