From bac6446111e3c4f3c857587b4a36e44004b03efd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorsten=20J=C3=B8rgen=20Ottosen?= Date: Tue, 27 Jul 2004 19:58:09 +0000 Subject: [PATCH] added debug bounds checking; added new empty() definition [SVN r24127] --- include/boost/array.hpp | 43 ++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/include/boost/array.hpp b/include/boost/array.hpp index bdae6ba..b3a4d76 100644 --- a/include/boost/array.hpp +++ b/include/boost/array.hpp @@ -27,6 +27,7 @@ #include #include +#include // Handles broken standard libraries better than #include @@ -85,22 +86,50 @@ namespace boost { } // operator[] - reference operator[](size_type i) { return elems[i]; } - const_reference operator[](size_type i) const { return elems[i]; } + reference operator[](size_type i) + { + BOOST_ASSERT( i < N && "out of range" ); + return elems[i]; + } + + const_reference operator[](size_type i) const + { + BOOST_ASSERT( i < N && "out of range" ); + return elems[i]; + } // at() with range check reference at(size_type i) { rangecheck(i); return elems[i]; } const_reference at(size_type i) const { rangecheck(i); return elems[i]; } // front() and back() - reference front() { return elems[0]; } - const_reference front() const { return elems[0]; } - reference back() { return elems[N-1]; } - const_reference back() const { return elems[N-1]; } + reference front() + { + BOOST_ASSERT( N > 0 && "logic error" ); + return elems[0]; + } + + const_reference front() const + { + BOOST_ASSERT( N > 0 && "logic error" ); + return elems[0]; + } + + reference back() + { + BOOST_ASSERT( N > 0 && "logic error" ); + return elems[N-1]; + } + + const_reference back() const + { + BOOST_ASSERT( N > 0 && "logic error" ); + return elems[N-1]; + } // size is constant static size_type size() { return N; } - static bool empty() { return false; } + static bool empty() { return N == 0; } static size_type max_size() { return N; } enum { static_size = N };