diff options
| author | Léo Lam <leo@leolam.fr> | 2022-03-27 19:09:01 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2022-03-27 19:38:12 +0200 |
| commit | f86b6dde654d6c82b49f1bd5a6aaa81fb783153e (patch) | |
| tree | 318fda5a594a763bd6cfad4ae3eb2c3cd73f7a5b /lib | |
| parent | 3a206f92c8b9f75f7ef7f428bea3e09ca5534758 (diff) | |
ksys/phys: Add HavokMemoryAllocator
Diffstat (limited to 'lib')
7 files changed, 49 insertions, 3 deletions
diff --git a/lib/hkStubs/CMakeLists.txt b/lib/hkStubs/CMakeLists.txt index 86e00c61..0a495baa 100644 --- a/lib/hkStubs/CMakeLists.txt +++ b/lib/hkStubs/CMakeLists.txt @@ -57,6 +57,7 @@ add_library(hkStubs OBJECT Havok/Common/Base/Memory/Allocator/hkMemoryAllocator.h Havok/Common/Base/Memory/Allocator/Lifo/hkLifoAllocator.h + Havok/Common/Base/Memory/Allocator/Malloc/hkMallocAllocator.h Havok/Common/Base/Memory/Router/hkMemoryRouter.h Havok/Common/Base/Memory/Util/hkMemUtil.h diff --git a/lib/hkStubs/Havok/Common/Base/Memory/Allocator/Malloc/hkMallocAllocator.h b/lib/hkStubs/Havok/Common/Base/Memory/Allocator/Malloc/hkMallocAllocator.h new file mode 100644 index 00000000..fab10966 --- /dev/null +++ b/lib/hkStubs/Havok/Common/Base/Memory/Allocator/Malloc/hkMallocAllocator.h @@ -0,0 +1,25 @@ +#pragma once + +#include <Havok/Common/Base/hkBase.h> + +class hkMallocAllocator : public hkMemoryAllocator { +public: + explicit hkMallocAllocator(int align = HK_REAL_ALIGNMENT) + : m_align(align), m_currentUsed(0), m_peakUse(0) {} + + void* blockAlloc(int numBytes) override; + void blockFree(void* p, int numBytes) override; + + void getMemoryStatistics(hkMemoryAllocator::MemoryStatistics& u) const override; + int getAllocatedSize(const void* obj, int nbytes) const override; + void resetPeakMemoryStatistics() override; + + int m_align; + + static hkMemoryAllocator* m_defaultMallocAllocator; + +protected: + hkUint32 m_unused; + hkUint32 m_currentUsed; + hkUint32 m_peakUse; +}; diff --git a/lib/hkStubs/Havok/Common/Base/Memory/Allocator/hkMemoryAllocator.h b/lib/hkStubs/Havok/Common/Base/Memory/Allocator/hkMemoryAllocator.h index b024b565..521a57b1 100644 --- a/lib/hkStubs/Havok/Common/Base/Memory/Allocator/hkMemoryAllocator.h +++ b/lib/hkStubs/Havok/Common/Base/Memory/Allocator/hkMemoryAllocator.h @@ -2,6 +2,11 @@ #include <Havok/Common/Base/Types/hkBaseTypes.h> +#define HK_DECLARE_PLACEMENT_ALLOCATOR() \ + HK_FORCE_INLINE void* operator new(hk_size_t, void* p) { return p; } \ + HK_FORCE_INLINE void operator delete(void*, void*) {} \ + HK_FORCE_INLINE void operator delete(void*, hk_size_t) {} + class hkMemorySnapshot; template <typename T> @@ -16,6 +21,8 @@ struct hkSizeOfTypeOrVoid<void> { class hkMemoryAllocator { public: + HK_DECLARE_PLACEMENT_ALLOCATOR() + using MemoryWalkCallback = void (*)(void* start, hk_size_t size, bool allocated, int pool, void* param); diff --git a/lib/hkStubs/Havok/Common/Base/Object/hkBaseObject.h b/lib/hkStubs/Havok/Common/Base/Object/hkBaseObject.h index 5089ff85..39571f13 100644 --- a/lib/hkStubs/Havok/Common/Base/Object/hkBaseObject.h +++ b/lib/hkStubs/Havok/Common/Base/Object/hkBaseObject.h @@ -2,6 +2,13 @@ class hkBaseObject { public: + HK_DECLARE_PLACEMENT_ALLOCATOR() + + HK_FORCE_INLINE explicit hkBaseObject(hkFinishLoadedObjectFlag flag) {} + virtual ~hkBaseObject() = default; virtual void __first_virtual_table_function__() {} // NOLINT(bugprone-reserved-identifier) + +protected: + HK_FORCE_INLINE hkBaseObject() = default; }; diff --git a/lib/hkStubs/Havok/Common/Base/Object/hkReferencedObject.cpp b/lib/hkStubs/Havok/Common/Base/Object/hkReferencedObject.cpp index 2029b86a..f3c7f780 100644 --- a/lib/hkStubs/Havok/Common/Base/Object/hkReferencedObject.cpp +++ b/lib/hkStubs/Havok/Common/Base/Object/hkReferencedObject.cpp @@ -1,4 +1,4 @@ -#include <Havok/Common/Base/Object/hkReferencedObject.h> +#include <Havok/Common/Base/hkBase.h> const hkClass* hkReferencedObject::getClassType() const { return nullptr; diff --git a/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h b/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h index d2e63472..2067471d 100644 --- a/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h +++ b/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h @@ -9,6 +9,9 @@ using hkFloat32 = float; using hkDouble64 = double; using hkReal = hkFloat32; #define HK_REAL_IS_FLOAT +#define HK_FLOAT_ALIGNMENT 16 +#define HK_DOUBLE_ALIGNMENT 32 +#define HK_REAL_ALIGNMENT HK_FLOAT_ALIGNMENT using hkChar = char; using hkInt8 = std::int8_t; diff --git a/lib/hkStubs/Havok/Common/Base/hkBase.h b/lib/hkStubs/Havok/Common/Base/hkBase.h index a94eaf9b..c5f6e072 100644 --- a/lib/hkStubs/Havok/Common/Base/hkBase.h +++ b/lib/hkStubs/Havok/Common/Base/hkBase.h @@ -1,9 +1,12 @@ #pragma once -#include <Havok/Common/Base/Object/hkBaseObject.h> -#include <Havok/Common/Base/Object/hkReferencedObject.h> #include <Havok/Common/Base/Types/hkBaseDefs.h> #include <Havok/Common/Base/Types/hkBaseTypes.h> + +#include <Havok/Common/Base/Memory/Allocator/hkMemoryAllocator.h> + +#include <Havok/Common/Base/Object/hkBaseObject.h> +#include <Havok/Common/Base/Object/hkReferencedObject.h> #include <Havok/Common/Base/Types/hkRefPtr.h> #include <Havok/Common/Base/Types/hkRefVariant.h> #include <Havok/Common/Base/Types/hkUFloat8.h> |
