4 #include "tableentry.h"
6 #include "mutableset.h"
9 Table::Table(Set **_domains, uint numDomain, Set *_range) :
10 domains(_domains, numDomain),
12 entries = new HashsetTableEntry();
15 void Table::addNewTableEntry(uint64_t *inputs, uint inputSize, uint64_t result) {
18 ASSERT(result == true || result == false);
20 TableEntry *tb = allocTableEntry(inputs, inputSize, result);
21 bool status = entries->add(tb);
25 TableEntry *Table::getTableEntry(uint64_t *inputs, uint inputSize) {
26 TableEntry *temp = allocTableEntry(inputs, inputSize, -1);
27 TableEntry *result = entries->get(temp);
28 deleteTableEntry(temp);
32 Table *Table::clone(CSolver *solver, CloneMap *map) {
33 Table *t = (Table *) map->get(this);
36 Set *array[domains.getSize()];
37 for (uint i = 0; i < domains.getSize(); i++) {
38 array[i] = domains.get(i)->clone(solver, map);
40 Set *rcopy = range != NULL ? range->clone(solver, map) : NULL;
41 t = solver->createTable(array, domains.getSize(), rcopy);
42 SetIteratorTableEntry *entryit = entries->iterator();
43 while (entryit->hasNext()) {
44 TableEntry *te = entryit->next();
45 solver->addTableEntry(t, &te->inputs[0], te->inputSize, te->output);
53 SetIteratorTableEntry *iterator = entries->iterator();
54 while (iterator->hasNext()) {
55 deleteTableEntry(iterator->next());