Adding checks to avoid further processing on UNSAT Problems
[satune.git] / src / ASTTransform / varorderingopt.cc
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6
7 /*
8  * File:   VarOrderingOpt.cpp
9  * Author: hamed
10  *
11  * Created on October 11, 2018, 5:31 PM
12  */
13
14 #include "varorderingopt.h"
15 #include "csolver.h"
16 #include "tunable.h"
17 #include "satencoder.h"
18 #include "elementencoding.h"
19 #include "element.h"
20
21 VarOrderingOpt::VarOrderingOpt(CSolver *_solver, SATEncoder *_satencoder) : Transform(_solver) {
22         satencoder = _satencoder;
23 }
24
25 VarOrderingOpt::~VarOrderingOpt() {
26 }
27
28 void VarOrderingOpt::doTransform() {
29         if(solver->isUnSAT()){
30                 return;
31         }
32         BooleanVarOrdering direction = (BooleanVarOrdering)solver->getTuner()->getTunable(VARIABLEORDER, &boolVarOrderingDesc);
33         if ( direction == CONSTRAINTORDERING ) {
34                 return;
35         }
36
37         uint size = solver->allElements.getSize();
38         if (direction == ELEMENTORDERING) {
39                 for (uint i = 0; i < size; i++) {
40                         Element *el = solver->allElements.get(i);
41                         ElementEncoding *encoding = el->getElementEncoding();
42                         if (encoding->getElementEncodingType() == ELEM_UNASSIGNED)
43                                 continue;
44                         satencoder->encodeElementSATEncoder(el);
45                 }
46         } else {
47                 for (int i = size - 1; i > 0; i--) {
48                         Element *el = solver->allElements.get(i);
49                         ElementEncoding *encoding = el->getElementEncoding();
50                         if (encoding->getElementEncodingType() == ELEM_UNASSIGNED)
51                                 continue;
52                         satencoder->encodeElementSATEncoder(el);
53                 }
54         }
55 }