Changeset View
Changeset View
Standalone View
Standalone View
src/reverse_iterator.h
Show All 9 Lines | |||||
* for (auto x : reverse_iterate(v)) | * for (auto x : reverse_iterate(v)) | ||||
* std::cout << x << " "; | * std::cout << x << " "; | ||||
*/ | */ | ||||
template <typename T> class reverse_range { | template <typename T> class reverse_range { | ||||
T &x; | T &x; | ||||
public: | public: | ||||
reverse_range(T &xin) : x(xin) {} | explicit reverse_range(T &xin) : x(xin) {} | ||||
auto begin() const -> decltype(this->x.rbegin()) { return x.rbegin(); } | auto begin() const -> decltype(this->x.rbegin()) { return x.rbegin(); } | ||||
auto end() const -> decltype(this->x.rend()) { return x.rend(); } | auto end() const -> decltype(this->x.rend()) { return x.rend(); } | ||||
}; | }; | ||||
template <typename T> reverse_range<T> reverse_iterate(T &x) { | template <typename T> reverse_range<T> reverse_iterate(T &x) { | ||||
return reverse_range<T>(x); | return reverse_range<T>(x); | ||||
} | } | ||||
#endif // BITCOIN_REVERSE_ITERATOR_HPP | #endif // BITCOIN_REVERSE_ITERATOR_HPP |