summary refs log tree commit diff
path: root/src/ThreadRole.hpp
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")

}