From edbb3fe1d83ad5339962fa78f80d2ce36d2a56e9 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Sun, 24 May 2015 17:18:46 +0200 Subject: [PATCH] Crash fix when going from a smaller view to a larger one. --- include/doorkeeper/components/layer.hpp | 3 +++ include/doorkeeper/components/tileiterator.hpp | 2 +- include/doorkeeper/implem/tileiterator.inl | 8 ++++++++ include/doorkeeper/implem/vector.inl | 16 ++++++++-------- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/include/doorkeeper/components/layer.hpp b/include/doorkeeper/components/layer.hpp index d14606e..9355769 100644 --- a/include/doorkeeper/components/layer.hpp +++ b/include/doorkeeper/components/layer.hpp @@ -9,6 +9,9 @@ #include #include #include +#if !defined(NDEBUG) +#include +#endif namespace dk { template diff --git a/include/doorkeeper/components/tileiterator.hpp b/include/doorkeeper/components/tileiterator.hpp index f1179ba..743b67e 100644 --- a/include/doorkeeper/components/tileiterator.hpp +++ b/include/doorkeeper/components/tileiterator.hpp @@ -68,7 +68,7 @@ namespace dk { void advance ( size_t parAdvance ); ptrdiff_t distance_to ( const TileIterator& parOther ); bool equal ( const TileIterator& parOther ) const; - T& dereference ( void ) const { return (*m_data)[get_current_index()]; } + T& dereference ( void ) const; size_t get_current_index ( void ) const { return implem::get_index_from_pos(m_pos, m_subdivareasize) + m_subindex; } coords m_pos; diff --git a/include/doorkeeper/implem/tileiterator.inl b/include/doorkeeper/implem/tileiterator.inl index 26a2ace..6ac3d35 100644 --- a/include/doorkeeper/implem/tileiterator.inl +++ b/include/doorkeeper/implem/tileiterator.inl @@ -139,4 +139,12 @@ namespace dk { bool TileIterator::equal (const TileIterator& parOther) const { return m_data == parOther.m_data and m_pos == parOther.m_pos; } + + template + T& TileIterator::dereference() const { + const auto index = this->get_current_index(); + assert(m_data); + assert(index < m_data->size()); + return (*m_data)[index]; + } } //namespace dk diff --git a/include/doorkeeper/implem/vector.inl b/include/doorkeeper/implem/vector.inl index e79741d..1bc1179 100644 --- a/include/doorkeeper/implem/vector.inl +++ b/include/doorkeeper/implem/vector.inl @@ -199,33 +199,33 @@ namespace cloonel { ///-------------------------------------------------------------------------- template inline bool operator< (const Vector& parA, const Vector& parB) { - bool retVal = true; + bool retVal = false; for (uint32_t z = 0; z < S; ++z) { - retVal &= static_cast(parA[z] < parB[z]); + retVal |= static_cast(parA[z] < parB[z]); } return retVal; } template inline bool operator> (const Vector& parA, const Vector& parB) { - bool retVal = true; + bool retVal = false; for (uint32_t z = 0; z < S; ++z) { - retVal &= static_cast(parA[z] > parB[z]); + retVal |= static_cast(parA[z] > parB[z]); } return retVal; } template inline bool operator<= (const Vector& parA, const Vector& parB) { - bool retVal = true; + bool retVal = false; for (uint32_t z = 0; z < S; ++z) { - retVal &= static_cast(parA[z] <= parB[z]); + retVal |= static_cast(parA[z] <= parB[z]); } return retVal; } template inline bool operator>= (const Vector& parA, const Vector& parB) { - bool retVal = true; + bool retVal = false; for (uint32_t z = 0; z < S; ++z) { - retVal &= static_cast(parA[z] >= parB[z]); + retVal |= static_cast(parA[z] >= parB[z]); } return retVal; }