namespace dk { template TileIterator::TileIterator (qualif_vector_type* parData, const coords& parArea) : m_tile_range(parArea), m_data(parData) { DK_ASSERT(parData); } template TileIterator::TileIterator (qualif_vector_type* parData, const coords& parStart, const coords& parArea) : m_tile_range(parStart, parArea), m_data(parData) { DK_ASSERT(parData); } template void TileIterator::increment() { ++m_tile_range; } template void TileIterator::decrement() { --m_tile_range; } template void TileIterator::advance (size_t /*parAdvance*/) { //TODO: implement } template ptrdiff_t TileIterator::distance_to (const TileIterator& parOther) { return std::distance(to_index(m_tile_range), to_index(parOther.m_tile_range)); } template bool TileIterator::equal (const TileIterator& parOther) const { return m_data == parOther.m_data and m_tile_range == parOther.m_tile_range and m_tile_range == parOther.m_tile_range; } template T& TileIterator::dereference() const { const auto index = to_index(m_tile_range); DK_ASSERT(m_data); DK_ASSERT(index < m_data->size()); return (*m_data)[index]; } template auto TileIterator::raw_coords() const -> const TileCoordsType& { return m_tile_range; } template auto TileIterator::position() const -> const coords& { return m_tile_range.position(); } } //namespace dk