rotate.hppGo to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef ADOBE_ALGORITHM_ROTATE_HPP
00009 #define ADOBE_ALGORITHM_ROTATE_HPP
00010
00011 #include <adobe/config.hpp>
00012
00013 #include <adobe/algorithm/reverse.hpp>
00014
00015 #include <algorithm>
00016 #include <iterator>
00017 #include <utility>
00018
00019
00020
00021 namespace adobe {
00022
00023
00032
00038 template <typename I>
00039 std::pair<I, I> rotate(I f, I m, I l, std::bidirectional_iterator_tag)
00040 {
00041 using std::reverse;
00042
00043 reverse(f, m);
00044
00045 reverse(m, l);
00046
00047 std::pair<I, I> p = reverse_until(f, m, l);
00048
00049 reverse(p.first, p.second);
00050
00051 return p;
00052 }
00053
00064 template <typename I>
00065 std::pair<I, I> rotate(I f, I m, I l)
00066 {
00067 typedef typename std::iterator_traits<I>::iterator_category iterator_category;
00068
00069 return rotate(f, m, l, iterator_category());
00070 }
00071
00072
00073
00074 }
00075
00076
00077
00078 #endif
00079
00080
|