本文整理汇总了C++中TNode::hasAttribute方法的典型用法代码示例。如果您正苦于以下问题:C++ TNode::hasAttribute方法的具体用法?C++ TNode::hasAttribute怎么用?C++ TNode::hasAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TNode
的用法示例。
在下文中一共展示了TNode::hasAttribute方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: postRewrite
RewriteResponse QuantifiersRewriter::postRewrite(TNode in) {
Trace("quantifiers-rewrite-debug") << "post-rewriting " << in << " " << in.hasAttribute(NestedQuantAttribute()) << std::endl;
if( in.getKind()==kind::EXISTS || in.getKind()==kind::FORALL ){
RewriteStatus status = REWRITE_DONE;
Node ret = in;
//get the arguments
std::vector< Node > args;
for( int i=0; i<(int)in[0].getNumChildren(); i++ ){
args.push_back( in[0][i] );
}
//get the instantiation pattern list
Node ipl;
if( in.getNumChildren()==3 ){
ipl = in[2];
}
//get the body
if( in.getKind()==EXISTS ){
std::vector< Node > children;
children.push_back( in[0] );
children.push_back( in[1].negate() );
if( in.getNumChildren()==3 ){
children.push_back( in[2] );
}
ret = NodeManager::currentNM()->mkNode( FORALL, children );
ret = ret.negate();
status = REWRITE_AGAIN_FULL;
}else{
bool isNested = in.hasAttribute(NestedQuantAttribute());
for( int op=0; op<COMPUTE_LAST; op++ ){
if( doOperation( in, isNested, op ) ){
ret = computeOperation( in, op );
if( ret!=in ){
status = REWRITE_AGAIN_FULL;
break;
}
}
}
}
//print if changed
if( in!=ret ){
if( in.hasAttribute(NestedQuantAttribute()) ){
setNestedQuantifiers( ret, in.getAttribute(NestedQuantAttribute()) );
}
Trace("quantifiers-rewrite") << "*** rewrite " << in << std::endl;
Trace("quantifiers-rewrite") << " to " << std::endl;
Trace("quantifiers-rewrite") << ret << std::endl;
}
return RewriteResponse( status, ret );
}
return RewriteResponse(REWRITE_DONE, in);
}
示例2: preRewrite
RewriteResponse QuantifiersRewriter::preRewrite(TNode in) {
Trace("quantifiers-rewrite-debug") << "pre-rewriting " << in << " " << in.hasAttribute(NestedQuantAttribute()) << std::endl;
if( in.getKind()==kind::EXISTS || in.getKind()==kind::FORALL ){
if( !in.hasAttribute(NestedQuantAttribute()) ){
setNestedQuantifiers( in[ 1 ], in );
}
std::vector< Node > args;
for( int i=0; i<(int)in[0].getNumChildren(); i++ ){
args.push_back( in[0][i] );
}
Node body = in[1];
bool doRewrite = false;
while( body.getNumChildren()>=2 && body.getKind()==in.getKind() ){
for( int i=0; i<(int)body[0].getNumChildren(); i++ ){
args.push_back( body[0][i] );
}
body = body[1];
doRewrite = true;
}
if( doRewrite ){
std::vector< Node > children;
children.push_back( NodeManager::currentNM()->mkNode(kind::BOUND_VAR_LIST,args) );
children.push_back( body );
if( in.getNumChildren()==3 ){
children.push_back( in[2] );
}
Node n = NodeManager::currentNM()->mkNode( in.getKind(), children );
if( in!=n ){
if( in.hasAttribute(NestedQuantAttribute()) ){
setNestedQuantifiers( n, in.getAttribute(NestedQuantAttribute()) );
}
Trace("quantifiers-pre-rewrite") << "*** pre-rewrite " << in << std::endl;
Trace("quantifiers-pre-rewrite") << " to " << std::endl;
Trace("quantifiers-pre-rewrite") << n << std::endl;
}
return RewriteResponse(REWRITE_DONE, n);
}
}
return RewriteResponse(REWRITE_DONE, in);
}
示例3: preRegister
void BitblastSolver::preRegister(TNode node) {
if ((node.getKind() == kind::EQUAL ||
node.getKind() == kind::BITVECTOR_ULT ||
node.getKind() == kind::BITVECTOR_ULE ||
node.getKind() == kind::BITVECTOR_SLT ||
node.getKind() == kind::BITVECTOR_SLE) &&
!d_bitblaster->hasBBAtom(node)) {
CodeTimer weightComputationTime(d_bv->d_statistics.d_weightComputationTimer);
d_bitblastQueue.push_back(node);
if ((options::decisionUseWeight() || options::decisionThreshold() != 0) &&
!node.hasAttribute(decision::DecisionWeightAttr())) {
node.setAttribute(decision::DecisionWeightAttr(),computeAtomWeight(node));
}
}
}
示例4: preRegisterTerm
void TheoryQuantifiers::preRegisterTerm(TNode n) {
Debug("quantifiers-prereg") << "TheoryQuantifiers::preRegisterTerm() " << n << endl;
if( n.getKind()==FORALL && !n.hasAttribute(InstConstantAttribute()) ){
getQuantifiersEngine()->registerQuantifier( n );
}
}