blob: 4c668e52aa3d6bc5fd99990099f7444f1c1ee93d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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")
}
|