- if(clear_blocks_end==blocks.end())
- return;
-
- for(list<BlockIter>::iterator i=clear_blocks_end; i!=blocks.end(); ++i)
- {
- if((*i)->get_turnout_id())
- {
- TrackIter track = i->track_iter();
- const TrackType::Endpoint &track_ep = track.endpoint();
-
- unsigned path = 0;
- list<BlockIter>::iterator j = i;
- if(++j!=blocks.end())
- {
- TrackIter rev = j->track_iter().flip();
- unsigned mask = rev.endpoint().paths&track_ep.paths;
- for(path=0; mask>1; mask>>=1, ++path) ;
- }
- else
- return;
-
- if(path!=track->get_active_path())
- {
- if(set && !track->is_path_changing())
- {
- track->set_active_path(path);
- if(track->is_path_changing())
- continue;
- }
- else
- continue;
- }
- }
-
- if(i==clear_blocks_end)
- ++clear_blocks_end;
- if(i==cur_blocks_end && !(*i)->get_sensor_id())
- ++cur_blocks_end;
- }