/* SPDX-FileCopyrightText: 2015 Ivan Cukic SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef UTILS_SLIDE_H #define UTILS_SLIDE_H #include // Inspired by C++ Seasoning talk by Sean Parent namespace kamd { namespace utils { template void slide(Iterator f, Iterator l, Iterator p) { if (p < f) { std::rotate(p, f, l); } else if (l < p) { std::rotate(f, l, p); } } template void slide_one(Iterator f, Iterator p) { slide(f, f + 1, p); } template void move_one(Iterator from, Iterator to) { if (from < to) { while (from != to) { using std::swap; swap(*from, *(from + 1)); ++from; } } else { while (from != to) { using std::swap; swap(*from, *(from - 1)); --from; } } } } // namespace utils } // namespace kamd #endif // UTILS_SLIDE_H