typedef Hashtable<intwrapper *, OrderRec *, uintptr_t, PTRSHIFT, iw_hash_function, iw_equals> HashtableIW;
typedef Hashtable<intwrapper *, Boolean *, uintptr_t, PTRSHIFT, iw_hash_function, iw_equals> HashtableBV;
-
+Vector<OrderRec*> * orderRecVector = NULL;
HashtableIW * ordertable = NULL;
HashtableBV * vartable = new HashtableBV();
+void cleanAndFreeOrderRecVector(){
+ for(uint i=0; i< orderRecVector->getSize(); i++){
+ delete orderRecVector->get(i);
+ }
+ orderRecVector->clear();
+}
+
int main(int numargs, char ** argv) {
file = new std::ifstream(argv[1]);
char * assert = NULL;
char * sat = NULL;
+ Vector<OrderRec*> orderRecs;
+ orderRecVector = &orderRecs;
while(true) {
int retval = skipahead(assertstart, satstart);
printf("%d\n", retval);
- if (retval == 0)
+ if (retval == 0){
break;
+ }
if (retval == 1) {
- if (assert != NULL)
+ if (assert != NULL){
free(assert);
+ assert = NULL;
+ }
assert = readuntilend(assertend);
printf("[%s]\n", assert);
} else if (retval == 2) {
if (sat != NULL) {
free(sat);
+ sat = NULL;
vartable->resetAndDeleteKeys();
- ordertable->resetAndDeleteVals();
+ ordertable->reset();
+ cleanAndFreeOrderRecVector();
} else {
ordertable = new HashtableIW();
}
sat = readuntilend(satend);
CSolver *solver = new CSolver();
+ solver->turnoffOptimizations();
set = solver->createMutableSet(1);
order = solver->createOrder(SATC_TOTAL, (Set *) set);
int offset = 0;
delete solver;
}
}
-
+
+ cleanAndFreeOrderRecVector();
+ if(ordertable != NULL){
+ delete ordertable;
+ }
+ if(assert != NULL){
+ free(assert);
+ }
+ if(sat != NULL){
+ free(sat);
+ }
+ vartable->resetAndDeleteKeys();
+ delete vartable;
file->close();
+ delete file;
}
void skipwhitespace(char * constraint, int & offset) {
if (r1 == r2) {
if (r1 == NULL) {
OrderRec * r = new OrderRec();
+ orderRecVector->push(r);
r->value = value1;
r->set = new HashsetIW();
intwrapper * k1 = new intwrapper(v1);
if (rec == NULL) {
intwrapper * k = new intwrapper(value);
rec = new OrderRec();
+ orderRecVector->push(rec);
rec->value = value;
+ rec->set = new HashsetIW();
+ rec->set->add(k);
ordertable->put(k, rec);
}
if (!rec->alloced) {