Skip to content
Snippets Groups Projects
iterator.hpp 955 B
Newer Older
  • Learn to ignore specific revisions
  • /*
     * iterator.hpp
     *
     * Created on: Apr 1, 2013
     * Author: Jan Travnicek
     */
    
    #ifndef __ITERATOR_HPP_
    #define __ITERATOR_HPP_
    
    
    #include <iterator>
    
    
    
    template<class T>
    class reverser {
    	T& m_Container;
    
    public:
    	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 {
    		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 {
    		return m_Container.rend();
    	}
    };
    
    template<class T>
    reverser<T> make_reverse(T& container) {
    	return reverser<T>(container);
    }
    
    
    template < typename T >
    struct is_iterator : std::false_type {};
    
    template < typename T >
    struct is_iterator<typename std::iterator_traits<T>> : std::true_type {};
    
    
    } /* namespace ext */
    
    
    #endif /* __ITERATOR_HPP_ */