Added spec:commit task to commit changes to spec/ruby sources.
[rbx.git] / shotgun / lib / var_table.c
blob18eb4b15066180543744ee6a46dc6e237f8a3706
1 #include <stdlib.h>
2 #include <assert.h>
4 #include "shotgun/lib/shotgun.h"
5 #include "shotgun/lib/var_table.h"
7 /* max number of vars, made up. */
8 #define DATA_MAX 128
10 struct var_table_t {
11 struct var_table_t *next;
12 int size;
13 quark data[DATA_MAX];
16 var_table var_table_create() {
17 var_table vt = ALLOC(struct var_table_t);
18 vt->size = 0;
19 vt->next = NULL;
20 return vt;
23 void var_table_destroy(var_table vt) {
24 while (vt) {
25 var_table cur = vt;
26 vt = vt->next;
28 XFREE(cur);
32 var_table var_table_push(var_table cur) {
33 var_table vt = var_table_create();
34 vt->next = cur;
35 return vt;
38 var_table var_table_pop(var_table cur) {
39 var_table nw;
41 nw = cur->next;
42 XFREE(cur);
43 return nw;
46 int var_table_find(const var_table tbl, const quark needle) {
47 int i;
48 for(i = 0; i < tbl->size; i++) {
49 if(tbl->data[i] == needle) return i;
51 return -1;
54 int var_table_add(var_table tbl, const quark item) {
55 int idx;
56 idx = tbl->size;
57 assert(idx < DATA_MAX);
58 tbl->data[idx] = item;
59 tbl->size++;
60 return idx;
63 int var_table_size(const var_table tbl)
65 return tbl->size;
68 quark var_table_get(const var_table tbl, const int index)
70 assert(index < tbl->size);
71 return tbl->data[index];