-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCirEnumItem.c
53 lines (42 loc) · 1.07 KB
/
CirEnumItem.c
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
#include "cir_internal.h"
#include <assert.h>
#define MAX_ENUM_ITEMS (1024 * 4)
typedef struct CirEnumItem {
CirName name;
int64_t value;
} CirEnumItem;
static CirEnumItem enumItems[MAX_ENUM_ITEMS];
static uint32_t numEnumItems = 1;
CirEnumItemId
CirEnumItem_new(CirName name)
{
if (!name)
cir_bug("CirEnumItem_new: name must be non-zero");
if (numEnumItems >= MAX_ENUM_ITEMS)
cir_bug("too many enum items");
CirEnumItemId enumItemId = numEnumItems++;
enumItems[enumItemId].name = name;
enumItems[enumItemId].value = 0;
return enumItemId;
}
CirName
CirEnumItem_getName(CirEnumItemId enumItemId)
{
assert(enumItemId);
assert(enumItemId < numEnumItems);
return enumItems[enumItemId].name;
}
int64_t
CirEnumItem_getI64(CirEnumItemId enumItemId)
{
assert(enumItemId);
assert(enumItemId < numEnumItems);
return enumItems[enumItemId].value;
}
void
CirEnumItem_setI64(CirEnumItemId enumItemId, int64_t value)
{
assert(enumItemId);
assert(enumItemId < numEnumItems);
enumItems[enumItemId].value = value;
}