1 #include "naiveencoder.h"
2 #include "elementencoding.h"
4 #include "functionencoding.h"
12 #include "tableentry.h"
16 void naiveEncodingDecision(CSolver *This) {
17 HSIteratorBoolean *iterator=This->getConstraints();
18 while(iterator->hasNext()) {
19 Boolean *boolean = iterator->next();
20 naiveEncodingConstraint(boolean);
25 void naiveEncodingConstraint(Boolean *This) {
26 switch (GETBOOLEANTYPE(This)) {
31 ((BooleanOrder *) This)->order->setOrderEncodingType(PAIRWISE);
35 naiveEncodingLogicOp((BooleanLogic *) This);
39 naiveEncodingPredicate((BooleanPredicate *) This);
47 void naiveEncodingLogicOp(BooleanLogic *This) {
48 for (uint i = 0; i < This->inputs.getSize(); i++) {
49 naiveEncodingConstraint(This->inputs.get(i));
53 void naiveEncodingPredicate(BooleanPredicate *This) {
54 FunctionEncoding *encoding = This->getFunctionEncoding();
55 if (encoding->getFunctionEncodingType() == FUNC_UNASSIGNED)
56 This->getFunctionEncoding()->setFunctionEncodingType(ENUMERATEIMPLICATIONS);
58 for (uint i = 0; i < This->inputs.getSize(); i++) {
59 Element *element = This->inputs.get(i);
60 naiveEncodingElement(element);
64 void naiveEncodingElement(Element *This) {
65 ElementEncoding *encoding = getElementEncoding(This);
66 if (encoding->getElementEncodingType() == ELEM_UNASSIGNED) {
67 encoding->setElementEncodingType(BINARYINDEX);
68 encoding->encodingArrayInitialization();
71 if (GETELEMENTTYPE(This) == ELEMFUNCRETURN) {
72 ElementFunction *function = (ElementFunction *) This;
73 for (uint i = 0; i < function->inputs.getSize(); i++) {
74 Element *element = function->inputs.get(i);
75 naiveEncodingElement(element);
77 FunctionEncoding *encoding = getElementFunctionEncoding(function);
78 if (encoding->getFunctionEncodingType() == FUNC_UNASSIGNED)
79 getElementFunctionEncoding(function)->setFunctionEncodingType(ENUMERATEIMPLICATIONS);