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)17 auto begin(reversion_wrapper<T> w)
18 {
19     return std::rbegin(w.iterable);
20 }
21 
22 template<typename T>
end(reversion_wrapper<T> w)23 auto end(reversion_wrapper<T> w)
24 {
25     return std::rend(w.iterable);
26 }
27 
28 template<typename T>
reverse(T && iterable)29 reversion_wrapper<T> reverse(T&& iterable)
30 {
31     return {iterable};
32 }
33 }
34 
35 #endif /* end of include guard: WF_REVERSE_HPP */
36