Add unit test for AsciiMapSource and fix issues.

This commit is contained in:
King_DuckZ 2015-08-17 00:41:21 +02:00
commit 42da727a67
8 changed files with 66 additions and 11 deletions

View file

@ -27,7 +27,7 @@ namespace dk {
template <uint32_t D>
template <typename T>
void BaseMapSource<D>::fetch (std::vector<T>& parOut, const coords& parFrom, const coords& parTo) {
const auto tile_count = tile_volume<D>(parTo - parFrom + 1);
const auto tile_count = tile_volume<D>(parTo - parFrom);
const std::size_t casted_tile_count = static_cast<std::size_t>(tile_count);
DK_ASSERT(static_cast<decltype(tile_count)>(casted_tile_count) == tile_count);

View file

@ -44,7 +44,7 @@ namespace dk {
///--------------------------------------------------------------------------
template <typename T, uint32_t D>
typename Layer<T, D>::iterator Layer<T, D>::end() {
return iterator(&m_tiles, this->m_count, this->m_count);
return iterator(&m_tiles, make_past_end_coords<D>(this->m_count - 1), make_past_end_coords<D>(this->m_count - 1));
}
///--------------------------------------------------------------------------

View file

@ -37,7 +37,7 @@ namespace dk {
template <typename T, uint32_t D, typename T1>
bool TileIterator<T, D, T1>::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;
return m_data == parOther.m_data and m_tile_range.position() == parOther.m_tile_range.position();
}
template <typename T, uint32_t D, typename T1>
@ -57,4 +57,14 @@ namespace dk {
auto TileIterator<T, D, T1>::position() const -> const coords& {
return m_tile_range.position();
}
template <uint32_t D>
inline Vector<D> make_past_end_coords (const Vector<D>& parTo) {
Vector<D> retval(0);
//for (CoordinateDistType d = 0; d < D - 1; ++d) {
//retval[d] = parFrom[d];
//}
retval[D - 1] = parTo[D - 1] + 1;
return retval;
}
} //namespace dk

View file

@ -20,15 +20,14 @@ namespace dk {
template <typename T>
typename Layer<T, D>::iterator Viewport<D>::begin (Layer<T, D>& parLayer) const {
typedef typename Layer<T, D>::iterator IterType;
return IterType(&parLayer.m_tiles, m_position, m_position + m_size, coords(0), m_tyler.map_size());
return IterType(&parLayer.m_tiles, m_position, m_tyler.map_size() - 1);
}
template <uint32_t D>
template <typename T>
typename Layer<T, D>::iterator Viewport<D>::end (Layer<T, D>& parLayer) const {
typedef typename Layer<T, D>::iterator IterType;
const auto to(m_position + m_size);
return IterType(&parLayer.m_tiles, m_tyler.map_size(), m_tyler.map_size());
return IterType(&parLayer.m_tiles, make_past_end_coords<D>(m_tyler.map_size() - 1), make_past_end_coords<D>(m_tyler.map_size() - 1));
}
template <uint32_t D>
@ -47,15 +46,14 @@ namespace dk {
template <typename T>
typename Layer<T, D>::const_iterator Viewport<D>::cbegin (const Layer<T, D>& parLayer) const {
typedef typename Layer<T, D>::const_iterator IterType;
return IterType(&parLayer.m_tiles, m_position, m_position + m_size, m_tyler.map_size());
return IterType(&parLayer.m_tiles, m_position, m_tyler.map_size() - 1);
}
template <uint32_t D>
template <typename T>
typename Layer<T, D>::const_iterator Viewport<D>::cend (const Layer<T, D>& parLayer) const {
typedef typename Layer<T, D>::const_iterator IterType;
const auto to(m_position + m_size);
return IterType(&parLayer.m_tiles, m_tyler.map_size(), m_tyler.map_size());
return IterType(&parLayer.m_tiles, make_past_end_coords<D>(m_tyler.map_size() - 1), make_past_end_coords<D>(m_tyler.map_size() - 1));
}
template <uint32_t D>