// Taken from https://gist.github.com/arvidsson/7231973 #ifndef BITCOIN_REVERSE_ITERATOR_H #define BITCOIN_REVERSE_ITERATOR_H /** * Template used for reverse iteration in C++11 range-based for loops. * * std::vector v = {1, 2, 3, 4, 5}; * for (auto x : reverse_iterate(v)) * std::cout << x << " "; */ template class reverse_range { T &m_x; public: explicit reverse_range(T &x) : m_x(x) {} auto begin() const -> decltype(this->m_x.rbegin()) { return m_x.rbegin(); } auto end() const -> decltype(this->m_x.rend()) { return m_x.rend(); } }; template reverse_range reverse_iterate(T &x) { return reverse_range(x); } #endif // BITCOIN_REVERSE_ITERATOR_H