14 struct tab
*tab_alloc(int sz
)
16 struct tab
*tab
= malloc(sizeof(*tab
));
18 memset(tab
, 0, sizeof(*tab
));
19 tab
->keys
= malloc(sz
* sizeof(tab
->keys
[0]));
20 tab
->vals
= malloc(sz
* sizeof(tab
->vals
[0]));
21 tab
->next
= malloc(sz
* sizeof(tab
->next
[0]));
22 for (i
= 0; i
< 256; i
++)
27 void tab_free(struct tab
*tab
)
35 void tab_put(struct tab
*tab
, char *k
, void *v
)
37 tab
->keys
[tab
->n
] = k
;
38 tab
->vals
[tab
->n
] = v
;
39 tab
->next
[tab
->n
] = tab
->head
[(unsigned char) k
[0]];
40 tab
->head
[(unsigned char) k
[0]] = tab
->n
;
44 void *tab_get(struct tab
*tab
, char *k
)
46 int i
= tab
->head
[(unsigned char) k
[0]];
48 if (k
[1] == tab
->keys
[i
][1] && !strcmp(k
, tab
->keys
[i
]))