DoorKeeper/include/components/tileiterator.hpp
King_DuckZ 9086de8dae Advancing with the implementation.
The iterator is not included anywhere yet so it's completely untested.
Next step is to define the relationship between views and layers, so iterators can be put
into the class that will be responsible to spawn them.
2014-12-11 23:58:52 +01:00

43 lines
1.3 KiB
C++

#ifndef id873715F57B504CCF8227CE03EA28CAFA
#define id873715F57B504CCF8227CE03EA28CAFA
#include "primitivetypes.hpp"
#include <boost/iterator/iterator_facade.hpp>
#include <iterator>
#include <vector>
namespace dk {
template <typename T, size_t D>
class TileIterator : public boost::iterator_facade<TileIterator<T, D>, T, boost::biderectional_traversal_tag> {
friend class boost::iterator_core_access;
public:
typedef Vector<CoordinateScalarType, D> coords;
TileIterator ( void );
TileIterator ( const TileIterator& parOther ) = default;
TileIterator ( const coords& parFrom, const coords& parTo );
TileIterator ( const coords& parFrom, const coords& parTo, const coords& parAreaFrom, const coords& parAreaTo, const coords& parTotal );
~TileIterator ( void ) = default;
private:
void increment ( void );
void decrement ( void );
void advance ( size_t parAdvance );
ptrdiff_t distance_to ( const MeshSelectionIterator& parOther );
bool equal ( const MeshSelectionIterator& parOther ) const;
T& dereference ( void ) const { return m_data[get_current_index()]; }
size_t get_current_index ( void ) const;
coords m_pos;
coords m_from;
coords m_to;
coords m_areafrom;
coords m_areato;
coords m_total;
std::vector<T>* m_data;
};
} //namespace dk
#include "implem/tileiterator.inl"
#endif