7 #include "functionencoding.h"
8 #include "elementencoding.h"
11 class Element : public ASTNode {
13 Element(ASTNodeType type);
15 Vector<ASTNode *> parents;
16 ElementEncoding encoding;
17 inline ElementEncoding *getElementEncoding() { return &encoding; }
18 virtual Element *clone(CSolver *solver, CloneMap *map) {ASSERT(0); return NULL;};
19 virtual void serialize(Serializer *serializer) = 0;
20 virtual void print() = 0;
21 virtual void updateParents() {}
22 virtual Set *getRange() = 0;
27 class ElementSet : public Element {
29 ElementSet(ASTNodeType type, Set *s);
30 virtual ~ElementSet() {}
32 virtual Element *clone(CSolver *solver, CloneMap *map);
33 virtual void serialize(Serializer *serializer);
36 Set *getRange() {return set;}
39 friend class ElementOpt;
42 class ElementConst : public ElementSet {
44 ElementConst(uint64_t value, Set *_set);
45 virtual ~ElementConst() {}
47 virtual void serialize(Serializer *serializer);
49 Element *clone(CSolver *solver, CloneMap *map);
53 class ElementFunction : public Element {
55 virtual ~ElementFunction() {}
56 ElementFunction(Function *function, Element **array, uint numArrays, BooleanEdge overflowstatus);
57 Array<Element *> inputs;
58 BooleanEdge overflowstatus;
59 FunctionEncoding functionencoding;
60 Element *clone(CSolver *solver, CloneMap *map);
61 virtual void serialize(Serializer *serializer);
65 Function *getFunction() {return function;}
66 inline FunctionEncoding *getElementFunctionEncoding() {return &functionencoding;}