CommonLibSSE (Parapets fork)
Loading...
Searching...
No Matches
GConstructorMov.h
Go to the documentation of this file.
1#pragma once
2
3namespace RE
4{
5 template <class T>
7 {
8 public:
9 static void Construct(void* a_ptr)
10 {
11 ::new (a_ptr) T{};
12 }
13
14 static void Construct(void* a_ptr, const T& a_source)
15 {
16 ::new (a_ptr) T{ a_source };
17 }
18
19 template <class S>
20 static void ConstructAlt(void* a_ptr, const S& a_source)
21 {
22 ::new (a_ptr) T{ a_source };
23 }
24
25 static void ConstructArray(void* a_ptr, UPInt a_count)
26 {
27 T* ptr = static_cast<T*>(a_ptr);
28 for (UPInt i = 0; i < a_count; ++i) {
29 Construct(ptr++);
30 }
31 }
32
33 static void ConstructArray(void* a_ptr, UPInt count, const T& source)
34 {
35 T* ptr = (T*)a_ptr;
36 for (UPInt i = 0; i < count; ++i) {
37 Construct(ptr++, source);
38 }
39 }
40
41 static void ConstructArray(void* a_ptr, UPInt a_count, const T* a_source)
42 {
43 T* ptr = (T*)a_ptr;
44 for (UPInt i = 0; i < a_count; ++i) {
45 Construct(ptr++, *(a_source++));
46 }
47 }
48
49 static void Destruct(T* a_ptr)
50 {
51 a_ptr->~T();
52 }
53
54 static void DestructArray(T* a_ptr, UPInt a_count)
55 {
56 a_ptr += a_count - 1;
57 for (UPInt i = 0; i < a_count; ++i) {
58 (a_ptr--)->~T();
59 }
60 }
61
62 static void CopyArrayForward(T* a_dst, const T* a_src, UPInt a_count)
63 {
64 std::memmove(a_dst, a_src, a_count * sizeof(T));
65 }
66
67 static void CopyArrayBackward(T* a_dst, const T* a_src, UPInt a_count)
68 {
69 std::memmove(a_dst, a_src, a_count * sizeof(T));
70 }
71
72 static bool IsMovable()
73 {
74 return true;
75 }
76 };
77 static_assert(sizeof(GConstructorMov<void*>) == 0x1);
78}
Definition: GConstructorMov.h:7
static void ConstructArray(void *a_ptr, UPInt a_count)
Definition: GConstructorMov.h:25
static void ConstructAlt(void *a_ptr, const S &a_source)
Definition: GConstructorMov.h:20
static void Destruct(T *a_ptr)
Definition: GConstructorMov.h:49
static bool IsMovable()
Definition: GConstructorMov.h:72
static void Construct(void *a_ptr)
Definition: GConstructorMov.h:9
static void DestructArray(T *a_ptr, UPInt a_count)
Definition: GConstructorMov.h:54
static void CopyArrayForward(T *a_dst, const T *a_src, UPInt a_count)
Definition: GConstructorMov.h:62
static void Construct(void *a_ptr, const T &a_source)
Definition: GConstructorMov.h:14
static void CopyArrayBackward(T *a_dst, const T *a_src, UPInt a_count)
Definition: GConstructorMov.h:67
static void ConstructArray(void *a_ptr, UPInt count, const T &source)
Definition: GConstructorMov.h:33
static void ConstructArray(void *a_ptr, UPInt a_count, const T *a_source)
Definition: GConstructorMov.h:41
Definition: AbsorbEffect.h:6
std::size_t UPInt
Definition: SFTypes.h:5