X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Froute.cpp;h=38ea9f681d77da64f10600b369124c27724aca59;hb=1fc9750d1886c0a7822965700e6501090f92f4cc;hp=77c4f9280532537e41614c37837f66a82cca67a6;hpb=eb9af366e9561204de69d97b8edd077dc6dc7add;p=r2c2.git diff --git a/source/libr2c2/route.cpp b/source/libr2c2/route.cpp index 77c4f92..38ea9f6 100644 --- a/source/libr2c2/route.cpp +++ b/source/libr2c2/route.cpp @@ -134,9 +134,9 @@ string bad_route::get_message(RouteValidityMask valid) unsigned i = 0; if(!(valid&1)) reasons[i++] = "unlinked"; - else if(!(valid&2)) + if(!(valid&2)) reasons[i++] = "branching"; - else if(!(valid&4)) + if(!(valid&4)) reasons[i++] = "not smooth"; return join(reasons, reasons+i, ", "); } @@ -196,7 +196,7 @@ void Route::update_turnouts() if(unsigned tid2 = links[j]->get_turnout_id()) { - const TrackType::Endpoint &ep = links[j]->get_type().get_endpoint(links[j]->get_endpoint_by_link(**i)); + const TrackType::Endpoint &ep = links[j]->get_type().get_endpoint(links[j]->get_link_slot(**i)); int p = get_turnout(tid2); if(p>=0 && !ep.has_path(p)) { @@ -272,14 +272,21 @@ void Route::add_tracks(const set &trks) if(!tracks.count(*i)) pending.insert(*i); + if(tracks.empty()) + { + set::iterator i = pending.begin(); + tracks.insert(*i); + pending.erase(i); + } + while(!pending.empty()) { RouteValidityMask valid = ROUTE_INVALID; - for(set::const_iterator i=pending.begin(); i!=pending.end(); ++i) - if(tracks.empty() || (valid=check_validity(**i))==ROUTE_VALID) + for(set::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; } @@ -345,7 +352,7 @@ RouteValidityMask Route::check_validity(Track &trk) const if(unsigned tid = (*i)->get_turnout_id()) { - const TrackType::Endpoint &ep = (*i)->get_type().get_endpoint((*i)->get_endpoint_by_link(trk)); + const TrackType::Endpoint &ep = (*i)->get_type().get_endpoint((*i)->get_link_slot(trk)); int path = get_turnout(tid); if(path>=0) { @@ -364,7 +371,7 @@ RouteValidityMask Route::check_validity(Track &trk) const unsigned tid2 = tlinks[j]->get_turnout_id(); if(tid2) { - const TrackType::Endpoint &ep2 = tlinks[j]->get_type().get_endpoint(tlinks[j]->get_endpoint_by_link(**i)); + const TrackType::Endpoint &ep2 = tlinks[j]->get_type().get_endpoint(tlinks[j]->get_link_slot(**i)); path = get_turnout(tid2); // Ignore a linked turnout with some other path set if(path>=0 && !ep2.has_path(path)) @@ -444,7 +451,7 @@ void Route::Loader::finish() { Track *link = (*i)->get_link(k); if(!obj.tracks.count(link)) - obj.add_track_chain(*link, link->get_endpoint_by_link(**i), turnouts); + obj.add_track_chain(*link, link->get_link_slot(**i), turnouts); if(!obj.tracks.count(*i)) obj.add_track_chain(**i, k, turnouts); break;