]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/trackoffsetiter.h
776f7a26d26367ff29afe7b5cb7b686c3b7091e6
[r2c2.git] / source / libr2c2 / trackoffsetiter.h
1 #ifndef LIBR2C2_TRACKOFFSETITER_H_
2 #define LIBR2C2_TRACKOFFSETITER_H_
3
4 #include <stdexcept>
5 #include "trackiter.h"
6
7 namespace R2C2 {
8
9 class incompatible_path: public std::logic_error
10 {
11 public:
12         incompatible_path(unsigned, unsigned);
13         virtual ~incompatible_path() throw() { }
14 };
15
16 class Route;
17
18 class TrackOffsetIter
19 {
20 private:
21         TrackIter _track;
22         float _offset;
23         int _path;
24
25 public:
26         TrackOffsetIter();
27         TrackOffsetIter(Track *, unsigned, float = 0);
28         TrackOffsetIter(Track *, unsigned, unsigned, float);
29         TrackOffsetIter(const TrackIter &, float = 0);
30         TrackOffsetIter(const TrackIter &, unsigned, float);
31
32         Track *track() const { return _track.track(); }
33         unsigned entry() const { return _track.entry(); }
34         const TrackIter &track_iter() const { return _track; }
35         BlockIter block_iter() const;
36         float offset() const { return _offset; }
37
38         OrientedPoint point() const;
39
40         TrackOffsetIter next() const;
41         TrackOffsetIter next(unsigned) const;
42         TrackOffsetIter advance(float, const Route * = 0) const;
43         TrackOffsetIter reverse() const;
44
45         Track &operator*() const { return *_track; }
46         Track *operator->() const { return _track.operator->(); }
47         bool operator==(const TrackOffsetIter &) const;
48         bool operator!=(const TrackOffsetIter &other) const { return !(*this==other); }
49         operator bool() const { return _track; }
50 };
51
52 } // namespace R2C2
53
54 #endif