if(!tracks.count(*i))
pending.insert(*i);
+ if(tracks.empty())
+ {
+ set<Track *>::iterator i = pending.begin();
+ tracks.insert(*i);
+ pending.erase(i);
+ }
+
while(!pending.empty())
{
RouteValidityMask valid = ROUTE_INVALID;
- for(set<Track *>::const_iterator i=pending.begin(); i!=pending.end(); ++i)
- if(tracks.empty() || (valid=check_validity(**i))==ROUTE_VALID)
+ for(set<Track *>::iterator i=pending.begin(); i!=pending.end(); ++i)
+ if((valid=check_validity(**i))==ROUTE_VALID)
{
tracks.insert(*i);
- pending.erase(*i);
+ pending.erase(i);
break;
}
update_turnouts();
}
-void Route::add_track_chain(Track &start, unsigned ep, const TurnoutMap &trnts)
+void Route::add_track_chain(const TrackIter &start, const TurnoutMap &trnts)
{
- TrackIter iter(&start, ep);
+ if(!start)
+ throw invalid_argument("Route::add_track_chain");
+
+ TrackIter iter = start;
while(iter)
{
if(iter->get_type().is_dead_end())
{
Track *link = (*i)->get_link(k);
if(!obj.tracks.count(link))
- obj.add_track_chain(*link, link->get_link_slot(**i), turnouts);
+ obj.add_track_chain(TrackIter(link, link->get_link_slot(**i)), turnouts);
if(!obj.tracks.count(*i))
- obj.add_track_chain(**i, k, turnouts);
+ obj.add_track_chain(TrackIter(*i, k), turnouts);
break;
}