本文整理汇总了C++中Watched::getType方法的典型用法代码示例。如果您正苦于以下问题:C++ Watched::getType方法的具体用法?C++ Watched::getType怎么用?C++ Watched::getType使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Watched
的用法示例。
在下文中一共展示了Watched::getType方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: cl_size
size_t CNF::cl_size(const Watched& ws) const
{
switch(ws.getType()) {
case watch_binary_t:
return 2;
case CMSat::watch_tertiary_t:
return 3;
case watch_clause_t: {
const Clause* cl = cl_alloc.ptr(ws.get_offset());
return cl->size();
}
default:
assert(false);
return 0;
}
}
示例2: watched_to_string
string CNF::watched_to_string(Lit otherLit, const Watched& ws) const
{
std::stringstream ss;
switch(ws.getType()) {
case watch_binary_t:
ss << otherLit << ", " << ws.lit2();
if (ws.red()) {
ss << "(red)";
}
break;
case CMSat::watch_tertiary_t:
ss << otherLit << ", " << ws.lit2() << ", " << ws.lit3();
if (ws.red()) {
ss << "(red)";
}
break;
case watch_clause_t: {
const Clause* cl = cl_alloc.ptr(ws.get_offset());
for(size_t i = 0; i < cl->size(); i++) {
ss << (*cl)[i];
if (i + 1 < cl->size())
ss << ", ";
}
if (cl->red()) {
ss << "(red)";
}
break;
}
default:
assert(false);
break;
}
return ss.str();
}
示例3: cl_size
size_t CNF::cl_size(const Watched& ws) const
{
switch(ws.getType()) {
case watch_binary_t:
return 2;
break;
case CMSat::watch_tertiary_t:
return 3;
break;
case watch_clause_t: {
const Clause* cl = clAllocator.getPointer(ws.getOffset());
return cl->size();
break;
}
default:
assert(false);
return 0;
break;
}
}
示例4: for_one_clause
void FeaturesCalc::for_one_clause(
const Watched& cl
, const Lit lit
, Function func_each_cl
, Function2 func_each_lit
) const {
unsigned neg_vars = 0;
unsigned pos_vars = 0;
unsigned size = 0;
switch (cl.getType()) {
case CMSat::watch_binary_t: {
if (cl.red()) {
//only irred cls
break;
}
if (lit > cl.lit2()) {
//only count once
break;
}
pos_vars += !lit.sign();
pos_vars += !cl.lit2().sign();
size = 2;
neg_vars = size - pos_vars;
func_each_cl(size, pos_vars, neg_vars);
func_each_lit(lit, size, pos_vars, neg_vars);
func_each_lit(cl.lit2(), size, pos_vars, neg_vars);
break;
}
case CMSat::watch_tertiary_t: {
if (cl.red()) {
//only irred cls
break;
}
if (lit > cl.lit2()) {
//only count once
break;
}
assert(cl.lit2() < cl.lit3());
pos_vars += !lit.sign();
pos_vars += !cl.lit2().sign();
pos_vars += !cl.lit3().sign();
size = 3;
neg_vars = size - pos_vars;
func_each_cl(size, pos_vars, neg_vars);
func_each_lit(lit, size, pos_vars, neg_vars);
func_each_lit(cl.lit2(), size, pos_vars, neg_vars);
func_each_lit(cl.lit3(), size, pos_vars, neg_vars);
break;
}
case CMSat::watch_clause_t: {
const Clause& clause = *solver->cl_alloc.ptr(cl.get_offset());
if (clause.red()) {
//only irred cls
break;
}
if (clause[0] < clause[1]) {
//only count once
break;
}
for (const Lit cl_lit : clause) {
pos_vars += !cl_lit.sign();
}
size = clause.size();
neg_vars = size - pos_vars;
func_each_cl(size, pos_vars, neg_vars);
for (const Lit cl_lit : clause) {
func_each_lit(cl_lit, size, pos_vars, neg_vars);
}
break;
}
case CMSat::watch_idx_t: {
// This should never be here
assert(false);
exit(-1);
break;
}
}
}
示例5: subsume_implicit
void SubsumeImplicit::subsume_implicit(const bool check_stats)
{
assert(solver->okay());
const double myTime = cpuTime();
const uint64_t orig_timeAvailable =
1000LL*1000LL*solver->conf.subsume_implicit_time_limitM
*solver->conf.global_timeout_multiplier;
timeAvailable = orig_timeAvailable;
const bool doStamp = solver->conf.doStamp;
runStats.clear();
//For randomization, we must have at least 1
if (solver->watches.size() == 0) {
return;
}
//Randomize starting point
const size_t rnd_start = solver->mtrand.randInt(solver->watches.size()-1);
size_t numDone = 0;
for (;numDone < solver->watches.size() && timeAvailable > 0 && !solver->must_interrupt_asap()
;numDone++
) {
const size_t at = (rnd_start + numDone) % solver->watches.size();
runStats.numWatchesLooked++;
const Lit lit = Lit::toLit(at);
watch_subarray ws = solver->watches[lit.toInt()];
//We can't do much when there is nothing, or only one
if (ws.size() < 2)
continue;
if (ws.size() > 1) {
timeAvailable -= ws.size()*std::ceil(std::log((double)ws.size())) + 20;
std::sort(ws.begin(), ws.end(), WatchSorterBinTriLong());
}
/*cout << "---> Before" << endl;
print_watch_list(ws, lit);*/
Watched* i = ws.begin();
Watched* j = i;
clear();
for (Watched* end = ws.end(); i != end; i++) {
if (timeAvailable < 0) {
*j++ = *i;
continue;
}
switch(i->getType()) {
case CMSat::watch_clause_t:
*j++ = *i;
break;
case CMSat::watch_tertiary_t:
try_subsume_tri(lit, i, j, doStamp);
break;
case CMSat::watch_binary_t:
try_subsume_bin(lit, i, j);
break;
default:
assert(false);
break;
}
}
ws.shrink(i-j);
}
const double time_used = cpuTime() - myTime;
const bool time_out = (timeAvailable <= 0);
const double time_remain = float_div(timeAvailable, orig_timeAvailable);
runStats.numCalled++;
runStats.time_used += time_used;
runStats.time_out += time_out;
if (solver->conf.verbosity >= 1) {
runStats.print_short(solver);
}
if (solver->sqlStats) {
solver->sqlStats->time_passed(
solver
, "subsume implicit"
, time_used
, time_out
, time_remain
);
}
if (check_stats) {
#ifdef DEBUG_IMPLICIT_STATS
solver->check_stats();
#endif
}
globalStats += runStats;
}
示例6: subsume_implicit
void SubsumeImplicit::subsume_implicit(const bool check_stats)
{
assert(solver->okay());
const double myTime = cpuTime();
timeAvailable = 1900LL*1000LL*1000LL;
const bool doStamp = solver->conf.doStamp;
runStats.clear();
//Randomize starting point
const size_t rnd_start = solver->mtrand.randInt(solver->watches.size()-1);
size_t numDone = 0;
for (;numDone < solver->watches.size() && timeAvailable > 0
;numDone++
) {
const size_t at = (rnd_start + numDone) % solver->watches.size();
runStats.numWatchesLooked++;
const Lit lit = Lit::toLit(at);
watch_subarray ws = solver->watches[lit.toInt()];
//We can't do much when there is nothing, or only one
if (ws.size() < 2)
continue;
if (ws.size() > 1) {
timeAvailable -= ws.size()*std::ceil(std::log((double)ws.size())) + 20;
std::sort(ws.begin(), ws.end(), WatchSorter());
}
/*cout << "---> Before" << endl;
printWatchlist(ws, lit);*/
Watched* i = ws.begin();
Watched* j = i;
clear();
for (Watched* end = ws.end(); i != end; i++) {
if (timeAvailable < 0) {
*j++ = *i;
continue;
}
switch(i->getType()) {
case CMSat::watch_clause_t:
*j++ = *i;
break;
case CMSat::watch_tertiary_t:
try_subsume_tri(lit, i, j, doStamp);
break;
case CMSat::watch_binary_t:
try_subsume_bin(lit, i, j);
break;
default:
assert(false);
break;
}
}
ws.shrink(i-j);
}
if (check_stats) {
solver->checkStats();
}
runStats.numCalled++;
runStats.time_used += cpuTime() - myTime;
runStats.time_out += (timeAvailable <= 0);
if (solver->conf.verbosity >= 1) {
runStats.printShort();
}
globalStats += runStats;
}