|
|
- #pragma once
- #include "gp/algorithm/move.hpp"
-
- namespace gp {
- template<typename iterator>
- iterator rotate(iterator first, iterator new_first, iterator last)
- {
-
- if(first == new_first) return last;
- if(new_first == last) return first;
-
- iterator in = new_first;
- iterator out = first;
- iterator mv = first;
-
- while(in != last) {
- if(out == mv) mv = in;
- gp::swap((*out++), (*in++));
- }
-
- // rotate the remaining sequence into place
- (rotate)(out, mv, last);
- return out;
- }
-
- }
|