aboutsummaryrefslogtreecommitdiff
path: root/include/EASTL/core_allocator.h
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2021-04-08 16:43:58 +0200
committerToni Uhlig <matzeton@googlemail.com>2021-04-08 16:43:58 +0200
commite59cf7b09e7388d369e8d2bf73501cde79c28708 (patch)
tree6099307032bb86f4a969721f9ac447d3d1be67d4 /include/EASTL/core_allocator.h
Squashed 'EASTL/' content from commit fad5471
git-subtree-dir: EASTL git-subtree-split: fad54717f8e4ebb13b20095da7efd07a53af0f10
Diffstat (limited to 'include/EASTL/core_allocator.h')
-rw-r--r--include/EASTL/core_allocator.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/include/EASTL/core_allocator.h b/include/EASTL/core_allocator.h
new file mode 100644
index 0000000..e437491
--- /dev/null
+++ b/include/EASTL/core_allocator.h
@@ -0,0 +1,70 @@
+/////////////////////////////////////////////////////////////////////////////
+// Copyright (c) Electronic Arts Inc. All rights reserved.
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef EASTL_CORE_ALLOCATOR_H
+#define EASTL_CORE_ALLOCATOR_H
+
+#if EASTL_CORE_ALLOCATOR_ENABLED
+
+#include <coreallocator/icoreallocator.h>
+
+namespace EA
+{
+ namespace Allocator
+ {
+ /// EASTLCoreAllocatorImpl
+ ///
+ /// EASTL provides an out of the box implementation of the
+ /// ICoreAllocator interface. This is provided as a convenience for
+ /// users who wish to provide ICoreAllocator implementations for EASTL to use.
+ ///
+ /// EASTL has a dependency on coreallocator so to provide an out of
+ /// the box implementation for EASTLCoreAlloctor and EASTLCoreDeleter
+ /// that can be used and tested. Historically we could not test
+ /// ICoreAllocator interface because we relied on the code being linked
+ /// in user code.
+ ///
+
+ class EASTLCoreAllocatorImpl : public ICoreAllocator
+ {
+ public:
+ virtual void* Alloc(size_t size, const char* name, unsigned int flags)
+ {
+ return ::operator new[](size, name, flags, 0, __FILE__, __LINE__);
+ }
+
+ virtual void* Alloc(size_t size, const char* name, unsigned int flags, unsigned int alignment, unsigned int alignOffset = 0)
+ {
+ return ::operator new[](size, alignment, alignOffset, name, flags, 0, __FILE__, __LINE__);
+ }
+
+ virtual void Free(void* ptr, size_t size = 0)
+ {
+ ::operator delete(static_cast<char*>(ptr));
+ }
+
+ virtual void* AllocDebug(size_t size, const DebugParams debugParams, unsigned int flags)
+ {
+ return Alloc(size, debugParams.mName, flags);
+ }
+
+ virtual void* AllocDebug(size_t size, const DebugParams debugParams, unsigned int flags, unsigned int align, unsigned int alignOffset = 0)
+ {
+ return Alloc(size, debugParams.mName, flags, align, alignOffset);
+ }
+
+ static EASTLCoreAllocatorImpl* GetDefaultAllocator();
+ };
+
+ inline EASTLCoreAllocatorImpl* EASTLCoreAllocatorImpl::GetDefaultAllocator()
+ {
+ static EASTLCoreAllocatorImpl allocator;
+ return &allocator;
+ }
+ }
+}
+
+#endif // EASTL_CORE_ALLOCATOR_ENABLED
+#endif // EASTL_CORE_ALLOCATOR_H
+