1 #include <msp/strings/format.h>
6 #include "trackoffsetiter.h"
13 incompatible_path::incompatible_path(unsigned a, unsigned e):
14 logic_error(format("got %d, but %d already set", a, e))
18 TrackOffsetIter::TrackOffsetIter():
23 TrackOffsetIter::TrackOffsetIter(Track *t, unsigned e, float o):
25 _offset(_track ? o : 0),
26 _path((_track && _offset) ? _track->get_active_path() : -1)
29 TrackOffsetIter::TrackOffsetIter(Track *t, unsigned e, unsigned p, float o):
35 TrackOffsetIter::TrackOffsetIter(const TrackIter &t, float o):
37 _offset(_track ? o : 0),
38 _path((_track && _offset) ? _track->get_active_path() : -1)
41 TrackOffsetIter::TrackOffsetIter(const TrackIter &t, unsigned p, float o):
47 BlockIter TrackOffsetIter::block_iter() const
49 return _track.block_iter();
52 OrientedPoint TrackOffsetIter::point() const
55 return OrientedPoint();
58 return _track->get_point(_track.entry(), _path, _offset);
60 return _track->get_point(_track.entry(), _offset);
63 TrackOffsetIter TrackOffsetIter::next() const
66 return _track.next(_path);
71 TrackOffsetIter TrackOffsetIter::next(unsigned p) const
73 if(_path>=0 && static_cast<unsigned>(_path)!=p)
74 throw incompatible_path(_path, p);
76 return _track.next(p);
79 TrackOffsetIter TrackOffsetIter::advance(float d, const Route *r) const
82 return TrackOffsetIter();
85 return reverse().advance(-d, r).reverse();
96 if(unsigned tid = t->get_turnout_id())
97 p = r->get_turnout(tid);
99 p = t->get_active_path();
102 float length = t->get_type().get_path_length(p);
104 return TrackOffsetIter(t, p, o);
111 return TrackOffsetIter();
114 TrackOffsetIter TrackOffsetIter::reverse() const
117 return TrackOffsetIter();
119 int p = (_path>=0 ? _path : _track->get_active_path());
120 TrackIter t = _track.reverse(p);
122 return TrackOffsetIter();
124 float o = t->get_type().get_path_length(p)-_offset;
126 return TrackOffsetIter(t, p, o);
129 bool TrackOffsetIter::operator==(const TrackOffsetIter &other) const
131 return _track==other._track && _offset==other._offset && _path==other._path;