/// \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 #include namespace ranges { /// \addtogroup group-algorithms /// @{ template using swap_ranges_result = detail::in1_in2_result; RANGES_FUNC_BEGIN(swap_ranges) /// \brief function template \c swap_ranges template(typename I1, typename S1, typename I2)( requires input_iterator AND sentinel_for AND input_iterator AND indirectly_swappable) constexpr swap_ranges_result // RANGES_FUNC(swap_ranges)(I1 begin1, S1 end1, I2 begin2) // { for(; begin1 != end1; ++begin1, ++begin2) ranges::iter_swap(begin1, begin2); return {begin1, begin2}; } /// \overload template(typename I1, typename S1, typename I2, typename S2)( requires input_iterator AND sentinel_for AND input_iterator AND sentinel_for AND indirectly_swappable) constexpr swap_ranges_result RANGES_FUNC(swap_ranges)(I1 begin1, S1 end1, I2 begin2, S2 end2) // { for(; begin1 != end1 && begin2 != end2; ++begin1, ++begin2) ranges::iter_swap(begin1, begin2); return {begin1, begin2}; } template(typename Rng1, typename I2_)( requires input_range AND input_iterator> AND indirectly_swappable, uncvref_t>) constexpr swap_ranges_result, uncvref_t> // RANGES_FUNC(swap_ranges)(Rng1 && rng1, I2_ && begin2) // { return (*this)(begin(rng1), end(rng1), (I2_ &&) begin2); } template(typename Rng1, typename Rng2)( requires input_range AND input_range AND indirectly_swappable, iterator_t>) constexpr swap_ranges_result, borrowed_iterator_t> // RANGES_FUNC(swap_ranges)(Rng1 && rng1, Rng2 && rng2) // { return (*this)(begin(rng1), end(rng1), begin(rng2), end(rng2)); } RANGES_FUNC_END(swap_ranges) namespace cpp20 { using ranges::swap_ranges; using ranges::swap_ranges_result; } // namespace cpp20 /// @} } // namespace ranges #include #endif