Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
MemoryAllocator.hpp
1#pragma once
2
3#include <Common/Memory/Allocators/DynamicAllocator.hpp>
4#include <Common/String.hpp>
5
6namespace Grindstone::Memory::AllocatorCore {
8 Allocators::DynamicAllocator dynamicAllocator;
9 };
10
12 void SetAllocatorState(Grindstone::Memory::AllocatorCore::AllocatorState* newAllocatorState);
13
14 bool Initialize(size_t sizeInMegs);
15 void CloseAllocator();
16
17 StringRef AllocateString(size_t size);
18 StringRef AllocateString(Grindstone::StringRef srcString);
19
20 bool FreeWithoutDestructor(void* memPtr);
21
22 size_t GetPeak();
23 size_t GetUsed();
24 size_t GetTotal();
25
26 bool IsEmpty();
27
28 void* AllocateRaw(size_t size, size_t alignment, const char* debugName);
29
30 template<typename T>
31 Grindstone::SharedPtr<T> MakeShared(T* ptr) {
32 return GetAllocatorState()->dynamicAllocator.MakeShared(ptr);
33 }
34
35 template<typename T>
36 Grindstone::UniquePtr<T> MakeUnique(T* ptr) {
37 return GetAllocatorState()->dynamicAllocator.MakeUnique(ptr);
38 }
39
40 template<typename T, typename... Args>
41 Grindstone::UniquePtr<T> AllocateUnique(Args&&... params) {
42 return GetAllocatorState()->dynamicAllocator.AllocateUnique<T>(std::forward<Args>(params)...);
43 }
44
45 template<typename T, typename... Args>
46 Grindstone::SharedPtr<T> AllocateShared(Args&&... params) {
47 return GetAllocatorState()->dynamicAllocator.AllocateShared<T>(std::forward<Args>(params)...);
48 }
49
50 template<typename T, typename... Args>
51 T* Allocate(Args&&... params) {
52 T* ptr = static_cast<T*>(GetAllocatorState()->dynamicAllocator.AllocateRaw(sizeof(T), alignof(T), typeid(T).name()));
53 if (ptr != nullptr) {
54 // Call the constructor on the newly allocated memory
55 new (ptr) T(std::forward<Args>(params)...);
56 }
57
58 return ptr;
59 }
60
61 template<typename T>
62 bool Free(T* memPtr) {
63 if (memPtr == nullptr) {
64 return false;
65 }
66
67 reinterpret_cast<T*>(memPtr)->~T();
68 GetAllocatorState()->dynamicAllocator.Free(memPtr);
69
70 return true;
71 }
72};
A dynamic allocator represented by a linked list.
Definition DynamicAllocator.hpp:19
Definition SharedPtr.hpp:5
Definition UniquePtr.hpp:7