From 12c062b9396eeff92181747256c1a50746982cd5 Mon Sep 17 00:00:00 2001 From: King_DuckZ Date: Wed, 13 Jul 2016 12:17:54 +0100 Subject: [PATCH] Prevent values being stolen accidentally and provide proper overloads. --- include/helpers/MaxSizedArray.hpp | 15 +++++++++------ include/helpers/MaxSizedArray.inl | 12 ++++++++++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/helpers/MaxSizedArray.hpp b/include/helpers/MaxSizedArray.hpp index d147176..560b6ce 100644 --- a/include/helpers/MaxSizedArray.hpp +++ b/include/helpers/MaxSizedArray.hpp @@ -78,8 +78,9 @@ namespace dinhelp { iterator erase ( const iterator& parDele ); iterator erase ( const iterator& parFrom, const iterator& parToExcl ); void clear ( void ); - mov_reference operator[] ( size_type parIndex ); - const_reference operator[] ( size_type parIndex ) const; + reference operator[] ( size_type parIndex ) &; + mov_reference operator[] ( size_type parIndex ) &&; + const_reference operator[] ( size_type parIndex ) const &; MaxSizedArray& operator= ( const MaxSizedArray& parOther ); bool operator== ( const MaxSizedArray& parOther ) const; bool operator!= ( const MaxSizedArray& parOther ) const; @@ -95,10 +96,12 @@ namespace dinhelp { const_reverse_iterator rbegin ( void ) const; reverse_iterator rend ( void ); const_reverse_iterator rend ( void ) const; - reference front ( void ) { return (*this)[0]; } - reference back ( void ) { return (*this)[size() - 1]; } - const_reference front ( void ) const { return (*this)[0]; } - const_reference back ( void ) const { return (*this)[size() - 1]; } + reference front ( void ) & { return (*this)[0]; } + reference back ( void ) & { return (*this)[size() - 1]; } + mov_reference front ( void ) && { return (*this)[0]; } + mov_reference back ( void ) && { return (*this)[size() - 1]; } + const_reference front ( void ) const & { return (*this)[0]; } + const_reference back ( void ) const & { return (*this)[size() - 1]; } private: pointer GetPointer_NoAssert ( void ) { return m_localMem; } diff --git a/include/helpers/MaxSizedArray.inl b/include/helpers/MaxSizedArray.inl index f46661d..17201c1 100644 --- a/include/helpers/MaxSizedArray.inl +++ b/include/helpers/MaxSizedArray.inl @@ -104,7 +104,15 @@ namespace dinhelp { ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template - typename MaxSizedArray::mov_reference MaxSizedArray::operator[] (size_type parIndex) { + typename MaxSizedArray::reference MaxSizedArray::operator[] (size_type parIndex) & { + assert(parIndex < size()); + return m_localMem[parIndex]; + } + + ///------------------------------------------------------------------------- + ///------------------------------------------------------------------------- + template + typename MaxSizedArray::mov_reference MaxSizedArray::operator[] (size_type parIndex) && { assert(parIndex < size()); return std::move(m_localMem[parIndex]); } @@ -112,7 +120,7 @@ namespace dinhelp { ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template - typename MaxSizedArray::const_reference MaxSizedArray::operator[] (size_type parIndex) const { + typename MaxSizedArray::const_reference MaxSizedArray::operator[] (size_type parIndex) const & { assert(parIndex < size()); return m_localMem[parIndex]; }