diff --git a/src/lol/base/array.h b/src/lol/base/array.h index 8c325a9d..25f3bd87 100644 --- a/src/lol/base/array.h +++ b/src/lol/base/array.h @@ -1,7 +1,7 @@ // // Lol Engine // -// Copyright: (c) 2010-2014 Sam Hocevar +// Copyright: (c) 2010-2015 Sam Hocevar // (c) 2013-2014 Benjamin "Touky" Huet // This program is free software; you can redistribute it and/or // modify it under the terms of the Do What The Fuck You Want To @@ -133,15 +133,17 @@ public: { /* Allow array[0] even if size is zero so that people can * always use &array[0] to get a pointer to the data. */ - ASSERT(n >= 0); - ASSERT(n < m_count || (!n && !m_count)); + ASSERT(n >= 0 && (n < m_count || (!n && !m_count)), + "cannot access index %lld in array of size %lld", + (long long int)n, (long long int)m_count); return m_data[n]; } inline element_t const& operator[](ptrdiff_t n) const { - ASSERT(n >= 0); - ASSERT(n < m_count || (!n && !m_count)); + ASSERT(n >= 0 && (n < m_count || (!n && !m_count)), + "cannot access index %lld in array of size %lld", + (long long int)n, (long long int)m_count); return m_data[n]; } @@ -205,8 +207,9 @@ public: inline void Insert(T const &x, ptrdiff_t pos) { - ASSERT(pos >= 0); - ASSERT(pos <= m_count); + ASSERT(pos >= 0 && pos <= m_count, + "cannot insert at index %lld in array of size %lld", + (long long int)pos, (long long int)m_count); if (m_count >= m_reserved) Grow(); @@ -222,8 +225,9 @@ public: inline bool InsertUnique(T const &x, ptrdiff_t pos) { - ASSERT(pos >= 0); - ASSERT(pos <= m_count); + ASSERT(pos >= 0 && pos <= m_count, + "cannot insert at index %lld in array of size %lld", + (long long int)pos, (long long int)m_count); if (Find(x) != INDEX_NONE) return false; @@ -284,10 +288,12 @@ public: void Swap(ptrdiff_t pos1, ptrdiff_t pos2) { - ASSERT(pos1 >= 0); - ASSERT(pos2 >= 0); - ASSERT(pos1 < m_count); - ASSERT(pos2 < m_count); + ASSERT(pos1 >= 0 && pos1 <= m_count, + "cannot swap index %lld in array of size %lld", + (long long int)pos1, (long long int)m_count); + ASSERT(pos2 >= 0 && pos2 <= m_count, + "cannot swap index %lld in array of size %lld", + (long long int)pos2, (long long int)m_count); if (pos1 != pos2) std::swap((*this)[pos1], (*this)[pos2]); @@ -296,8 +302,11 @@ public: void Remove(ptrdiff_t pos, ptrdiff_t todelete = 1) { ASSERT(todelete >= 0); - ASSERT(pos - todelete >= -m_count - 1); - ASSERT(pos + todelete <= m_count); + ASSERT(pos - todelete >= -m_count - 1 && pos + todelete <= m_count, + "cannot remove %lld elements at %lld in array of size %lld", + (long long int)todelete, (long long int)pos, + (long long int)m_count); + if (pos < 0) pos = m_count + pos; @@ -311,8 +320,11 @@ public: void RemoveSwap(ptrdiff_t pos, ptrdiff_t todelete = 1) { ASSERT(todelete >= 0); - ASSERT(pos - todelete >= -m_count - 1); - ASSERT(pos + todelete <= m_count); + ASSERT(pos - todelete >= -m_count - 1 && pos + todelete <= m_count, + "cannot remove %lld elements at %lld in array of size %lld", + (long long int)todelete, (long long int)pos, + (long long int)m_count); + if (pos < 0) pos = m_count + pos; @@ -485,8 +497,9 @@ public: inline void Insert(ptrdiff_t pos, T... args) { - ASSERT(pos >= 0); - ASSERT(pos <= this->m_count); + ASSERT(pos >= 0 && pos <= this->m_count, + "cannot insert at index %lld in array of size %lld", + (long long int)pos, (long long int)this->m_count); if (this->m_count >= this->m_reserved) this->Grow();