- RouteList::iterator next_route = route;
- if(!advance_route(next_route, *b_iter_next))
+ // Is the block a turnout? If so, set it to the proper path.
+ if(unsigned taddr = block.get_turnout_address())
+ {
+ int path = (*reserving_route)->get_turnout(taddr);
+ if(path>=0)
+ track->set_active_path(path);
+ }
+
+ if(reserving_route==routes.end() || !(*reserving_route)->has_track(*track))
+ {
+ reserving_route = routes.begin();
+ track = t->get_block_allocator().first().track_iter();
+ for(; track; track=track.next())
+ {
+ if(!advance_to_track(reserving_route, *track))
+ throw logic_error("internal error (reservation outside of route)");
+ else if(&track->get_block()==&block)
+ break;
+ }
+ }
+
+ // Do we need to move to the next route?
+ for(; track; track=track.next((*reserving_route)->get_path(*track)))
+ {
+ if(!advance_to_track(reserving_route, *track))