Big Tabbing Change
[satune.git] / src / AST / table.c
1 #include "table.h"
2 #include "common.h"
3 #include "structs.h"
4 #include "tableentry.h"
5 #include "set.h"
6 #include "mutableset.h"
7
8 Table *allocTable(Set **domains, uint numDomain, Set *range) {
9         Table *This = (Table *) ourmalloc(sizeof(Table));
10         initArrayInitSet(&This->domains, domains, numDomain);
11         This->entries = allocHashSetTableEntry(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
12         This->range = range;
13         return This;
14 }
15
16 void addNewTableEntry(Table *This, uint64_t *inputs, uint inputSize, uint64_t result) {
17         ASSERT(getSizeArraySet( &This->domains) == inputSize);
18 #ifdef CONFIG_ASSERT
19         if (This->range == NULL)
20                 ASSERT(result == true || result == false);
21 #endif
22         TableEntry *tb = allocTableEntry(inputs, inputSize, result);
23         ASSERT(!containsHashSetTableEntry(This->entries, tb));
24         bool status = addHashSetTableEntry(This->entries, tb);
25         ASSERT(status);
26 }
27
28 TableEntry *getTableEntryFromTable(Table *table, uint64_t *inputs, uint inputSize) {
29         TableEntry *temp = allocTableEntry(inputs, inputSize, -1);
30         TableEntry *result = getHashSetTableEntry(table->entries, temp);
31         deleteTableEntry(temp);
32         return result;
33 }
34
35 void deleteTable(Table *This) {
36         deleteInlineArraySet(&This->domains);
37         HSIteratorTableEntry *iterator = iteratorTableEntry(This->entries);
38         while (hasNextTableEntry(iterator)) {
39                 deleteTableEntry( nextTableEntry(iterator) );
40         }
41         deleteIterTableEntry(iterator);
42         deleteHashSetTableEntry(This->entries);
43         ourfree(This);
44 }
45