本文整理汇总了C++中ConstraintSet::size方法的典型用法代码示例。如果您正苦于以下问题:C++ ConstraintSet::size方法的具体用法?C++ ConstraintSet::size怎么用?C++ ConstraintSet::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ConstraintSet
的用法示例。
在下文中一共展示了ConstraintSet::size方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: xBestIndex
static int xBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo) {
auto *pVtab = (VirtualTable *)tab;
ConstraintSet constraints;
// Keep track of the index used for each valid constraint.
// Expect this index to correspond with argv within xFilter.
size_t expr_index = 0;
// If any constraints are unusable increment the cost of the index.
double cost = 1;
// Expressions operating on the same virtual table are loosely identified by
// the consecutive sets of terms each of the constraint sets are applied onto.
// Subsequent attempts from failed (unusable) constraints replace the set,
// while new sets of terms append.
if (pIdxInfo->nConstraint > 0) {
for (size_t i = 0; i < static_cast<size_t>(pIdxInfo->nConstraint); ++i) {
// Record the term index (this index exists across all expressions).
const auto &constraint_info = pIdxInfo->aConstraint[i];
#if defined(DEBUG)
plan("Evaluating constraints for table: " + pVtab->content->name +
" [index=" + std::to_string(i) + " column=" +
std::to_string(constraint_info.iColumn) + " term=" +
std::to_string((int)constraint_info.iTermOffset) + " usable=" +
std::to_string((int)constraint_info.usable) + "]");
#endif
if (!constraint_info.usable) {
// A higher cost less priority, prefer more usable query constraints.
cost += 10;
continue;
}
// Lookup the column name given an index into the table column set.
if (constraint_info.iColumn < 0 ||
static_cast<size_t>(constraint_info.iColumn) >=
pVtab->content->columns.size()) {
cost += 10;
continue;
}
const auto &name = pVtab->content->columns[constraint_info.iColumn].first;
// Save a pair of the name and the constraint operator.
// Use this constraint during xFilter by performing a scan and column
// name lookup through out all cursor constraint lists.
constraints.push_back(
std::make_pair(name, Constraint(constraint_info.op)));
pIdxInfo->aConstraintUsage[i].argvIndex = ++expr_index;
#if defined(DEBUG)
plan("Adding constraint for table: " + pVtab->content->name +
" [column=" + name + " arg_index=" + std::to_string(expr_index) +
"]");
#endif
}
}
pIdxInfo->idxNum = kConstraintIndexID++;
// Add the constraint set to the table's tracked constraints.
#if defined(DEBUG)
plan("Recording constraint set for table: " + pVtab->content->name +
" [cost=" + std::to_string(cost) + " size=" +
std::to_string(constraints.size()) + " idx=" +
std::to_string(pIdxInfo->idxNum) + "]");
#endif
pVtab->content->constraints[pIdxInfo->idxNum] = std::move(constraints);
pIdxInfo->estimatedCost = cost;
return SQLITE_OK;
}
示例2: checkTypes
void checkTypes() {
VariableIdMapping variableIdMapping;
PState s1;
cout << "RUNNING CHECKS:"<<endl;
{
// check temporary variables (create and delete)
VariableId var_tmp=variableIdMapping.createUniqueTemporaryVariableId("tmp");
variableIdMapping.deleteUniqueTemporaryVariableId(var_tmp);
}
{
cout << "------------------------------------------"<<endl;
cout << "RUNNING CHECKS FOR BOOLLATTICE TYPE:"<<endl;
AType::BoolLattice a;
a=true;
check("a=true => isTrue",a.isTrue());
AType::BoolLattice b;
b=false;
check("b=false => isFalse",b.isFalse());
AType::BoolLattice c=a||b;
check("c=a||b => c isTrue ",c.isTrue());
AType::Top e;
AType::BoolLattice d;
d=e;
check("Top e; d=e => d isTop",d.isTop());
c=c||d;
check("c=c||d: true",c.isTrue());
AType::BoolLattice f=AType::Bot();
d=AType::Bot();
check("d=bot: bot",d.isBot());
check("f=bot: bot",f.isBot());
a=d&&f;
check("a=d&&f => a isBot",a.isBot());
f=false;
check("f=false => f isFalse",f.isFalse());
a=d&&f;
check("a=d&&f: a isFalse (we define it this way)",a.isFalse());
}
{
cout << "RUNNING CHECKS FOR CONSTINT LATTICE TYPE:"<<endl;
AType::ConstIntLattice a;
a=true;
check("a=true => isTrue",a.isTrue());
check("a=true => !isFalse",!a.isFalse());
AType::ConstIntLattice b;
b=false;
check("b=false => isFalse",b.isFalse());
check("b=false => !isTrue",!b.isTrue());
AType::ConstIntLattice c=a.operatorOr(b);
check("c=a.operatorOr(b): ",c.isTrue());
AType::Top e;
AType::ConstIntLattice d;
d=e;
check("Top e; d=e; d isTop ",d.isTop());
c=c.operatorOr(d);
check("c=c.operatorOr(d) => c isTrue ",c.isTrue());
AType::ConstIntLattice f=AType::Bot();
d=AType::Bot();
a=d.operatorAnd(f);
check("d=bot;f=bot;a=d.operatorAnd(f); => a isBot",a.isBot());
f=false;
a=d.operatorAnd(f);
check("f=false; a=d.operatorAnd(f); => a isFalse",a.isFalse());
a=5;
check("a=5; a.isTrue()==true",a.isTrue()==true);
check("a=5; a.isFalse()==false",a.isFalse()==false);
a=0;
check("a=0; a.isTrue()==false",a.isTrue()==false);
check("a=0; a.isFalse())==true",a.isFalse()==true);
}
{
cout << "------------------------------------------"<<endl;
cout << "RUNNING CHECKS FOR CONSTRAINT TYPE:"<<endl;
VariableId var_x=variableIdMapping.createUniqueTemporaryVariableId("x");
VariableId var_y=variableIdMapping.createUniqueTemporaryVariableId("y");
cout << "P1"<<endl;
Constraint c1(Constraint::EQ_VAR_CONST,var_x,1);
cout << "P2"<<endl;
Constraint c2(Constraint::NEQ_VAR_CONST,var_y,2);
cout << "P3"<<endl;
Constraint c3=DISEQUALITYCONSTRAINT;
cout << "P4"<<endl;
Constraint c4=Constraint(Constraint::EQ_VAR_CONST,var_y,2);
cout << "P5"<<endl;
ConstraintSet cs;
cout << "P6"<<endl;
cs.addConstraint(c1);
cout << "P7"<<endl;
cout << "CS1:"<<cs.toString()<<endl;
cs.addConstraint(c2);
cout << "CS2:"<<cs.toString()<<endl;
check("inserted 2 different constraints, size of constraint set == 3",cs.size()==2);
check("c1:constraintExists(EQ_VAR_CONST,x,1) == true",cs.constraintExists(Constraint::EQ_VAR_CONST,var_x,1));
check("c1:constraintExists(NEQ_VAR_CONST,x,1) == false",!cs.constraintExists(Constraint::NEQ_VAR_CONST,var_x,1));
check("c2:constraintExists(NEQ_VAR_CONST,y,2) == true",cs.constraintExists(Constraint::NEQ_VAR_CONST,var_y,2));
check("c3:isDisequality==false",cs.disequalityExists()==false);
//.........这里部分代码省略.........