diff options
Diffstat (limited to 'src/ThreadRole.hpp')
| -rw-r--r-- | src/ThreadRole.hpp | 30 |
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 |
