本文整理汇总了C++中item::iterator::Ptr类的典型用法代码示例。如果您正苦于以下问题:C++ Ptr类的具体用法?C++ Ptr怎么用?C++ Ptr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Ptr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: evaluateSingleton
Item AvgFN::evaluateSingleton(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it(m_operands.first()->evaluateSequence(context));
Item sum(it->next());
xsInteger count = 0;
while(sum)
{
++count;
const Item next(it->next());
if(!next)
break;
sum = ArithmeticExpression::flexiblyCalculate(sum, AtomicMathematician::Add,
next, m_adder, context,
this,
ReportContext::FORG0006);
};
if(!sum)
return Item();
/* Note that we use the same m_mather which was used for adding,
* can be worth to think about. */
return ArithmeticExpression::flexiblyCalculate(sum, AtomicMathematician::Div,
Integer::fromValue(count),
m_divider, context,
this,
ReportContext::FORG0006);
}
示例2: evaluateSingleton
Item GenericPredicate::evaluateSingleton(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr focus(m_operand1->evaluateSequence(context));
const DynamicContext::Ptr newContext(context->createFocus());
newContext->setFocusIterator(focus);
return mapToItem(focus->next(), newContext);
}
示例3: mapToItem
Item GenericPredicate::mapToItem(const Item &item,
const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it(m_operand2->evaluateSequence(context));
const Item pcateItem(it->next());
if(!pcateItem)
return Item(); /* The predicate evaluated to the empty sequence */
else if(pcateItem.isNode())
return item;
/* Ok, now it must be an AtomicValue */
else if(BuiltinTypes::numeric->xdtTypeMatches(pcateItem.type()))
{ /* It's a positional predicate. */
if(it->next())
{
context->error(QtXmlPatterns::tr("A positional predicate must "
"evaluate to a single numeric "
"value."),
ReportContext::FORG0006, this);
return Item();
}
if(Double::isEqual(static_cast<xsDouble>(context->contextPosition()),
pcateItem.as<Numeric>()->toDouble()))
{
return item;
}
else
return Item();
}
else if(Boolean::evaluateEBV(pcateItem, it, context)) /* It's a truth predicate. */
return item;
else
return Item();
}
示例4: evaluateSingleton
Item CodepointsToStringFN::evaluateSingleton(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it(m_operands.first()->evaluateSequence(context));
if(!it)
return CommonValues::EmptyString;
QString retval;
Item item(it->next());
while(item)
{
const qint32 cp = static_cast<qint32>(item.as<Numeric>()->toInteger());
if(!isValidXML10Char(cp))
{
context->error(QtXmlPatterns::tr("%1 is not a valid XML 1.0 character.")
.arg(formatData(QLatin1String("0x") +
QString::number(cp, 16))),
ReportContext::FOCH0001, this);
return CommonValues::EmptyString;
}
retval.append(QChar(cp));
item = it->next();
}
return AtomicString::fromValue(retval);
}
示例5: evaluateEBV
bool QuantifiedExpression::evaluateEBV(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it(makeItemMappingIterator<Item>(ConstPtr(this),
m_operand1->evaluateSequence(context),
context));
Item item(it->next());
if(m_quantifier == Some)
{
while(item)
{
if(m_operand2->evaluateEBV(context))
return true;
else
item = it->next();
};
return false;
}
else
{
Q_ASSERT(m_quantifier == Every);
while(item)
{
if(m_operand2->evaluateEBV(context))
item = it->next();
else
return false;
}
return true;
}
}
示例6: evaluateEBV
bool DeepEqualFN::evaluateEBV(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it1(m_operands.first()->evaluateSequence(context));
const Item::Iterator::Ptr it2(m_operands.at(1)->evaluateSequence(context));
while(true)
{
const Item item1(it1->next());
const Item item2(it2->next());
if(!item1)
{
if(item2)
return false;
else
return true;
}
else if(!item2)
{
if(item1)
return false;
else
return true;
}
else if(item1.isNode())
{
if(item2.isNode())
{
if(item1.asNode().isDeepEqual(item2.asNode()))
continue;
else
return false;
}
else
return false;
}
else if(item2.isNode())
{
/* We know that item1 is not a node due to the check above. */
return false;
}
else if(flexibleCompare(item1, item2, context))
continue;
else if(BuiltinTypes::numeric->itemMatches(item1) &&
item1.as<Numeric>()->isNaN() &&
item2.as<Numeric>()->isNaN())
{
// TODO
/* Handle the specific NaN circumstances. item2 isn't checked whether it's of
* type numeric, since the AtomicComparator lookup would have failed if both weren't
* numeric. */
continue;
}
else
return false;
};
}
示例7: evaluateToSequenceReceiver
void Path::evaluateToSequenceReceiver(const DynamicContext::Ptr &context) const
{
/* Note, we use the old context for m_operand1. */
const Item::Iterator::Ptr source(m_operand1->evaluateSequence(context));
const DynamicContext::Ptr focus(context->createFocus());
focus->setFocusIterator(source);
while(source->next())
m_operand2->evaluateToSequenceReceiver(focus);
}
示例8: mId
Item::Iterator::Ptr IdrefFN::evaluateSequence(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr ids(m_operands.first()->evaluateSequence(context));
Item mId(ids->next());
if(!mId)
return CommonValues::emptyIterator;
const Item node(m_operands.last()->evaluateSingleton(context));
checkTargetNode(node.asNode(), context, ReportContext::FODC0001);
return CommonValues::emptyIterator; /* TODO Haven't implemented further. */
}
示例9: next
Item::Iterator::Ptr Path::evaluateSequence(const DynamicContext::Ptr &context) const
{
/* Note, we use the old context for m_operand1. */
const Item::Iterator::Ptr source(m_operand1->evaluateSequence(context));
const DynamicContext::Ptr focus(context->createFocus());
focus->setFocusIterator(source);
const Item::Iterator::Ptr result(makeSequenceMappingIterator<Item>(ConstPtr(this), source, focus));
if(m_checkXPTY0018)
{
/* This is an expensive code path, but it should happen very rarely. */
enum FoundItem
{
FoundNone,
FoundNode,
FoundAtomicValue
} hasFound = FoundNone;
Item::List whenChecked;
Item next(result->next());
while(next)
{
const FoundItem found = next.isAtomicValue() ? FoundAtomicValue : FoundNode;
if(hasFound != FoundNone && hasFound != found)
{
/* It's an atomic value and we've already found a node. Mixed content. */
context->error(QtXmlPatterns::tr("The last step in a path must contain either nodes "
"or atomic values. It cannot be a mixture between the two."),
ReportContext::XPTY0018, this);
}
else
hasFound = found;
whenChecked.append(next);
next = result->next();
}
return makeListIterator(whenChecked);
}
else
return result;
}
示例10: next
Item::Iterator::Ptr CardinalityVerifier::evaluateSequence(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it(m_operand->evaluateSequence(context));
const Item next(it->next());
if(next)
{
const Item next2(it->next());
if(next2)
{
if(m_reqCard.allowsMany())
{
Item::List start;
start.append(next);
start.append(next2);
return Item::Iterator::Ptr(new InsertionIterator(it, 1, makeListIterator(start)));
}
else
{
context->error(wrongCardinality(m_reqCard, Cardinality::twoOrMore()), m_errorCode, this);
return CommonValues::emptyIterator;
}
}
else
{
/* We might be instantiated for the empty sequence. */
if(m_reqCard.isEmpty())
{
context->error(wrongCardinality(m_reqCard, Cardinality::twoOrMore()), m_errorCode, this);
return CommonValues::emptyIterator;
}
else
return makeSingletonIterator(next);
}
}
else
{
if(m_reqCard.allowsEmpty())
return CommonValues::emptyIterator;
else
{
context->error(wrongCardinality(m_reqCard, Cardinality::twoOrMore()), m_errorCode, this);
return CommonValues::emptyIterator;
}
}
}
示例11: evaluateEBV
bool Boolean::evaluateEBV(const Item &first,
const Item::Iterator::Ptr &it,
const QExplicitlySharedDataPointer<DynamicContext> &context)
{
Q_ASSERT(it);
Q_ASSERT(context);
if(!first)
return false;
else if(first.isNode())
return true;
const Item second(it->next());
if(second)
{
Q_ASSERT(context);
context->error(QtXmlPatterns::tr("Effective Boolean Value cannot be calculated for a sequence "
"containing two or more atomic values."),
ReportContext::FORG0006,
QSourceLocation());
return false;
}
else
return first.as<AtomicValue>()->evaluateEBV(context);
}
示例12: evaluateToSequenceReceiver
void ForClause::evaluateToSequenceReceiver(const DynamicContext::Ptr &context) const
{
Item::Iterator::Ptr it;
const Item::Iterator::Ptr source(m_operand1->evaluateSequence(context));
riggPositionalVariable(context, source);
Item next(source->next());
while(next)
{
context->setRangeVariable(m_varSlot, next);
m_operand2->evaluateToSequenceReceiver(context);
next = source->next();
}
}
示例13: evaluateSingleton
Item XSLTSimpleContentConstructor::evaluateSingleton(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it(m_operand->evaluateSequence(context));
Item next(it->next());
QString result;
bool previousIsText = false;
bool discard = false;
if(next)
{
const QString unit(processItem(next, discard, previousIsText));
if(!discard)
result = unit;
next = it->next();
}
else
return Item();
while(next)
{
bool currentIsText = false;
const QString unit(processItem(next, discard, currentIsText));
if(!discard)
{
/* "Adjacent text nodes in the sequence are merged into a single text
* node." */
if(previousIsText && currentIsText)
;
else
result += QLatin1Char(' ');
result += unit;
}
next = it->next();
previousIsText = currentIsText;
}
return AtomicString::fromValue(result);
}
示例14: evaluateToSequenceReceiver
void CopyOf::evaluateToSequenceReceiver(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it(m_operand->evaluateSequence(context));
QAbstractXmlReceiver *const receiver = context->outputReceiver();
Item next(it->next());
while(next)
{
if(next.isNode())
{
const QXmlNodeModelIndex &asNode = next.asNode();
asNode.model()->copyNodeTo(asNode, receiver, m_settings);
}
else
receiver->item(next);
next = it->next();
}
}
示例15: evaluateEBV
bool GeneralComparison::evaluateEBV(const DynamicContext::Ptr &context) const
{
const Item::Iterator::Ptr it1(m_operand1->evaluateSequence(context));
Item item1(it1->next());
if(!item1)
return false;
const Item::Iterator::Ptr it2(m_operand2->evaluateSequence(context));
Item::List cache;
Item item2;
while(true)
{
item2 = it2->next();
if(!item2)
break;
if(generalCompare(item1, item2, context))
return true;
cache.append(item2);
}
while(true)
{
item1 = it1->next();
if(!item1)
return false;
const Item::List::const_iterator end(cache.constEnd());
Item::List::const_iterator it(cache.constBegin());
for(; it != end; ++it)
if(generalCompare(item1, *it, context))
return true;
}
Q_ASSERT(false);
return false;
}