From 03efd57e002a046fdc8093bf94c8bb83d705385b Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 24 Apr 2018 10:38:10 +0200 Subject: [PATCH] redesign reverse container adaptor --- alib2std/src/extensions/iterator.hpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/alib2std/src/extensions/iterator.hpp b/alib2std/src/extensions/iterator.hpp index 1b2f482d7f..1373c176b8 100644 --- a/alib2std/src/extensions/iterator.hpp +++ b/alib2std/src/extensions/iterator.hpp @@ -14,17 +14,34 @@ namespace ext { template<class T> class reverser { - T& m_Container; + T & m_Container; public: - reverser(T& container) : m_Container ( container ) { + reverser ( T & container ) : m_Container ( container ) { } - std::reverse_iterator<typename std::conditional<std::is_const<T>::value,typename T::const_iterator,typename T::iterator>::type> begin() const { + typename T::reverse_iterator begin ( ) const { return m_Container.rbegin(); } - std::reverse_iterator<typename std::conditional<std::is_const<T>::value,typename T::const_iterator,typename T::iterator>::type> end() const { + typename T::reverse_iterator end ( ) const { + return m_Container.rend(); + } +}; + +template < class T > +class reverser < const T > { + const T & m_Container; + +public: + reverser ( const T & container ) : m_Container ( container ) { + } + + typename T::const_reverse_iterator begin ( ) const { + return m_Container.rbegin(); + } + + typename T::const_reverse_iterator end ( ) const { return m_Container.rend(); } }; -- GitLab