-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnc_system.cpp
More file actions
56 lines (44 loc) · 1.24 KB
/
Copy pathnc_system.cpp
File metadata and controls
56 lines (44 loc) · 1.24 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "nc_system.h"
u64 GLOBAL_UPDATE_TICK_INDEX = 0;
u64 ASYNC_THREADS_COUNT = 0;
Handle ASYNC_TICK_BEGIN_COND_VAR = EMPTY_HANDLE_VALUE;
Handle ASYNC_TICK_BEGIN_MTX = EMPTY_HANDLE_VALUE;
Handle ASYNC_TICK_END_MTX = EMPTY_HANDLE_VALUE;
b32 ASYNC_LOOP_REPEAT = FALSE;
b32 ASYNC_LOOP_REPEAT_HIGH_PRIORITY = FALSE;
b32 GLOBAL_ASYNC_EXIT = FALSE;
INTERNAL b32
operator==(Handle HndlA, Handle HndlB)
{
return (*HndlA.V == *HndlB.V);
}
INTERNAL b32
operator!=(Handle HndlA, Handle HndlB)
{
return (*HndlA.V != *HndlB.V);
}
INTERNAL void
ListPush(Arena* MemPool, HandleList* List, Handle Hndl)
{
HandleNode* Node = ArenaPushArrayZero(MemPool, HandleNode, 1);
Node->Value = Hndl;
SLL_QUEUE_PUSH(List->Head, List->Tail, Node);
++List->Count;
}
INTERNAL HandleArray
HandleArrayFromList(Arena* MemPool, HandleList* List)
{
HandleArray Result = {};
Result.Count = List->Count;
Result.Data = ArenaPushArray(MemPool, Handle, Result.Count);
u64 Index = 0;
for (HandleNode* Node = List->Head; Node; Node = Node->Next, ++Index)
Result.Data[Index] = Node->Value;
return Result;
}
INTERNAL u64
UpdateTickIndex(void)
{
u64 Result = AtomicLoadU64(&GLOBAL_UPDATE_TICK_INDEX, MEM_ORDER_SEQ_CST);
return Result;
}