return *this;
}
- void resize(uint _size)
+ void resize(uint _size, const bool fill)
{
_size = _size/64 + (bool)(_size%64);
if (size != _size) {
size = _size;
mp = new uint64_t[size];
}
+ if (fill) setOne();
+ else setZero();
}
~BitArray()
{
memset(mp, 0, size*sizeof(uint64_t));
}
+
+ inline void setOne()
+ {
+ memset(mp, 0, size*sizeof(uint64_t));
+ }
inline void clearBit(const uint i)
{
#include "ClauseCleaner.h"
#include "time_mem.h"
#include "VarReplacer.h"
+#include "ClauseCleaner.h"
-//#define FINDBINARYXOR
+//#define VERBOSE_DEUBUG
namespace MINISAT
{
uint32_t i = 0;
for (XorClause * const*it = cs.getData(), * const*end = it + cs.size(); it != end; it++, i++) {
if (it+1 != end)
- __builtin_prefetch(*(it+1), 1, 1);
+ __builtin_prefetch(*(it+1), 0, 0);
const XorClause& cl = **it;
xorClauseSizes[i] = cl.size();
}
}
+ #ifdef VERBOSE_DEUBUG
+ if (num != 2) {
+ std::cout << "Num:" << num << std::endl;
+ c.plainPrint();
+ }
+ #endif
+
std::sort(&tmp.var[0], &tmp.var[0]+2);
assert(num == 2);
return tmp;
//For BothSame
BitArray propagated;
- propagated.resize(solver.nVars());
+ propagated.resize(solver.nVars(), 0);
BitArray propValue;
- propValue.resize(solver.nVars());
+ propValue.resize(solver.nVars(), 0);
vector<pair<Var, bool> > bothSame;
//For 2-long xor (rule 6 of Equivalent literal propagation in the DLL procedure by Chu-Min Li)
solver.order_heap.size() > 30000 ||
solver.nClauses() > 100000)
binXorFind = false;
- if (binXorFind) addFromSolver(solver.xorclauses);
- xorClauseTouched.resize(solver.xorclauses.size());
+ if (binXorFind) {
+ solver.clauseCleaner->cleanClauses(solver.xorclauses, ClauseCleaner::xorclauses);
+ addFromSolver(solver.xorclauses);
+ }
+ xorClauseTouched.resize(solver.xorclauses.size(), 0);
finishedLastTime = true;
lastTimeWentUntil = solver.nVars();
}
if (binXorFind) {
- for (uint32_t *it = investigateXor.getData(), *end = it + investigateXor.size(); it != end; it++) {
+ for (uint32_t *it = investigateXor.getData(), *end = investigateXor.getDataEnd(); it != end; it++) {
if (xorClauseSizes[*it] == 2)
twoLongXors.insert(getTwoLongXor(*solver.xorclauses[*it]));
}
largest_used_var = i;
var_to_col.resize(largest_used_var + 1);
- var_is_in.resize(var_to_col.size());
- var_is_in.setZero();
- origMat.var_is_set.resize(var_to_col.size());
- origMat.var_is_set.setZero();
+ var_is_in.resize(var_to_col.size(), 0);
+ origMat.var_is_set.resize(var_to_col.size(), 0);
origMat.col_to_var.clear();
Heap<Solver::VarOrderLt> order_heap(solver.order_heap);
}
// Adds the new clause group's name to the information stored
-void Logger::set_group_name(const uint group, string name)
+void Logger::set_group_name(const uint group, char* name_tmp)
{
if (!statistics_on && !proof_graph_on)
return;
+ string name;
+ if (name_tmp == NULL)
+ name = "";
+ else
+ name = name_tmp;
+
new_group(group);
cut_name_to_size(name);
}
// sets the variable's name
-void Logger::set_variable_name(const uint var, string name)
+void Logger::set_variable_name(const uint var, char* name_tmp)
{
if (!statistics_on && !proof_graph_on)
return;
new_var(var);
+
+ string name;
+ if (name_tmp == NULL)
+ name = "";
+ else
+ name = name_tmp;
+
cut_name_to_size(name);
if (varnames[var] == "Noname") {
//functions to add/name variables
void new_var(const Var var);
- void set_variable_name(const uint var, string name);
+ void set_variable_name(const uint var, char* name_tmp);
//function to name clause groups
- void set_group_name(const uint group, string name);
+ void set_group_name(const uint group, char* name_tmp);
void begin();
void end(const finish_type finish);
//
Var newVar (bool dvar = true); // Add a new variable with parameters specifying variable mode.
template<class T>
- bool addClause (T& ps, const uint group = 0, char* group_name = ""); // Add a clause to the solver. NOTE! 'ps' may be shrunk by this method!
+ bool addClause (T& ps, const uint group = 0, char* group_name = NULL); // Add a clause to the solver. NOTE! 'ps' may be shrunk by this method!
template<class T>
- bool addXorClause (T& ps, bool xor_clause_inverted, const uint group = 0, char* group_name = ""); // Add a xor-clause to the solver. NOTE! 'ps' may be shrunk by this method!
+ bool addXorClause (T& ps, bool xor_clause_inverted, const uint group = 0, char* group_name = NULL); // Add a xor-clause to the solver. NOTE! 'ps' may be shrunk by this method!
// Solving:
//
double myTime = cpuTime();
BitArray inside;
- inside.resize(solver.nVars()*2);
+ inside.resize(solver.nVars()*2, 0);
uint32_t hyperBinAdded = 0;
uint32_t hyperBinUnitary = 0;
vec<ClauseSimp> addToClauses;
CryptoMiniSat
-GIT revision: 1d73485d3a23121ac2d9c5cf4732f0a914018fec
+GIT revision: fb3f0713d5864d50cae28535b577fb74fd65899c
+