summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-03-27 19:09:01 +0200
committerLéo Lam <leo@leolam.fr>2022-03-27 19:38:12 +0200
commitf86b6dde654d6c82b49f1bd5a6aaa81fb783153e (patch)
tree318fda5a594a763bd6cfad4ae3eb2c3cd73f7a5b /lib
parent3a206f92c8b9f75f7ef7f428bea3e09ca5534758 (diff)
ksys/phys: Add HavokMemoryAllocator
Diffstat (limited to 'lib')
-rw-r--r--lib/hkStubs/CMakeLists.txt1
-rw-r--r--lib/hkStubs/Havok/Common/Base/Memory/Allocator/Malloc/hkMallocAllocator.h25
-rw-r--r--lib/hkStubs/Havok/Common/Base/Memory/Allocator/hkMemoryAllocator.h7
-rw-r--r--lib/hkStubs/Havok/Common/Base/Object/hkBaseObject.h7
-rw-r--r--lib/hkStubs/Havok/Common/Base/Object/hkReferencedObject.cpp2
-rw-r--r--lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h3
-rw-r--r--lib/hkStubs/Havok/Common/Base/hkBase.h7
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>