summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2021-12-16 00:30:22 +0100
committerLéo Lam <leo@leolam.fr>2021-12-16 00:30:51 +0100
commitdbbc835ca275b6c8623e6adcaa8cd5e85e9d6aea (patch)
tree105298f8ed92e6304b4e8efd38de1098e85484fc /lib
parentfb8f0c636eeb77d407c32930b458f769e187d4b4 (diff)
Havok: Add hkEnum and hkFlags
Diffstat (limited to 'lib')
-rw-r--r--lib/hkStubs/.clang-tidy3
-rw-r--r--lib/hkStubs/CMakeLists.txt1
-rw-r--r--lib/hkStubs/Havok/Common/Base/Types/hkBaseDefs.h5
-rw-r--r--lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h56
-rw-r--r--lib/hkStubs/Havok/Common/Base/hkBase.h1
5 files changed, 66 insertions, 0 deletions
diff --git a/lib/hkStubs/.clang-tidy b/lib/hkStubs/.clang-tidy
new file mode 100644
index 00000000..31a44c37
--- /dev/null
+++ b/lib/hkStubs/.clang-tidy
@@ -0,0 +1,3 @@
+---
+InheritParentConfig: true
+Checks: "-modernize-use-equals-default"
diff --git a/lib/hkStubs/CMakeLists.txt b/lib/hkStubs/CMakeLists.txt
index c6c2dead..b81a1684 100644
--- a/lib/hkStubs/CMakeLists.txt
+++ b/lib/hkStubs/CMakeLists.txt
@@ -2,6 +2,7 @@ project(hkStubs CXX ASM)
add_library(hkStubs OBJECT
Havok/Common/Base/Container/String/hkStringPtr.h
+ Havok/Common/Base/Types/hkBaseDefs.h
Havok/Common/Base/Types/hkBaseTypes.h
Havok/Common/Base/hkBase.h
Havok/Common/Base/Math/hkMath.h
diff --git a/lib/hkStubs/Havok/Common/Base/Types/hkBaseDefs.h b/lib/hkStubs/Havok/Common/Base/Types/hkBaseDefs.h
new file mode 100644
index 00000000..c8e55687
--- /dev/null
+++ b/lib/hkStubs/Havok/Common/Base/Types/hkBaseDefs.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#define HK_FORCE_INLINE inline
+#define HK_ALWAYS_INLINE HK_FORCE_INLINE
+#define HK_NEVER_INLINE __attribute__((noinline))
diff --git a/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h b/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h
index 9e7752e6..5a7018b8 100644
--- a/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h
+++ b/lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h
@@ -62,3 +62,59 @@ public:
private:
hkInt16 m_value;
};
+
+/// For storing an enum with a particular storage size when specifying the underlying type of the
+/// enum is not an option.
+template <typename Enum, typename Storage>
+struct hkEnum {
+ HK_ALWAYS_INLINE hkEnum() {}
+
+ hkEnum(Enum value) { *this = value; } // NOLINT(google-explicit-constructor)
+
+ // NOLINTNEXTLINE(google-explicit-constructor)
+ operator Enum() const { return static_cast<Enum>(m_storage); }
+
+ hkEnum& operator=(Enum value) {
+ m_storage = static_cast<Storage>(value);
+ return *this;
+ }
+
+ bool operator==(Enum e) const { return m_storage == static_cast<Storage>(e); }
+ bool operator!=(Enum e) const { return m_storage != static_cast<Storage>(e); }
+
+ Storage m_storage;
+};
+
+template <typename, typename Storage>
+class hkFlags {
+public:
+ HK_FORCE_INLINE hkFlags() {}
+ HK_FORCE_INLINE explicit hkFlags(Storage s) : m_storage(s) {}
+
+ HK_FORCE_INLINE void clear() { m_storage = 0; }
+ HK_FORCE_INLINE void clear(Storage mask) { m_storage &= ~mask; }
+ HK_FORCE_INLINE void setAll(Storage s) { m_storage = s; }
+
+ HK_FORCE_INLINE void operator|=(Storage s) { m_storage |= s; }
+ HK_FORCE_INLINE void operator^=(Storage s) { m_storage ^= s; }
+ HK_FORCE_INLINE void operator&=(Storage s) { m_storage &= s; }
+
+ HK_FORCE_INLINE void setWithMask(Storage s, Storage mask) {
+ m_storage = (m_storage & ~mask) | (s & mask);
+ }
+
+ HK_FORCE_INLINE Storage get() const { return m_storage; }
+ HK_FORCE_INLINE bool anyIsSet(Storage mask) const { return (m_storage & mask) != 0; }
+ HK_FORCE_INLINE bool noneIsSet(Storage mask) const { return (m_storage & mask) == 0; }
+ HK_FORCE_INLINE bool allAreSet(Storage mask) const { return (m_storage & mask) == mask; }
+
+ HK_FORCE_INLINE bool operator==(const hkFlags& other) const {
+ return other.m_storage == m_storage;
+ }
+ HK_FORCE_INLINE bool operator!=(const hkFlags& other) const {
+ return other.m_storage != m_storage;
+ }
+
+private:
+ Storage m_storage;
+};
diff --git a/lib/hkStubs/Havok/Common/Base/hkBase.h b/lib/hkStubs/Havok/Common/Base/hkBase.h
index ddb7b42b..c79c768a 100644
--- a/lib/hkStubs/Havok/Common/Base/hkBase.h
+++ b/lib/hkStubs/Havok/Common/Base/hkBase.h
@@ -2,6 +2,7 @@
#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/Math/hkMath.h>