/
AsyncStack.cpp
48 lines (36 loc) · 966 Bytes
/
AsyncStack.cpp
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
#include "AsyncStack.h"
AsyncStack* AsyncStack_New(uint64 size) {
AsyncStack* stack;
stack = Allocate(AsyncStack);
AsyncStack_Initialize(stack, size);
return stack;
}
void AsyncStack_Initialize(AsyncStack* stack, uint64 size) {
assert(stack != NULL);
stack->BaseStack = Stack_New(size);
stack->Lock = SAL_Mutex_Create();
}
void AsyncStack_Free(AsyncStack* self) {
assert(self != NULL);
AsyncStack_Uninitialize(self);
Free(self);
}
void AsyncStack_Uninitialize(AsyncStack* self) {
assert(self != NULL);
Stack_Free(self->BaseStack);
SAL_Mutex_Free(&self->Lock);
}
void AsyncStack_Push(AsyncStack* self, void* value) {
assert(self != NULL);
SAL_Mutex_Acquire(self->Lock);
Stack_Push(self->BaseStack, value);
SAL_Mutex_Release(self->Lock);
}
void* AsyncStack_Pop(AsyncStack* self) {
void* result;
assert(self != NULL);
SAL_Mutex_Acquire(self->Lock);
result = Stack_Pop(self->BaseStack);
SAL_Mutex_Release(self->Lock);
return result;
}