6 FunctionOperator::FunctionOperator(ArithOp _op, Set **domain, uint numDomain, Set *_range, OverFlowBehavior _overflowbehavior) : Function(OPERATORFUNC), op(_op), domains(domain, numDomain), range(_range), overflowbehavior(_overflowbehavior) {
9 FunctionTable::FunctionTable (Table *_table, UndefinedBehavior _undefBehavior) : Function(TABLEFUNC), table(_table), undefBehavior(_undefBehavior) {
12 uint64_t FunctionOperator::applyFunctionOperator(uint numVals, uint64_t *values) {
16 return values[0] + values[1];
19 return values[0] - values[1];
26 bool FunctionOperator::isInRangeFunction(uint64_t val) {
27 return range->exists(val);
30 Function *FunctionOperator::clone(CSolver *solver, CloneMap *map) {
31 Function *f = (Function *) map->get(this);
35 Set *array[domains.getSize()];
36 for (uint i = 0; i < domains.getSize(); i++) {
37 array[i] = domains.get(i)->clone(solver, map);
39 Set *rcopy = range->clone(solver, map);
40 f = solver->createFunctionOperator(op, array, domains.getSize(), rcopy, overflowbehavior);
45 Function *FunctionTable::clone(CSolver *solver, CloneMap *map) {
46 Function *f = (Function *) map->get(this);
50 Table *tcopy = table->clone(solver, map);
51 f = solver->completeTable(tcopy, undefBehavior);