diff options
| author | Léo Lam <leo@leolam.fr> | 2021-12-16 00:30:22 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2021-12-16 00:30:51 +0100 |
| commit | dbbc835ca275b6c8623e6adcaa8cd5e85e9d6aea (patch) | |
| tree | 105298f8ed92e6304b4e8efd38de1098e85484fc /lib | |
| parent | fb8f0c636eeb77d407c32930b458f769e187d4b4 (diff) | |
Havok: Add hkEnum and hkFlags
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/hkStubs/.clang-tidy | 3 | ||||
| -rw-r--r-- | lib/hkStubs/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | lib/hkStubs/Havok/Common/Base/Types/hkBaseDefs.h | 5 | ||||
| -rw-r--r-- | lib/hkStubs/Havok/Common/Base/Types/hkBaseTypes.h | 56 | ||||
| -rw-r--r-- | lib/hkStubs/Havok/Common/Base/hkBase.h | 1 |
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> |
