]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/train.cpp
Make Route hold non-const Tracks to match Block
[r2c2.git] / source / libmarklin / train.cpp
index ccb7cc25bbf8714706e549c3bb4cee6ff07e2b32..6b6b89ed8d2d4af8485a2cc1f704762b007518ca 100644 (file)
@@ -234,10 +234,10 @@ void Train::set_route(const Route *r)
        signal_route_changed.emit(get_route());
 }
 
-void Train::go_to(const Track &to)
+void Train::go_to(Track &to)
 {
        for(list<BlockRef>::const_iterator i=cur_blocks.begin(); i!=cur_blocks.end(); ++i)
-               if(i->block->get_tracks().count(const_cast<Track *>(&to)))
+               if(i->block->get_tracks().count(&to))
                {
                        signal_arrived.emit();
                        set_route(0);
@@ -315,7 +315,7 @@ bool Train::divert(Track &from)
 
        unsigned ep = track->get_endpoint_by_link(from);
 
-       set<const Track *> tracks;
+       set<Track *> tracks;
        for(list<RouteRef>::iterator i=routes.begin(); i!=routes.end(); ++i)
                tracks.insert(i->route->get_tracks().begin(), i->route->get_tracks().end());
        Route *diversion = 0;
@@ -764,7 +764,7 @@ void Train::sensor_event(unsigned addr, bool state)
                        // Check if we've reached the next route
                        if(routes.size()>1)
                        {
-                               const set<const Track *> &rtracks = (++routes.begin())->route->get_tracks();
+                               const set<Track *> &rtracks = (++routes.begin())->route->get_tracks();
                                for(list<BlockRef>::iterator j=rsv_blocks.begin(); j!=i; ++j)
                                        if(rtracks.count(j->block->get_endpoints()[j->entry].track))
                                        {
@@ -1274,7 +1274,7 @@ void Train::reverse_blocks(list<BlockRef> &blocks) const
                i->entry = i->block->traverse(i->entry);
 }
 
-bool Train::advance_route(list<RouteRef>::iterator &iter, const Track &track)
+bool Train::advance_route(list<RouteRef>::iterator &iter, Track &track)
 {
        while(iter!=routes.end() && !iter->route->get_tracks().count(&track))
                ++iter;
@@ -1298,7 +1298,7 @@ Route *Train::create_lead_route(Route *lead, const Route *target)
                lead->set_temporary(true);
        }
 
-       set<const Track *> tracks;
+       set<Track *> tracks;
        for(list<BlockRef>::iterator i=cur_blocks.begin(); i!=rsv_blocks.end(); )
        {
                const set<Track *> &btracks = i->block->get_tracks();
@@ -1315,10 +1315,10 @@ Route *Train::create_lead_route(Route *lead, const Route *target)
        return lead;
 }
 
-bool Train::is_valid_diversion(const Route &diversion, const Track &from, unsigned from_ep)
+bool Train::is_valid_diversion(const Route &diversion, Track &from, unsigned from_ep)
 {
        float diversion_len = 0;
-       const Track *track = &from;
+       Track *track = &from;
        unsigned ep = from_ep;
        while(diversion.get_tracks().count(track))
        {
@@ -1327,7 +1327,7 @@ bool Train::is_valid_diversion(const Route &diversion, const Track &from, unsign
                        path = diversion.get_turnout(track->get_turnout_id());
                diversion_len += track->get_type().get_path_length(path);
 
-               const Track *next = track->get_link(track->traverse(ep, path));
+               Track *next = track->get_link(track->traverse(ep, path));
                ep = next->get_endpoint_by_link(*track);
                track = next;
 
@@ -1339,7 +1339,7 @@ bool Train::is_valid_diversion(const Route &diversion, const Track &from, unsign
        if(!advance_route(route, from))
                return false;
 
-       set<const Track *> visited;
+       set<Track *> visited;
        float route_len = 0;
        track = &from;
        ep = from_ep;
@@ -1357,7 +1357,7 @@ bool Train::is_valid_diversion(const Route &diversion, const Track &from, unsign
                        return false;
                visited.insert(track);
 
-               const Track *next = track->get_link(track->traverse(ep, path));
+               Track *next = track->get_link(track->traverse(ep, path));
                ep = next->get_endpoint_by_link(*track);
                track = next;