]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/route.cpp
Add some shortcut functions for getting endpoints
[r2c2.git] / source / libmarklin / route.cpp
index 556cbf4014c57d474a5e7e604c01f08c7f1a5352..befaa6de9245a9dbe5d36f02a3a333f265c14fc1 100644 (file)
@@ -87,7 +87,7 @@ list<Track *> dijkstra(const TrackIter &from, const Pred &goal)
                        break;
                }
 
-               unsigned paths = lowest.track->get_type().get_endpoints()[lowest.track.entry()].paths;
+               unsigned paths = lowest.track.endpoint().paths;
                for(unsigned i=0; paths>>i; ++i)
                        if(paths&(1<<i))
                        {
@@ -188,7 +188,7 @@ void Route::update_turnouts()
 
                                if(unsigned tid2 = links[j]->get_turnout_id())
                                {
-                                       const TrackType::Endpoint &ep = links[j]->get_type().get_endpoints()[links[j]->get_endpoint_by_link(**i)];
+                                       const TrackType::Endpoint &ep = links[j]->get_type().get_endpoint(links[j]->get_endpoint_by_link(**i));
                                        int p = get_turnout(tid2);
                                        if(p>=0 && !(ep.paths&(1<<p)))
                                        {
@@ -230,6 +230,17 @@ int Route::get_turnout(unsigned id) const
        return -1;
 }
 
+unsigned Route::get_path(Track &trk) const
+{
+       if(unsigned tid = trk.get_turnout_id())
+       {
+               map<unsigned, int>::const_iterator i = turnouts.find(tid);
+               if(i!=turnouts.end())
+                       return i->second;
+       }
+       return trk.get_active_path();
+}
+
 void Route::add_track(Track &trk)
 {
        if(tracks.count(&trk))