+class ElementConst : public Element {
+public:
+ ElementConst(uint64_t value, VarType type, Set *_set);
+ Set *set;
+ uint64_t value;
+ Element *clone(CSolver *solver, CloneMap *map);
+ CMEMALLOC;
+};
+
+class ElementSet : public Element {
+public:
+ ElementSet(Set *s);
+ Set *set;
+ Element *clone(CSolver *solver, CloneMap *map);
+ CMEMALLOC;
+};
+
+class ElementFunction : public Element {
+public:
+ ElementFunction(Function *function, Element **array, uint numArrays, BooleanEdge overflowstatus);
+ Function *function;
+ Array<Element *> inputs;
+ BooleanEdge overflowstatus;
+ FunctionEncoding functionencoding;
+ Element *clone(CSolver *solver, CloneMap *map);
+ void updateParents();
+ CMEMALLOC;
+};
+
+Set *getElementSet(Element *This);
+
+static inline ElementEncoding *getElementEncoding(Element *e) {
+ return &e->encoding;
+}
+
+static inline FunctionEncoding *getElementFunctionEncoding(ElementFunction *func) {
+ return &func->functionencoding;
+}