std::cerr << "CPU Time Used : " << Minisat::cpuTime() << "s" << std::endl;
std::cerr << "Peak Memory Used: " << Minisat::memUsedPeak() << "MB" << std::endl;
+ clear();
- // iterator
}
void RunTimes::addTime(Category c, long milliseconds)
// Deleting it clears out all the buckets associated with hashmaps etc. too.
delete bvsolver;
bvsolver = new BVSolver(bm,simp);
+ auto_ptr<BVSolver> bvCleaner(bvsolver);
if(bm->UserFlags.stats_flag)
simp->printCacheStatus();
ClearAllTables();
delete bvsolver;
delete Ctr_Example;
- delete arrayTransformer;
+ delete arrayTransformer;
delete tosat;
delete simp;
- // delete bm;
+ delete bm;
}
/****************************************************************
return false;
} // End of IntroduceSymbolSet
-
-
bool VarSeenInTerm(const ASTNode& var, const ASTNode& term);
ASTNode NewParameterized_BooleanVar(const ASTNode& var,
// This is called before SAT solving, so only junk that isn't needed
// after SAT solving should be cleaned out.
- void ClearAllTables(void)
+ void ClearAllTables(void)
{
NodeLetVarMap.clear();
NodeLetVarMap1.clear();
} //End of ClearAllTables()
~STPMgr()
+ {}
+
+ // The ASTNodes are garbage collected. This object can only be deleted, when every node has been
+ // cleaned up already. Unfortunately, some references are remaining somewhere to nodes. The
+ // destructor will look like this.
+ void cleanup()
{
- ClearAllTables();
+ delete runTimes;
+ runTimes = NULL;
+ ASTFalse = ASTNode(0);
+ ASTTrue = ASTNode(0);
+ ASTUndefined = ASTNode(0);
+ _current_query = ASTNode(0);
+ dummy_node = ASTNode(0);
+
+ zeroes.clear();
+ ones.clear();
+ max.clear();
+
+ Introduced_SymbolsSet.clear();
+ NodeLetVarMap.clear();
+ NodeLetVarMap1.clear();
+ PLPrintNodeSet.clear();
+ AlreadyPrintedSet.clear();
+ StatInfoSet.clear();
+ TermsAlreadySeenMap.clear();
+ NodeLetVarVec.clear();
+ ListOfDeclaredVars.clear();
+ _symbol_unique_table.clear();
+
+ vector<IntToASTVecMap*>::iterator it = _asserts.begin();
+ vector<IntToASTVecMap*>::iterator itend = _asserts.end();
+ for(;it!=itend;it++)
+ {
+ IntToASTVecMap * j = (*it);
+ j->clear();
+ delete j;
+ }
+ _asserts.clear();
+
+ delete hashingNodeFactory;
+ }
+ /*
+ ClearAllTables();
vector<IntToASTVecMap*>::iterator it = _asserts.begin();
vector<IntToASTVecMap*>::iterator itend = _asserts.end();
CONSTANTBV::BitVector_Destroy(CreateBVConstVal);
delete hashingNodeFactory;
- }
+ */
+ //}
};//End of Class STPMgr
};//end of namespace
#endif
#include "../AST/NodeFactory/SimplifyingNodeFactory.h"
#include "../parser/ParserInterface.h"
#include <sys/time.h>
+#include <memory>
#ifdef EXT_HASH_MAP
STPMgr * bm = new STPMgr();
+
Simplifier * simp = new Simplifier(bm);
+ auto_ptr<Simplifier> simpCleaner(simp);
+
BVSolver* bvsolver = new BVSolver(bm, simp);
+
ArrayTransformer * arrayTransformer = new ArrayTransformer(bm, simp);
+ auto_ptr<ArrayTransformer> atClearner(arrayTransformer);
+
ToSAT * tosat = new ToSAT(bm);
- AbsRefine_CounterExample * Ctr_Example =
- new AbsRefine_CounterExample(bm, simp, arrayTransformer);
+ auto_ptr<ToSAT> tosatCleaner(tosat);
+
+ AbsRefine_CounterExample * Ctr_Example = new AbsRefine_CounterExample(bm, simp, arrayTransformer);
+ auto_ptr<AbsRefine_CounterExample> ctrCleaner(Ctr_Example);
+
itimerval timeout;
ParserBM = bm;
tosat,
Ctr_Example);
+
//populate the help string
helpstring +=
"STP version : " + version + "\n\n";
}
SOLVER_RETURN_TYPE ret = GlobalSTP->TopLevelSTP(asserts, query);
- if (bm->UserFlags.quick_statistics_flag)
+ if (bm->UserFlags.quick_statistics_flag)
{
bm->GetRunTimes()->print();
}
(GlobalSTP->tosat)->PrintOutput(ret);
+ AssertsQuery->clear();
delete AssertsQuery;
+ asserts = ASTNode();
+ query = ASTNode();
+ bm->cleanup();
+
+
return 0;
}//end of Main