1 #ifndef WF_REVERSE_HPP 2 #define WF_REVERSE_HPP 3 4 #include <iterator> 5 6 /* from https://stackoverflow.com/questions/8542591/c11-reverse-range-based-for-loop 7 * */ 8 namespace wf 9 { 10 template<typename T> 11 struct reversion_wrapper 12 { 13 T& iterable; 14 }; 15 16 template<typename T> begin(reversion_wrapper<T> w)17auto begin(reversion_wrapper<T> w) 18 { 19 return std::rbegin(w.iterable); 20 } 21 22 template<typename T> end(reversion_wrapper<T> w)23auto end(reversion_wrapper<T> w) 24 { 25 return std::rend(w.iterable); 26 } 27 28 template<typename T> reverse(T && iterable)29reversion_wrapper<T> reverse(T&& iterable) 30 { 31 return {iterable}; 32 } 33 } 34 35 #endif /* end of include guard: WF_REVERSE_HPP */ 36