summary refs log tree commit diff
path: root/src/ThreadRole.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ThreadRole.hpp')
-rw-r--r--src/ThreadRole.hpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ThreadRole.hpp b/src/ThreadRole.hpp
new file mode 100644
index 0000000..4c668e5
--- /dev/null
+++ b/src/ThreadRole.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "Common/Assert.hpp"
+
+namespace MC {
+
+enum class ThreadRole {
+    None,
+    Logic,
+    Render,
+    Worker
+};
+
+// Hide the global from direct access
+namespace ThreadRoleDetail {
+    thread_local inline ThreadRole g_thread_role = ThreadRole::None;
+}
+
+#define THREAD_ROLE (MC::ThreadRoleDetail::g_thread_role)
+
+#define HELLO_I_AM(role) do { \
+    ASSERT(THREAD_ROLE == MC::ThreadRole::None, "Thread role already set"); \
+    THREAD_ROLE = (role); \
+} while (0)
+
+#define ASSERT_MAIN_THREAD() ASSERT(THREAD_ROLE == MC::ThreadRole::Logic, "Thread is not main")
+#define ASSERT_THREAD_IS(role) ASSERT(THREAD_ROLE == (role), "Thread role mismatch")
+#define ASSERT_THREAD_IS_NOT(role) ASSERT(THREAD_ROLE != (role), "Thread role mismatch")
+
+}
\ No newline at end of file