/// \file // Range v3 library // // Copyright Eric Niebler 2013-present // // Use, modification and distribution is subject to the // Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Project home: https://github.com/ericniebler/range-v3 // #ifndef RANGES_V3_ALGORITHM_SWAP_RANGES_HPP #define RANGES_V3_ALGORITHM_SWAP_RANGES_HPP #include #include #include #include #include #include #include #include #include namespace ranges { /// \addtogroup group-algorithms /// @{ template using swap_ranges_result = detail::in1_in2_result; RANGES_BEGIN_NIEBLOID(swap_ranges) /// \brief function template \c swap_ranges template auto RANGES_FUN_NIEBLOID(swap_ranges)(I1 begin1, S1 end1, I2 begin2) // ->CPP_ret(swap_ranges_result)( // requires input_iterator && sentinel_for && input_iterator && indirectly_swappable) { for(; begin1 != end1; ++begin1, ++begin2) ranges::iter_swap(begin1, begin2); return {begin1, begin2}; } /// \overload template auto RANGES_FUN_NIEBLOID(swap_ranges)(I1 begin1, S1 end1, I2 begin2, S2 end2) // ->CPP_ret(swap_ranges_result)( // requires input_iterator && sentinel_for && input_iterator && sentinel_for && indirectly_swappable) { for(; begin1 != end1 && begin2 != end2; ++begin1, ++begin2) ranges::iter_swap(begin1, begin2); return {begin1, begin2}; } template auto RANGES_FUN_NIEBLOID(swap_ranges)(Rng1 && rng1, I2_ && begin2) // ->CPP_ret(swap_ranges_result, uncvref_t>)( // requires input_range && input_iterator> && indirectly_swappable, uncvref_t>) { return (*this)(begin(rng1), end(rng1), (I2_ &&) begin2); } template auto RANGES_FUN_NIEBLOID(swap_ranges)(Rng1 && rng1, Rng2 && rng2) // ->CPP_ret( swap_ranges_result, safe_iterator_t>)( // requires input_range && input_range && indirectly_swappable, iterator_t>) { return (*this)(begin(rng1), end(rng1), begin(rng2), end(rng2)); } RANGES_END_NIEBLOID(swap_ranges) namespace cpp20 { using ranges::swap_ranges; using ranges::swap_ranges_result; } // namespace cpp20 /// @} } // namespace ranges #endif // include guard