Index: src/common/GenericTemplates/RandomAccessContainerWrapper.h =================================================================== diff -u -N -rfadd6c9c628de875716d96c3a497b5bc6c8dca8a -r85b07e753393f661f7d8f528e4238ebb6e9e1204 --- src/common/GenericTemplates/RandomAccessContainerWrapper.h (.../RandomAccessContainerWrapper.h) (revision fadd6c9c628de875716d96c3a497b5bc6c8dca8a) +++ src/common/GenericTemplates/RandomAccessContainerWrapper.h (.../RandomAccessContainerWrapper.h) (revision 85b07e753393f661f7d8f528e4238ebb6e9e1204) @@ -20,6 +20,7 @@ #define __RANDOMACCESSCONTAINERWRAPPER_H__ #include "RandomAccessIterators.h" +#include template class RandomAccessContainerWrapper @@ -31,16 +32,46 @@ public: virtual ~RandomAccessContainerWrapper(); - bool operator==(const RandomAccessContainerWrapper& rSrc) const; - bool operator!=(const RandomAccessContainerWrapper& rSrc) const; + template + typename std::enable_if::value, bool>::type operator==(const RandomAccessContainerWrapper& rSrc) const + { + if(rSrc.GetCount() != GetCount()) + return false; + size_t stCount = GetCount(); + while(stCount-- > 0) + { + if(m_vItems[ stCount ] != rSrc.m_vItems[ stCount ]) + return false; + } + + return true; + } + + template + typename std::enable_if::value, bool>::type operator!=(const RandomAccessContainerWrapper& rSrc) const + { + if(rSrc.GetCount() != GetCount()) + return true; + + size_t stCount = GetCount(); + while(stCount-- > 0) + { + if(m_vItems[ stCount ] != rSrc.m_vItems[ stCount ]) + return true; + } + + return false; + } + void Add(const T& str); void InsertAt(size_t stIndex, const T& str); void SetAt(size_t stIndex, const T& str); void RemoveAt(size_t stIndex); void Clear(); const T& GetAt(size_t stIndex) const; + T& GetAt(size_t stIndex); bool IsEmpty() const; size_t GetCount() const; @@ -115,6 +146,15 @@ } template +T& RandomAccessContainerWrapper::GetAt(size_t stIndex) +{ + if (stIndex >= m_vItems.size()) + throw std::out_of_range("stIndex out of bounds"); + + return m_vItems.at(stIndex); +} + +template bool RandomAccessContainerWrapper::IsEmpty() const { return m_vItems.empty(); @@ -168,36 +208,4 @@ return const_iterator(m_vItems.cend()); } -template -bool RandomAccessContainerWrapper::operator==(const RandomAccessContainerWrapper& rSrc) const -{ - if (rSrc.GetCount() != GetCount()) - return false; - - size_t stCount = GetCount(); - while (stCount-- > 0) - { - if (m_vItems[stCount] != rSrc.m_vItems[stCount]) - return false; - } - - return true; -} - -template -bool RandomAccessContainerWrapper::operator!=(const RandomAccessContainerWrapper& rSrc) const -{ - if (rSrc.GetCount() != GetCount()) - return true; - - size_t stCount = GetCount(); - while (stCount-- > 0) - { - if (m_vItems[stCount] != rSrc.m_vItems[stCount]) - return true; - } - - return false; -} - #endif