--- /dev/null
+/* $Id$
+
+This file is part of the MSP Märklin suite
+Copyright © 2010 Mikkosoft Productions, Mikko Rasa
+Distributed under the GPL
+*/
+
+#ifndef LIBMARKLIN_BLOCKITER_H_
+#define LIBMARKLIN_BLOCKITER_H_
+
+namespace Marklin {
+
+class Block;
+class Route;
+class TrackIter;
+
+/**
+An iterator for traversing blocks.
+*/
+class BlockIter
+{
+private:
+ Block *_block;
+ unsigned _entry;
+
+public:
+ BlockIter();
+ BlockIter(Block *, unsigned);
+
+ Block *block() const { return _block; }
+ unsigned entry() const { return _entry; }
+ TrackIter track_iter() const;
+
+private:
+ int get_exit(const Route *) const;
+public:
+ BlockIter next(const Route * = 0) const;
+ BlockIter reverse(const Route * = 0) const;
+ BlockIter flip() const;
+
+ Block &operator*() const;
+ Block *operator->() const { return _block; }
+ bool operator==(const BlockIter &) const;
+ bool operator!=(const BlockIter &other) const { return !(*this==other); }
+ operator bool() const { return _block!=0; }
+};
+
+} // namespace Marklin
+
+#endif