2022-04-01 04:06:53 +00:00
|
|
|
/***
|
|
|
|
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
|
|
|
|
File: auMemoryModel.hpp
|
|
|
|
Date: 2022-2-1
|
|
|
|
File: AuroraUtils.hpp
|
|
|
|
File: auROXTLUtils.hpp
|
|
|
|
Date: 2021-6-9
|
|
|
|
Author: Reece
|
|
|
|
***/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "auTypes.hpp"
|
|
|
|
|
2024-09-13 07:50:25 +00:00
|
|
|
struct AuHeap;
|
|
|
|
|
|
|
|
namespace __audetail
|
|
|
|
{
|
|
|
|
extern AuHeap *gDefaultDiscontiguousHeap;
|
|
|
|
}
|
|
|
|
|
2024-09-27 16:52:56 +00:00
|
|
|
namespace Aurora
|
|
|
|
{
|
|
|
|
namespace Memory
|
2024-09-13 07:50:25 +00:00
|
|
|
{
|
|
|
|
struct ProxyHeap;
|
|
|
|
}
|
2024-09-27 16:52:56 +00:00
|
|
|
}
|
2024-09-13 07:50:25 +00:00
|
|
|
|
2022-04-01 04:06:53 +00:00
|
|
|
#if !defined(AURORA_RUNTIME_AU_SHARED_PTR)
|
|
|
|
#define AURORA_RUNTIME_AU_SHARED_PTR std::shared_ptr
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if !defined(AURORA_RUNTIME_AU_WEAK_PTR)
|
|
|
|
#define AURORA_RUNTIME_AU_WEAK_PTR std::weak_ptr
|
|
|
|
#endif
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
using AuWPtr = AURORA_RUNTIME_AU_WEAK_PTR<T>;
|
|
|
|
|
|
|
|
#if !defined(AURORA_RUNTIME_AU_UNIQUE_PTR)
|
2024-09-13 07:50:25 +00:00
|
|
|
#define AURORA_RUNTIME_AU_UNIQUE_PTR AuUniquePointer
|
2022-04-01 04:06:53 +00:00
|
|
|
#endif
|
|
|
|
|
2024-09-13 07:50:25 +00:00
|
|
|
#include <auROXTL/MemoryModel/auUniquePointer.hpp>
|
2022-04-01 04:06:53 +00:00
|
|
|
#include "STLShims/ExtendStlLikeSharedPtr.hpp"
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
using AuSPtr = typename Aurora::Memory::ExSharedPtr<T, AURORA_RUNTIME_AU_SHARED_PTR<T>>;
|
|
|
|
|
2024-09-13 07:50:25 +00:00
|
|
|
template <class T>
|
|
|
|
using AuSSPtr = typename AURORA_RUNTIME_AU_SHARED_PTR<T>;
|
|
|
|
|
|
|
|
template <class T, typename Deleter_t = void(*)(T *)>
|
2022-04-01 04:06:53 +00:00
|
|
|
using AuUPtr = AURORA_RUNTIME_AU_UNIQUE_PTR<T, Deleter_t>;
|
|
|
|
|
|
|
|
#if !defined(AU_AuEnableSharedFromThis)
|
|
|
|
#define AU_AuEnableSharedFromThis
|
|
|
|
|
|
|
|
template <class X>
|
|
|
|
struct AuEnableSharedFromThis : Aurora::Memory::ExSharedFromThis<X, std::enable_shared_from_this<X>>
|
|
|
|
{};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if !defined(AURORA_RUNTIME_MAKE_SHARED)
|
|
|
|
#define AURORA_RUNTIME_MAKE_SHARED std::make_shared
|
2022-09-12 20:40:16 +00:00
|
|
|
#endif
|
|
|
|
|
2024-02-16 10:28:14 +00:00
|
|
|
static inline AU_NORETURN void SysPanic(const char *pMsg);
|
2022-09-12 20:40:16 +00:00
|
|
|
|
2024-10-13 07:49:59 +00:00
|
|
|
AU_OPTIMIZED void AuMemoryPanic(const char *msg)
|
2022-09-12 20:40:16 +00:00
|
|
|
{
|
|
|
|
#if defined(AURORA_RUNTIME_MEMORY_PANIC)
|
|
|
|
AURORA_RUNTIME_MEMORY_PANIC(msg);
|
|
|
|
#else
|
2024-02-16 10:28:14 +00:00
|
|
|
SysPanic(msg);
|
2022-09-12 20:40:16 +00:00
|
|
|
#endif
|
|
|
|
}
|
2022-04-01 04:06:53 +00:00
|
|
|
|
2024-09-10 07:28:47 +00:00
|
|
|
#include "MemoryModel/auArraySize.hpp"
|
|
|
|
#include "MemoryModel/auSizeOf.hpp"
|
|
|
|
#include "MemoryModel/auOffsetOf.hpp"
|
2022-04-01 04:06:53 +00:00
|
|
|
|
2023-04-06 14:04:36 +00:00
|
|
|
|
|
|
|
template <typename T>
|
|
|
|
static auto AuTryLockMemoryType(T weak) -> decltype(weak.lock())
|
|
|
|
{
|
|
|
|
if (weak.expired())
|
|
|
|
{
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
AUROXTL_COMMODITY_TRY
|
|
|
|
{
|
|
|
|
return weak.lock();
|
|
|
|
}
|
|
|
|
AUROXTL_COMMODITY_CATCH
|
|
|
|
{
|
|
|
|
return {};
|
|
|
|
}
|
2023-02-04 23:54:19 +00:00
|
|
|
}
|
|
|
|
|
2022-04-01 04:06:53 +00:00
|
|
|
template <class Z, typename T>
|
|
|
|
static void auline AuSafeDelete(T *in)
|
|
|
|
{
|
|
|
|
static_assert(AuIsBaseOf_v<T, AuRemovePointer_t<Z>>, "Couldn't not safe delete from type T because it is not derived from Z");
|
|
|
|
|
|
|
|
if (in == nullptr)
|
|
|
|
{
|
2023-05-10 17:44:31 +00:00
|
|
|
return;
|
2022-04-01 04:06:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
delete static_cast<Z>(in);
|
|
|
|
}
|
|
|
|
|
2024-06-11 08:36:34 +00:00
|
|
|
#if !defined(AURORA_RUNTIME_AU_DEFAULT_DELETER)
|
|
|
|
#define AURORA_RUNTIME_AU_DEFAULT_DELETER std::default_delete
|
|
|
|
#endif
|
2022-04-01 04:06:53 +00:00
|
|
|
|
2024-09-13 07:50:25 +00:00
|
|
|
template <class T>
|
|
|
|
struct AuPMRAllocator;
|
|
|
|
|
2024-09-27 16:52:56 +00:00
|
|
|
namespace Aurora
|
|
|
|
{
|
|
|
|
namespace Memory
|
2022-04-01 04:06:53 +00:00
|
|
|
{
|
2024-04-20 22:38:11 +00:00
|
|
|
template <class T>
|
|
|
|
struct CppHeapWrapper;
|
2024-09-09 05:53:00 +00:00
|
|
|
|
2024-04-20 22:38:11 +00:00
|
|
|
|
2022-04-01 04:06:53 +00:00
|
|
|
#if defined(AURORA_ROXTL_ALLOCATORS_USE_STD)
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
using PrimitiveArrayAllocator = std::allocator<T>;
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
using ClassArrayAllocator = std::allocator<T>;
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
using StringAllocator = std::allocator<T>;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
static void *__FAlloc(Types::size_t length, Types::size_t align);
|
|
|
|
static void __Free(void *buffer);
|
2024-04-20 21:37:52 +00:00
|
|
|
static AuUInt __SizeOf(void *pHead);
|
2022-04-01 04:06:53 +00:00
|
|
|
|
|
|
|
template <class T>
|
|
|
|
struct BaseAuroraRuntimeAllocator
|
|
|
|
{
|
|
|
|
typedef T value_type;
|
|
|
|
|
|
|
|
AU_COPY_MOVE(BaseAuroraRuntimeAllocator)
|
|
|
|
|
2024-06-11 08:36:34 +00:00
|
|
|
constexpr BaseAuroraRuntimeAllocator() noexcept
|
|
|
|
{ }
|
2022-04-01 04:06:53 +00:00
|
|
|
|
2024-04-20 21:37:52 +00:00
|
|
|
template <class U>
|
|
|
|
constexpr BaseAuroraRuntimeAllocator(const BaseAuroraRuntimeAllocator <U> &) noexcept
|
2024-06-11 08:36:34 +00:00
|
|
|
{ }
|
2022-04-01 04:06:53 +00:00
|
|
|
|
2024-04-20 21:37:52 +00:00
|
|
|
void *allocate_bytes(std::size_t nbytes,
|
|
|
|
std::size_t alignment = alignof(std::max_align_t))
|
2022-04-01 04:06:53 +00:00
|
|
|
{
|
2024-04-20 21:37:52 +00:00
|
|
|
if (auto pRet = __FAlloc(nbytes, alignment))
|
2022-04-01 04:06:53 +00:00
|
|
|
{
|
2024-04-20 21:37:52 +00:00
|
|
|
return pRet;
|
2022-04-01 04:06:53 +00:00
|
|
|
}
|
2024-04-20 21:37:52 +00:00
|
|
|
else
|
|
|
|
{
|
|
|
|
throw std::bad_alloc();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void deallocate_bytes(void *p,
|
|
|
|
std::size_t nbytes,
|
|
|
|
std::size_t alignment = alignof(std::max_align_t))
|
|
|
|
{
|
|
|
|
return __Free(p);
|
|
|
|
}
|
|
|
|
|
|
|
|
#if defined(AU_LANG_CPP_23)
|
|
|
|
constexpr std::allocation_result<T *> allocate_at_least(const size_t count)
|
|
|
|
{
|
|
|
|
auto pThat = this->allocate(count);
|
|
|
|
return { (T *)pThat, __SizeOf(pThat) / sizeof(T) };
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
template <class U, class... Args >
|
|
|
|
void construct(U *p, Args&&... args)
|
|
|
|
{
|
2024-04-21 05:04:37 +00:00
|
|
|
new ((void *)p) U(AuForward<Args>(args)...);
|
2024-04-20 21:37:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <class U, class... Args >
|
|
|
|
void construct_at(U *p, Args&&... args)
|
|
|
|
{
|
2024-04-21 05:04:37 +00:00
|
|
|
new ((void *)p) U(AuForward<Args>(args)...);
|
2024-04-20 21:37:52 +00:00
|
|
|
}
|
|
|
|
|
2024-04-21 05:04:37 +00:00
|
|
|
void deallocate(const T *pType,
|
2024-04-20 21:37:52 +00:00
|
|
|
const size_t count)
|
|
|
|
{
|
|
|
|
this->deallocate_bytes((void *)pType, 0, 0);
|
|
|
|
}
|
|
|
|
|
2024-04-21 05:04:37 +00:00
|
|
|
AU_ALLOC T *allocate(const size_t count)
|
2024-04-20 21:37:52 +00:00
|
|
|
{
|
|
|
|
if (!count)
|
|
|
|
{
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
return (T *)this->allocate_bytes(count * sizeof(T), alignof(T));
|
|
|
|
}
|
2022-04-01 04:06:53 +00:00
|
|
|
|
2024-04-20 21:37:52 +00:00
|
|
|
template <class U>
|
|
|
|
U *allocate_object(std::size_t n = 1)
|
|
|
|
{
|
|
|
|
return (U *)this->allocate_bytes(sizeof(U) * n, alignof(U));
|
2022-04-01 04:06:53 +00:00
|
|
|
}
|
|
|
|
|
2024-04-20 21:37:52 +00:00
|
|
|
template <class U>
|
|
|
|
void deallocate_object(U *p, std::size_t n = 1)
|
2022-04-01 04:06:53 +00:00
|
|
|
{
|
2024-04-20 21:37:52 +00:00
|
|
|
this->deallocate_bytes(p, 0, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class U, class... CtorArgs>
|
|
|
|
U *new_object(CtorArgs&&... args)
|
|
|
|
{
|
|
|
|
U *p = this->allocate_object<U>();
|
2024-04-21 05:04:37 +00:00
|
|
|
try
|
2024-04-20 21:37:52 +00:00
|
|
|
{
|
2024-04-21 05:04:37 +00:00
|
|
|
this->construct(p, AuForward<CtorArgs>(args)...);
|
|
|
|
}
|
|
|
|
catch (...)
|
|
|
|
{
|
|
|
|
this->deallocate_object(p);
|
|
|
|
throw;
|
2024-04-20 21:37:52 +00:00
|
|
|
}
|
|
|
|
return p;
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class U>
|
|
|
|
void delete_object(U *p)
|
|
|
|
{
|
|
|
|
if constexpr (AuIsClass_v<U> &&
|
|
|
|
!AuIsTriviallyDestructible_v<U>)
|
|
|
|
{
|
|
|
|
p->~U();
|
|
|
|
}
|
|
|
|
|
|
|
|
this->deallocate_object(p);
|
2022-04-01 04:06:53 +00:00
|
|
|
}
|
2024-05-07 04:12:46 +00:00
|
|
|
|
|
|
|
template <class Z>
|
|
|
|
inline constexpr bool operator==(const Aurora::Memory::BaseAuroraRuntimeAllocator<Z> &rhs) noexcept
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
2022-04-01 04:06:53 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
template<typename T>
|
2024-06-11 08:36:34 +00:00
|
|
|
using PrimitiveArrayAllocator = BaseAuroraRuntimeAllocator<T>;
|
2022-04-01 04:06:53 +00:00
|
|
|
|
|
|
|
template<typename T>
|
2024-06-11 08:36:34 +00:00
|
|
|
using ClassArrayAllocator = BaseAuroraRuntimeAllocator<T>;
|
|
|
|
|
2022-04-01 04:06:53 +00:00
|
|
|
template<typename T>
|
2024-06-11 08:36:34 +00:00
|
|
|
using StringAllocator = BaseAuroraRuntimeAllocator<T>;
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
using SharedControlBlockAllocator = BaseAuroraRuntimeAllocator<T>;
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
struct DefaultRuntimeDeleter
|
|
|
|
{
|
|
|
|
constexpr DefaultRuntimeDeleter() noexcept = default;
|
|
|
|
|
|
|
|
template <class Z>
|
|
|
|
DefaultRuntimeDeleter(const DefaultRuntimeDeleter<Z> &) noexcept
|
|
|
|
{ }
|
|
|
|
|
|
|
|
void operator()(T *pThat) const
|
|
|
|
{
|
|
|
|
if constexpr (AuIsClass_v<T> &&
|
|
|
|
!AuIsTriviallyDestructible_v<T>)
|
|
|
|
{
|
|
|
|
pThat->~T();
|
|
|
|
}
|
|
|
|
|
|
|
|
Aurora::Memory::__Free(pThat);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
struct DefaultRuntimeDeleter<T[]>
|
|
|
|
{
|
|
|
|
constexpr DefaultRuntimeDeleter() noexcept = default;
|
|
|
|
|
|
|
|
template <class Z>
|
|
|
|
DefaultRuntimeDeleter(const DefaultRuntimeDeleter<Z> &) noexcept
|
|
|
|
{ }
|
|
|
|
|
|
|
|
template <class Z>
|
|
|
|
void operator()(Z *pThat) const
|
|
|
|
{
|
|
|
|
AURORA_RUNTIME_AU_DEFAULT_DELETER<T[]>()(pThat);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
}
|
2024-09-27 16:52:56 +00:00
|
|
|
}
|
2024-06-11 08:36:34 +00:00
|
|
|
|
|
|
|
#if defined(AURORA_ROXTL_ALLOCATORS_USE_STD)
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
using AuDefaultDeleter = AURORA_RUNTIME_AU_DEFAULT_DELETER<T>;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
using AuDefaultDeleter = Aurora::Memory::DefaultRuntimeDeleter<T>;
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
template <class T, typename... Args>
|
2024-09-13 07:50:25 +00:00
|
|
|
AuSPtr<T> AuMakeShared(Args&&... args);
|
2024-06-11 08:36:34 +00:00
|
|
|
|
|
|
|
template <class T, typename... Args>
|
2024-10-13 07:49:59 +00:00
|
|
|
AU_OPTIMIZED AuSPtr<T> AuMakeSharedPanic(Args&&... args)
|
2024-06-11 08:36:34 +00:00
|
|
|
{
|
|
|
|
#if defined(AURORA_ROXTL_ALLOCATORS_USE_STD)
|
|
|
|
try
|
|
|
|
{
|
|
|
|
auto pShared = AURORA_RUNTIME_MAKE_SHARED<T>(AuForward<Args>(args)...);
|
|
|
|
if (!pShared)
|
|
|
|
{
|
|
|
|
AuMemoryPanic("Failed to allocate <X>"); // TODO: non-rtti typename
|
|
|
|
}
|
|
|
|
|
|
|
|
return pShared;
|
|
|
|
}
|
|
|
|
catch (...)
|
|
|
|
{
|
|
|
|
AuMemoryPanic("Failed to allocate <X>"); // TODO: non-rtti typename
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
auto pShared = AuMakeShared<T>(AuForward<Args>(args)...);
|
|
|
|
if (!pShared)
|
|
|
|
{
|
|
|
|
AuMemoryPanic("Failed to allocate <X>"); // TODO: non-rtti typename
|
|
|
|
}
|
|
|
|
|
|
|
|
return pShared;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T, typename... Args>
|
2024-10-13 07:49:59 +00:00
|
|
|
AU_OPTIMIZED AuSPtr<T> AuMakeSharedThrow(Args&&... args)
|
2024-06-11 08:36:34 +00:00
|
|
|
{
|
|
|
|
#if defined(AURORA_ROXTL_ALLOCATORS_USE_STD)
|
|
|
|
try
|
|
|
|
{
|
|
|
|
auto pShared = AURORA_RUNTIME_MAKE_SHARED<T>(AuForward<Args>(args)...);
|
|
|
|
if (!pShared)
|
|
|
|
{
|
|
|
|
// TODO: Agnostic SysPushErrorMemory
|
|
|
|
AU_THROW_STRING("Failed to allocate <X>"); // TODO: non-rtti typename
|
|
|
|
}
|
|
|
|
|
|
|
|
return pShared;
|
|
|
|
}
|
|
|
|
catch (...)
|
|
|
|
{
|
|
|
|
// TODO: Agnostic SysPushErrorCatch
|
|
|
|
AU_THROW_STRING("Failed to allocate <X>"); // TODO: non-rtti typename
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
auto pShared = AuMakeShared<T>(AuForward<Args>(args)...);
|
|
|
|
if (!pShared)
|
|
|
|
{
|
|
|
|
AU_THROW_STRING("Failed to allocate <X>"); // TODO: non-rtti typename
|
|
|
|
}
|
|
|
|
|
|
|
|
return pShared;
|
2022-04-01 04:06:53 +00:00
|
|
|
#endif
|
2024-04-28 10:56:30 +00:00
|
|
|
}
|
|
|
|
|
2024-06-11 08:36:34 +00:00
|
|
|
template <class T>
|
2024-10-13 07:49:59 +00:00
|
|
|
AU_OPTIMIZED AuSPtr<T> AuMakeSharedArray(AuUInt count)
|
2024-06-11 08:36:34 +00:00
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
#if defined(AU_LANG_CPP_20) && 0
|
|
|
|
return AURORA_RUNTIME_AU_SHARED_PTR<T[]>(count);
|
|
|
|
#else
|
|
|
|
return AURORA_RUNTIME_AU_SHARED_PTR<T>(new T[count], AURORA_RUNTIME_AU_DEFAULT_DELETER<T[]>());
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
catch (...)
|
|
|
|
{
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
namespace __audetail
|
|
|
|
{
|
|
|
|
struct Dummy
|
|
|
|
{
|
|
|
|
char a;
|
|
|
|
};
|
|
|
|
|
2024-09-27 16:52:56 +00:00
|
|
|
AU_INLINE_OR_STATIC_17 AuSPtr<Dummy> gDummy;
|
2024-09-13 07:50:25 +00:00
|
|
|
|
2024-06-11 08:36:34 +00:00
|
|
|
inline AuSPtr<Dummy> GetDummyDeleter()
|
|
|
|
{
|
2024-09-13 07:50:25 +00:00
|
|
|
if (!gDummy)
|
2024-06-11 08:36:34 +00:00
|
|
|
{
|
|
|
|
#if defined(AURORA_COMPILER_MSVC)
|
2024-09-13 07:50:25 +00:00
|
|
|
return gDummy;
|
2024-06-11 08:36:34 +00:00
|
|
|
#endif
|
2024-09-13 07:50:25 +00:00
|
|
|
gDummy = AuMakeShared<Dummy>();
|
2024-06-11 08:36:34 +00:00
|
|
|
}
|
2024-09-13 07:50:25 +00:00
|
|
|
return gDummy;
|
2024-06-11 08:36:34 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T>
|
|
|
|
static AuSPtr<T> AuUnsafeRaiiToShared(T *in)
|
|
|
|
{
|
|
|
|
return AuSPtr<T>(__audetail::GetDummyDeleter(), in);
|
|
|
|
}
|
|
|
|
|
|
|
|
template <class T, class Z>
|
|
|
|
static AuSPtr<T> AuUnsafeRaiiToShared(const AuUPtr<T, Z> &in)
|
|
|
|
{
|
|
|
|
return AuUnsafeRaiiToShared(in.get());
|
|
|
|
}
|
|
|
|
|
2024-04-28 10:56:30 +00:00
|
|
|
template <class T, class Z>
|
2024-05-07 04:12:46 +00:00
|
|
|
inline constexpr bool operator==(const Aurora::Memory::BaseAuroraRuntimeAllocator<T> &lhs,
|
|
|
|
const Aurora::Memory::BaseAuroraRuntimeAllocator<Z> &rhs) noexcept
|
2024-04-28 10:56:30 +00:00
|
|
|
{
|
|
|
|
return true;
|
2024-05-07 04:12:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
template <class T, class Z>
|
|
|
|
inline constexpr bool operator!=(const Aurora::Memory::BaseAuroraRuntimeAllocator<T> &lhs,
|
|
|
|
const Aurora::Memory::BaseAuroraRuntimeAllocator<Z> &rhs) noexcept
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2024-09-10 07:29:13 +00:00
|
|
|
|
2024-09-13 07:50:25 +00:00
|
|
|
#include <auROXTL/MemoryModel/auSetAllocator.hpp>
|
|
|
|
|
|
|
|
#include <auROXTL/MemoryModel/auPMRAllocator.hpp>
|
|
|
|
|
|
|
|
#include <auROXTL/MemoryModel/auHeapStats.hpp>
|
|
|
|
#include <auROXTL/MemoryModel/auHeap.hpp>
|
|
|
|
#include <auROXTL/MemoryModel/auHeapAccessor.hpp>
|
2024-09-22 16:14:56 +00:00
|
|
|
#include <auROXTL/MemoryModel/AuHeapUniqueDeleterClass.hpp>
|
2024-09-13 07:50:25 +00:00
|
|
|
|
|
|
|
#include <auROXTL/MemoryModel/auDummyHeap.hpp>
|
|
|
|
|
|
|
|
#include <auROXTL/MemoryModel/auMemoryAllocate.hpp>
|