CommonLibSSE (Parapets fork)
Loading...
Searching...
No Matches
NiTCollection.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace RE
6{
7 void* NiMalloc(std::size_t a_sizeInBytes);
8 void* NiAlignedMalloc(std::size_t a_sizeInBytes, std::size_t a_alignment);
9 void* NiRealloc(void* a_mem, std::size_t a_sizeInBytes);
10 void* NiAlignedRealloc(void* a_mem, std::size_t a_sizeInBytes, std::size_t a_alignment);
11 void NiFree(void* a_mem);
12 void NiAlignedFree(void* a_mem);
13 constexpr bool NiTrackAlloc([[maybe_unused]] void* a_mem, [[maybe_unused]] std::size_t a_sizeInBytes) { return false; }
14 constexpr bool NiTrackFree([[maybe_unused]] void* a_mem) { return false; }
15
16 // calloc
17 template <class T>
18 T* NiAlloc(std::size_t a_count)
19 {
20 return static_cast<T*>(NiMalloc(sizeof(T) * a_count));
21 }
22
23 // aligned calloc
24 template <class T>
25 T* NiAlignedAlloc(std::size_t a_count, std::size_t a_alignment)
26 {
27 return static_cast<T*>(NiAlignedMalloc(sizeof(T) * a_count, a_alignment));
28 }
29
30 template <class T>
32 {
33 public:
34 inline static T* Allocate(std::size_t a_numElements)
35 {
36 return static_cast<T*>(NiMalloc(sizeof(T) * a_numElements));
37 };
38
39 inline static void Deallocate(T* a_array)
40 {
41 NiFree(a_array);
42 };
43 };
44
45 template <class T>
47 {
48 public:
49 inline static T* Allocate(std::size_t a_numElements)
50 {
51 auto mem = malloc(sizeof(std::size_t) + sizeof(T) * a_numElements);
52 auto head = static_cast<std::size_t*>(mem);
53 *head = a_numElements;
54 mem = head + 1;
55 return static_cast<T*>(mem);
56 };
57
58 inline static void Deallocate(T* a_array)
59 {
60 if (a_array) {
61 auto head = stl::adjust_pointer<std::size_t>(a_array, -stl::ssizeof_v<std::uintptr_t>);
62 for (std::size_t i = 0; i < *head; ++i) {
63 a_array[i].~T();
64 }
65 free(head);
66 }
67 };
68 };
69}
Definition: NiTCollection.h:32
static T * Allocate(std::size_t a_numElements)
Definition: NiTCollection.h:34
static void Deallocate(T *a_array)
Definition: NiTCollection.h:39
Definition: NiTCollection.h:47
static T * Allocate(std::size_t a_numElements)
Definition: NiTCollection.h:49
static void Deallocate(T *a_array)
Definition: NiTCollection.h:58
Definition: AbsorbEffect.h:6
T * malloc()
Definition: MemoryManager.h:113
void NiFree(void *a_mem)
T * NiAlloc(std::size_t a_count)
Definition: NiTCollection.h:18
void NiAlignedFree(void *a_mem)
void * NiMalloc(std::size_t a_sizeInBytes)
T * NiAlignedAlloc(std::size_t a_count, std::size_t a_alignment)
Definition: NiTCollection.h:25
void * NiRealloc(void *a_mem, std::size_t a_sizeInBytes)
void * NiAlignedMalloc(std::size_t a_sizeInBytes, std::size_t a_alignment)
constexpr bool NiTrackFree(void *a_mem)
Definition: NiTCollection.h:14
void free(void *a_ptr)
Definition: MemoryManager.h:183
constexpr bool NiTrackAlloc(void *a_mem, std::size_t a_sizeInBytes)
Definition: NiTCollection.h:13
void * NiAlignedRealloc(void *a_mem, std::size_t a_sizeInBytes, std::size_t a_alignment)