5#include "type_traits.h"
11inline typename removeReference<T>::type &&move(T &&arg)
13 return static_cast<typename removeReference<T>::type &&
>(arg);
23 inline static void constructObject(T *ptr)
29 inline static void constructArray(T *ptr,
unsigned int numElements)
36 inline static void copyConstructObject(T *
dest,
const T *
src)
49 inline static void moveConstructObject(T *
dest, T *
src)
67 inline static void constructObject(T *ptr)
72 inline static void constructArray(T *ptr,
unsigned int numElements)
77 inline static void copyConstructObject(T *
dest,
const T *
src)
89 inline static void moveConstructObject(T *
dest, T *
src)
102 template <
bool value>
106 inline static void destructObject(T *ptr)
112 inline static void destructArray(T *ptr,
unsigned int numElements)
124 inline static void destructObject(T *ptr)
129 inline static void destructArray(T *ptr,
unsigned int numElements)
135 template <
bool value>
139 inline static void copyAssignObject(T *
dest,
const T *
src)
152 inline static void moveAssignObject(T *
dest, T *
src)
170 inline static void copyAssignObject(T *
dest,
const T *
src)
182 inline static void moveAssignObject(T *
dest, T *
src)
198inline constexpr T &&forward(
typename removeReference<T>::type &
arg)
200 return static_cast<T &&
>(
arg);
204inline constexpr T &&forward(
typename removeReference<T>::type &&arg)
206 static_assert(!isLValueReference<T>::value,
"Invalid lvalue to rvalue conversion");
207 return static_cast<T &&
>(arg);
212inline void swap(T &a, T &b)
214 T temp = nctl::move(a);
216 b = nctl::move(temp);
221inline bool equalTo(
const T &a,
const T &b)
228inline bool equalTo(
const T *a,
const T *b)
234inline bool equalTo<char>(
const char *a,
const char *b)
237 while (*a && (*a == *b))
242 const unsigned char result = *
reinterpret_cast<const unsigned char *
>(a) -
243 *
reinterpret_cast<const unsigned char *
>(b);
245 return (result == 0);
249void constructObject(T *ptr)
251 detail::constructHelpers<isTriviallyConstructible<T>::value>::constructObject(ptr);
255void constructArray(T *ptr,
unsigned int numElements)
257 detail::constructHelpers<isTriviallyConstructible<T>::value>::constructArray(ptr, numElements);
261void copyConstructObject(T *dest,
const T *src)
263 detail::constructHelpers<isTriviallyConstructible<T>::value>::copyConstructObject(dest, src);
267void copyConstructArray(T *dest,
const T *src,
unsigned int numElements)
269 detail::constructHelpers<isTriviallyConstructible<T>::value>::copyConstructArray(dest, src, numElements);
273void moveConstructObject(T *dest, T *src)
275 detail::constructHelpers<isTriviallyConstructible<T>::value>::moveConstructObject(dest, src);
279void moveConstructArray(T *dest, T *src,
unsigned int numElements)
281 detail::constructHelpers<isTriviallyConstructible<T>::value>::moveConstructArray(dest, src, numElements);
285void destructObject(T *ptr)
287 detail::destructHelpers<isTriviallyDestructible<T>::value>::destructObject(ptr);
291void destructArray(T *ptr,
unsigned int numElements)
293 detail::destructHelpers<isTriviallyDestructible<T>::value>::destructArray(ptr, numElements);
297void copyAssignObject(T *dest,
const T *src)
299 detail::copyHelpers<isTriviallyCopyable<T>::value>::copyAssignObject(dest, src);
303void copyAssignArray(T *dest,
const T *src,
unsigned int numElements)
305 detail::copyHelpers<isTriviallyCopyable<T>::value>::copyAssignArray(dest, src, numElements);
309void moveAssignObject(T *dest, T *src)
311 detail::copyHelpers<isTriviallyCopyable<T>::value>::moveAssignObject(dest, src);
315void moveAssignArray(T *dest, T *src,
unsigned int numElements)
317 detail::copyHelpers<isTriviallyCopyable<T>::value>::moveAssignArray(dest, src, numElements);
A unique pointer implementation.
Definition UniquePtr.h:118
A container for functions to construct objects and arrays of objects.
Definition utility.h:21
A container for functions to assign objects and arrays of objects.
Definition utility.h:137
A container for functions to destruct objects and arrays of objects.
Definition utility.h:104