+Function *FunctionOperator::clone(CSolver *solver, CloneMap *map) {
+ Function *f = (Function *) map->get(this);
+ if (f != NULL)
+ return f;
+
+ Set *array[domains.getSize()];
+ for (uint i = 0; i < domains.getSize(); i++) {
+ array[i] = domains.get(i)->clone(solver, map);
+ }
+ Set *rcopy = range->clone(solver, map);
+ f = solver->createFunctionOperator(op, array, domains.getSize(), rcopy, overflowbehavior);
+ map->put(this, f);
+ return f;
+}
+
+Function *FunctionTable::clone(CSolver *solver, CloneMap *map) {
+ Function *f = (Function *) map->get(this);
+ if (f != NULL)
+ return f;
+
+ Table *tcopy = table->clone(solver, map);
+ f = solver->completeTable(tcopy, undefBehavior);
+ map->put(this, f);
+ return f;
+}