-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbcValueStack.h
64 lines (57 loc) · 1.6 KB
/
bcValueStack.h
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
57
58
59
60
61
62
63
64
#pragma once
#ifndef DECI_SPACE_BADCODE_VALUE_STACK_HEADER
#define DECI_SPACE_BADCODE_VALUE_STACK_HEADER
/**
* Simple stack for BC_VALUE.
*/
typedef struct bcValueStack_t
{
size_t total; /**< Maximum stack size */
BC_VALUE* bottom; /**< First element in stack */
BC_VALUE* top; /**< Stack top */
} bcValueStack_t;
/**
* Initialize stack with of given size.
*
* @param[in] pStack pointer to stack structure to initialize
* @param[in] total total size of stack
*
* @return
* BC_INVALID_ARG - (pStack == NULL) or (total == NULL)
* BC_NO_MEMORY - if memory allocation failed
* BC_OK - stack allocated.
*/
bcStatus_t bcValueStackInit(bcValueStack_t* pStack, size_t total);
/**
* Cleanup given stack.
*
* @param[in] pStack pointer to stack to cleanup.
*
* @return
* BC_INVALID_ARG - if (pStack == NULL)
* BC_OK - stack memory cleaned.
*/
bcStatus_t bcValueStackCleanup(bcValueStack_t* pStack);
/**
* Push value on stack.
*
* If function completed successfully, memory of pushed value is now owned by stack.
*
* @param[in] pStack pointer to valid stack
* @param[in] value value to push on stack
*
* @return
* BC_INVALID_ARG - if (pStack == NULL) || (value == NULL)
* BC_OVERFLOW - if total stack size exceeded.
* BC_OK - new value added to stack
*/
bcStatus_t bcValueStackPush(bcValueStack_t* pStack, const BC_VALUE value);
/**
* Pop value from stack.
*
* @param[in] pStack pointer to valid stack
*
* @return BC_OK if no erros, error code otherwise
*/
bcStatus_t bcValueStackPop(bcValueStack_t* pStack);
#endif /* DECI_SPACE_BADCODE_VALUE_STACK_HEADER */