UgMisc
0.2-110
Miscellaneous C++ header library
Loading...
Searching...
No Matches
xchg.hpp
Go to the documentation of this file.
1
/*
2
* SPDX-Licence-Identifier: MIT
3
*
4
* Copyright 2025 Larry Chips
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a copy
7
* of this software and associated documentation files (the “Software”), to deal
8
* in the Software without restriction, including without limitation the rights
9
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
* copies of the Software, and to permit persons to whom the Software is
11
* furnished to do so, subject to the following conditions:
12
*
13
* The above copyright notice and this permission notice shall be included in
14
* all copies or substantial portions of the Software.
15
*
16
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
* SOFTWARE.
23
*/
24
#ifndef UGMISC_XCHG_HPP
25
#define UGMISC_XCHG_HPP
26
27
#include "
ugmisc/features.hpp
"
28
29
#ifdef UGMISC_HAVE_CONSTEXPR_EXCHANGE
30
#include <algorithm>
31
#endif
32
#include <utility>
33
34
44
45
46
47
48
namespace
ugmisc {
49
50
51
52
60
template
<
class
T,
class
U=T>
61
constexpr
T
xchg
(T&
object
, U&& new_value) {
62
if
constexpr
(
Features::constexpr_swap_algorithms
) {
63
return
std::exchange(
object
, std::forward<U>(new_value));
64
}
else
{
65
T ret{std::move(
object
)};
66
object
= std::move(new_value);
67
return
ret;
68
}
69
}
70
71
72
73
74
}
/* ::ugmisc */
75
76
#endif
/* UGMISC_XCHG_HPP */
features.hpp
Feature detection.
ugmisc::Features::constexpr_swap_algorithms
static constexpr bool constexpr_swap_algorithms
Definition
features.hpp:466
ugmisc::xchg
constexpr T xchg(T &object, U &&new_value)
Definition
xchg.hpp:61
ugmisc
xchg.hpp
Generated by
1.16.1