Newer
Older
/*
* iterator.hpp
*
* Created on: Apr 1, 2013
* Author: Jan Travnicek
*/
#ifndef __ITERATOR_HPP_
#define __ITERATOR_HPP_
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 {};