20__forceinline
unsigned int
21align(
unsigned int alignant,
unsigned int alignment)
23 return (alignant + alignment - 1) & ~(alignment - 1);
29__forceinline
unsigned int
30align(
int alignant,
int alignment)
32 return ((
unsigned int)alignant + (
unsigned int)alignment - 1) & ~((
unsigned int)alignment - 1);
40align(
size_t alignant,
size_t alignment)
42 return (alignant + alignment - 1) & ~(alignment - 1);
48__forceinline uintptr_t
49alignptr(uintptr_t alignant, uintptr_t alignment)
51 return (alignant + alignment - 1) & ~(alignment - 1);
57__forceinline
unsigned int
60 return (alignant / alignment * alignment);
70 return (alignant / alignment * alignment);
76__forceinline uintptr_t
79 return (alignant / alignment * alignment);
87operator"" _KB(
const unsigned long long val)
96operator"" _MB(
const unsigned long long val)
98 return val * 1024 * 1024;
105operator"" _GB(
const unsigned long long val)
107 return val * 1024 * 1024 * 1024;
112#elif ( __OSX__ || __APPLE__ || __linux__ )
115#error "UNKNOWN PLATFORM"
135template<
typename TYPE>
140 if constexpr (!std::is_trivially_constructible<TYPE>::value)
142 for (
size_t i = 0; i < size; ++i)
144 ::new( &buffer[i] ) TYPE;
153template<
typename TYPE>
157 if (size == 0)
return nullptr;
159 const size_t bytes = size *
sizeof(TYPE) + (
sizeof(
void*) - 1);
168 n_error(
"ArrayAllocStack is out of bounds!");
172 if constexpr (!std::is_trivially_constructible<TYPE>::value)
174 for (
size_t i = 0; i < size; ++i)
176 ::new(&buffer[i]) TYPE;
186template<
typename TYPE>
190 if constexpr (!std::is_trivially_destructible<TYPE>::value)
192 for (
size_t i = 0; i < size; ++i)
203template<
typename TYPE>
209 const size_t bytes = size *
sizeof(TYPE) + (
sizeof(
void*) - 1);
213 if constexpr (!std::is_trivially_destructible<TYPE>::value)
215 for (
size_t i = 0; i < size; ++i)
void __cdecl n_error(const char *msg,...)
This function is called when a serious situation is encountered which requires abortion of the applic...
Definition debug.cc:138
#define n_assert(exp)
Definition debug.h:50
Nebula compiler specific defines and configuration.
ThreadLocalMiniHeap N_ThreadLocalMiniHeap
Definition memory.cc:6
void ArrayFreeStack(size_t size, TYPE *buffer)
Definition memory.h:205
TYPE * ArrayAllocStack(size_t size)
Definition memory.h:155
void ArrayFree(size_t size, TYPE *buffer)
Definition memory.h:188
TYPE * ArrayAlloc(size_t size)
Definition memory.h:137
Definition arenaallocator.h:31
__forceinline unsigned int align(unsigned int alignant, unsigned int alignment)
Definition memory.h:21
__forceinline uintptr_t align_downptr(uintptr_t alignant, uintptr_t alignment)
Definition memory.h:77
void * Alloc(HeapType heapType, size_t size, size_t alignment)
Allocate a block of memory from one of the global heaps.
Definition osxmemory.cc:56
void Free(HeapType heapType, void *ptr)
Free a block of memory.
Definition osxmemory.cc:136
__forceinline unsigned int align_down(unsigned int alignant, unsigned int alignment)
Definition memory.h:58
@ ObjectArrayHeap
Definition osxmemoryconfig.h:28
__forceinline uintptr_t alignptr(uintptr_t alignant, uintptr_t alignment)
Definition memory.h:49
Memory subsystem features for the Posix platform.
void Realloc(size_t numBytes)
Definition memory.cc:34
char * heap
Definition memory.h:125
~ThreadLocalMiniHeap()
Definition memory.cc:22
size_t capacity
Definition memory.h:127
ThreadLocalMiniHeap()
Definition memory.cc:11
size_t iterator
Definition memory.h:126
Memory subsystem features for win32.