]> git.tdb.fi Git - r2c2.git/blob - source/libmarklin/trackiter.h
Add TrackIter and BlockIter classes
[r2c2.git] / source / libmarklin / trackiter.h
1 /* $Id$
2
3 This file is part of the MSP Märklin suite
4 Copyright © 2010  Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
6 */
7
8 #ifndef LIBMARKLIN_TRACKITER_H_
9 #define LIBMARKLIN_TRACKITER_H_
10
11 #include <set>
12 #include <msp/core/refptr.h>
13
14 namespace Marklin {
15
16 class Track;
17
18 /**
19 An iterator for traversing tracks.
20 */
21 class TrackIter
22 {
23 private:
24         Track *_track;
25         unsigned _entry;
26
27 public:
28         TrackIter();
29         TrackIter(Track *, unsigned);
30
31         Track *track() const { return _track; }
32         unsigned entry() const { return _entry; }
33
34 private:
35         int get_exit(unsigned) const;
36 public:
37         TrackIter next() const;
38         TrackIter next(unsigned) const;
39         TrackIter reverse() const;
40         TrackIter reverse(unsigned) const;
41         TrackIter flip() const;
42
43         Track &operator*() const;
44         Track *operator->() const { return _track; }
45         bool operator==(const TrackIter &) const;
46         operator bool() const { return _track!=0; }
47 };
48
49 } // namespace Marklin
50
51 #endif