]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trackoffsetiter.cpp
Move the sleep in ArduControl baud rate logic to the correct place
[r2c2.git] / source / libr2c2 / trackoffsetiter.cpp
index a6145690cb078c5277b6601cd1c25578dbf82491..f8e8a2d2a4c54a5270c85a41fd5955011c2f9641 100644 (file)
@@ -49,10 +49,10 @@ BlockIter TrackOffsetIter::block_iter() const
        return _track.block_iter();
 }
 
-TrackPoint TrackOffsetIter::point() const
+OrientedPoint TrackOffsetIter::point() const
 {
        if(!_track)
-               return TrackPoint();
+               return OrientedPoint();
 
        if(_path>=0)
                return _track->get_point(_track.entry(), _path, _offset);
@@ -91,13 +91,7 @@ TrackOffsetIter TrackOffsetIter::advance(float d, const Route *r) const
        while(t)
        {
                if(p<0)
-               {
-                       if(r)
-                               if(unsigned tid = t->get_turnout_id())
-                                       p = r->get_turnout(tid);
-                       if(p<0)
-                               p = t->get_active_path();
-               }
+                       p = (r ? r->get_path(*t) : t->get_active_path());
 
                float length = t->get_type().get_path_length(p);
                if(o<length)
@@ -118,6 +112,9 @@ TrackOffsetIter TrackOffsetIter::reverse() const
 
        int p = (_path>=0 ? _path : _track->get_active_path());
        TrackIter t = _track.reverse(p);
+       if(!t)
+               return TrackOffsetIter();
+
        float o = t->get_type().get_path_length(p)-_offset;
 
        return TrackOffsetIter(t, p, o);