X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Flayout.cpp;h=67d646b1d5f542b1e5b156713c7ef79156660ba0;hb=f42183985c65e1e12f19e9246dee90b8e7e44a34;hp=9ec0d0aff852982cca868bd5399343bae3660a51;hpb=1ba0bd68483b900a702c7a38f41250b33770503d;p=r2c2.git diff --git a/source/libmarklin/layout.cpp b/source/libmarklin/layout.cpp index 9ec0d0a..67d646b 100644 --- a/source/libmarklin/layout.cpp +++ b/source/libmarklin/layout.cpp @@ -45,6 +45,14 @@ void Layout::add_route(Route &r) signal_route_added.emit(r); } +Route &Layout::get_route(const string &name) const +{ + for(set::const_iterator i=routes.begin(); i!=routes.end(); ++i) + if((*i)->get_name()==name) + return **i; + throw KeyError("Unknown route", name); +} + void Layout::remove_route(Route &r) { if(routes.erase(&r)) @@ -108,24 +116,27 @@ void Layout::check_routes() const map turnouts = (*i)->get_turnouts(); Track *track = 0; - unsigned trk_route = 0; + unsigned trk_path = 0; for(set::const_iterator j=tracks.begin(); j!=tracks.end(); ++j) { map::const_iterator k = turnouts.find((*j)->get_turnout_id()); if(k!=turnouts.end()) { track = *j; - trk_route = k->second; + trk_path = k->second; break; } } + if(!track) + continue; + (*i)->add_track(*track); const vector &eps = track->get_type().get_endpoints(); unsigned ep = 0; for(unsigned j=0; jtraverse(ep, trk_route); + int out_ep = track->traverse(ep, trk_path); if(out_ep<0) break; Track *next = track->get_links()[out_ep]; if(!next || next == start) break; ep = next->get_endpoint_by_link(*track); - if(next->get_type().get_n_routes()>1) + if(next->get_type().get_n_paths()>1) { map::const_iterator j = turnouts.find(next->get_turnout_id()); if(j==turnouts.end()) break; - trk_route = j->second; + trk_path = j->second; } else - trk_route = 0; + trk_path = 0; (*i)->add_track(*next); track = next; }