diff options
Diffstat (limited to 'deimos/core/base.h')
-rw-r--r-- | deimos/core/base.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/deimos/core/base.h b/deimos/core/base.h index 5cd3a40..70958a5 100644 --- a/deimos/core/base.h +++ b/deimos/core/base.h @@ -5,7 +5,13 @@ #define deimos_StaticAssert(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
-#define deimos_Panic(MSG) do { __builtin_trap(); } while (0)
+[[noreturn]]
+inline void deimos_Trap()
+{
+ __builtin_trap();
+}
+
+#define deimos_Panic(MSG) do { deimos_Trap(); } while (0)
#define deimos_NO_COPY(TYPE) \
TYPE(const TYPE&) = delete; \
@@ -78,6 +84,11 @@ constexpr void MemoryCopy(void* dst, const void* src, int64_t size) __builtin_memcpy(dst, src, (size_t)size);
}
+inline void MemoryZero(void* dst, int64_t size)
+{
+ __builtin_memset(dst, 0, (size_t)size);
+}
+
template<typename T, int64_t N>
constexpr int64_t ArraySize(const T (&)[N]) { return N; }
@@ -117,6 +128,12 @@ public: constexpr T* end() const { return m_begin + m_size; } // NOLINT
constexpr int64_t size() const { return m_size; }
constexpr bool empty() const { return m_size == 0; }
+
+ constexpr T& operator[](int64_t i) const
+ {
+ Expects(i >= 0 && i < m_size);
+ return m_begin[i]; // NOLINT
+ }
};
template<typename T>
|