Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
iterator.hpp 935 B
/*
 * iterator.hpp
 *
 * Created on: Apr 1, 2013
 * Author: Jan Travnicek
 */

#ifndef __ITERATOR_HPP_
#define __ITERATOR_HPP_

namespace std {

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 std */

#endif /* __ITERATOR_HPP_ */