50 lines
941 B
C++
50 lines
941 B
C++
/***
|
|
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
File: auCopyMoveUtils.hpp
|
|
Date: 2022-2-1
|
|
Author: Reece
|
|
***/
|
|
#pragma once
|
|
|
|
template<class T>
|
|
constexpr AuRemoveReference_t<T> &&AuMove(T &&arg)
|
|
{
|
|
return static_cast<AuRemoveReference_t<T> &&>(arg);
|
|
}
|
|
|
|
template<class T>
|
|
constexpr T &&AuForward(AuRemoveReference_t<T> &arg)
|
|
{
|
|
return static_cast<T &&>(arg);
|
|
}
|
|
|
|
template<class T>
|
|
constexpr T &&AuForward(AuRemoveReference_t<T> &&arg)
|
|
{
|
|
return static_cast<T &&>(arg);
|
|
}
|
|
|
|
template<class T>
|
|
constexpr T &AuReference(T &arg)
|
|
{
|
|
return static_cast<T &>(arg);
|
|
}
|
|
|
|
template<class T, class U = T>
|
|
inline T AuExchange(T &obj, U &&newValue)
|
|
{
|
|
T oldValue = AuMove(obj);
|
|
obj = AuForward<U>(newValue);
|
|
return oldValue;
|
|
}
|
|
|
|
#if !defined(AURORA_RUNTIME_SWAP)
|
|
#define AURORA_RUNTIME_SWAP std::swap
|
|
#endif
|
|
|
|
template<class T>
|
|
inline void AuSwap(T &a, T &b)
|
|
{
|
|
AURORA_RUNTIME_SWAP(a, b);
|
|
} |