本文整理汇总了C++中sequencetype::Ptr::itemType方法的典型用法代码示例。如果您正苦于以下问题:C++ Ptr::itemType方法的具体用法?C++ Ptr::itemType怎么用?C++ Ptr::itemType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sequencetype::Ptr
的用法示例。
在下文中一共展示了Ptr::itemType方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: typeCheck
Expression::Ptr CastableAs::typeCheck(const StaticContext::Ptr &context,
const SequenceType::Ptr &reqType)
{
checkTargetType(context);
const Expression::Ptr me(SingleContainer::typeCheck(context, reqType));
return me;
if(BuiltinTypes::xsQName->xdtTypeMatches(m_targetType->itemType()))
{
const SequenceType::Ptr seqt(m_operand->staticType());
/* We can cast a string literal, an xs:QName value, and an
* empty sequence(if empty is allowed), to xs:QName. */
if(m_operand->is(IDStringValue) ||
BuiltinTypes::xsQName->xdtTypeMatches(seqt->itemType()) ||
(*seqt->itemType() == *CommonSequenceTypes::Empty && m_targetType->cardinality().allowsEmpty()))
{
return wrapLiteral(CommonValues::BooleanTrue, context, this)->typeCheck(context, reqType);
}
else
return wrapLiteral(CommonValues::BooleanFalse, context, this)->typeCheck(context, reqType);
}
else
{
/* Let the CastingPlatform look up its AtomicCaster. */
prepareCasting(context, m_operand->staticType()->itemType());
return me;
}
}
示例2: staticType
SequenceType::Ptr IfThenClause::staticType() const
{
const SequenceType::Ptr t1(m_operand2->staticType());
const SequenceType::Ptr t2(m_operand3->staticType());
return makeGenericSequenceType(t1->itemType() | t2->itemType(),
t1->cardinality() | t2->cardinality());
}
示例3: staticType
SequenceType::Ptr SumFN::staticType() const
{
const SequenceType::Ptr t(m_operands.first()->staticType());
if(m_operands.count() == 1)
{
return makeGenericSequenceType(t->itemType() | BuiltinTypes::xsInteger,
Cardinality::exactlyOne());
}
else
{
return makeGenericSequenceType(t->itemType() | m_operands.at(1)->staticType()->itemType(),
t->cardinality().toWithoutMany());
}
}
示例4: compress
Expression::Ptr InstanceOf::compress(const StaticContext::Ptr &context)
{
const Expression::Ptr me(SingleContainer::compress(context));
if(me.data() != this || m_operand->has(DisableTypingDeduction))
return me;
const SequenceType::Ptr opType(m_operand->staticType());
const ItemType::Ptr itType(m_targetType->itemType());
const ItemType::Ptr ioType(opType->itemType());
if(m_targetType->cardinality().isMatch(opType->cardinality()))
{
if(itType->xdtTypeMatches(ioType))
return wrapLiteral(CommonValues::BooleanTrue, context, this);
else if(!ioType->xdtTypeMatches(itType))
{
return wrapLiteral(CommonValues::BooleanFalse, context, this);
}
}
/* The cardinality is not guaranteed to match; it will need testing. */
else if(!ioType->xdtTypeMatches(itType))
{
/* There's no way it's gonna match. The cardinality is not only
* wrong, but the item type as well. */
return wrapLiteral(CommonValues::BooleanFalse, context, this);
}
return me;
}
示例5: matches
bool SequenceType::matches(const SequenceType::Ptr other) const
{
Q_ASSERT(other);
return itemType()->xdtTypeMatches(other->itemType()) &&
cardinality().isMatch(other->cardinality());
}
示例6: SingleContainer
CastableAs::CastableAs(const Expression::Ptr &operand,
const SequenceType::Ptr &tType) : SingleContainer(operand),
m_targetType(tType)
{
Q_ASSERT(tType);
Q_ASSERT(!tType->cardinality().allowsMany());
Q_ASSERT(tType->itemType()->isAtomicType());
}
示例7: matches
bool BySequenceTypeIdentifier::matches(const Expression::Ptr &expr) const
{
const SequenceType::Ptr t(expr->staticType());
return m_seqType->itemType()->xdtTypeMatches(t->itemType())
&&
m_seqType->cardinality().isMatch(t->cardinality());
}
示例8: staticType
SequenceType::Ptr ForClause::staticType() const
{
const SequenceType::Ptr returnType(m_operand2->staticType());
return makeGenericSequenceType(returnType->itemType(),
m_operand1->staticType()->cardinality()
* /* multiply operator */
returnType->cardinality());
}
示例9: staticType
SequenceType::Ptr Path::staticType() const
{
const SequenceType::Ptr opType(m_operand2->staticType());
/* For each parent step, we evaluate the child step. So multiply the two
* cardinalities. */
return makeGenericSequenceType(opType->itemType(),
m_operand1->staticType()->cardinality() * opType->cardinality());
}
示例10: typeCheck
Expression::Ptr CountFN::typeCheck(const StaticContext::Ptr &context,
const SequenceType::Ptr &reqType)
{
if(*CommonSequenceTypes::EBV->itemType() == *reqType->itemType())
{
return ByIDCreator::create(IDExistsFN, operands(), context, this)->typeCheck(context, reqType);
}
else
return FunctionCall::typeCheck(context, reqType);
}
示例11: typeCheck
Expression::Ptr CastAs::typeCheck(const StaticContext::Ptr &context,
const SequenceType::Ptr &reqType)
{
checkTargetType(context);
const SequenceType::Ptr seqt(m_operand->staticType());
ItemType::Ptr t(seqt->itemType());
/* Special case xs:QName */
if(BuiltinTypes::xsQName->xdtTypeMatches(m_targetType->itemType()))
{
/* Ok, We're casting to xs:QName. */
if(m_operand->is(IDStringValue)) /* A valid combination, let's do the cast. */
return castToQName(context)->typeCheck(context, reqType);
else if(BuiltinTypes::xsQName->xdtTypeMatches(t))
return m_operand->typeCheck(context, reqType);
else if(seqt->cardinality().isEmpty() && m_targetType->cardinality().allowsEmpty())
return EmptySequence::create(this, context);
else if(!(seqt->cardinality().isEmpty() && !m_targetType->cardinality().allowsEmpty()))
{
context->error(QtXmlPatterns::tr("When casting to %1 or types "
"derived from it, the source "
"value must be of the same type, "
"or it must be a string literal. "
"Type %2 is not allowed.")
.arg(formatType(context->namePool(), BuiltinTypes::xsQName))
.arg(formatType(context->namePool(), seqt)),
ReportContext::XPTY0004, this);
return Expression::Ptr(this);
}
}
const Expression::Ptr me(SingleContainer::typeCheck(context, reqType));
/* Type may have changed, such as that atomization has been applied. */
t = m_operand->staticType()->itemType();
if(m_targetType->itemType()->xdtTypeMatches(t) &&
!BuiltinTypes::xsDayTimeDuration->xdtTypeMatches(t) &&
!BuiltinTypes::xsYearMonthDuration->xdtTypeMatches(t))
{ /* At least casting is superflorous. */
if(m_operand->staticType()->cardinality().isMatch(m_targetType->cardinality()))
return m_operand; /* The whole cast expression is redundant. */
else
{ /* Only cardinality check is needed, rewrite to CardinalityVerifier. */
return Expression::Ptr(new CardinalityVerifier(m_operand,
m_targetType->cardinality(),
ReportContext::FORG0001));
}
}
/* Let the CastingPlatform look up its AtomicCaster. */
prepareCasting(context, t);
return me;
}
示例12: staticType
SequenceType::Ptr Aggregator::staticType() const
{
const SequenceType::Ptr t(m_operands.first()->staticType());
ItemType::Ptr itemType(t->itemType());
/* Since we have types that are derived from xs:integer, this ensures that
* the static type is xs:integer even if the argument is for
* instance xs:unsignedShort. */
if(BuiltinTypes::xsInteger->xdtTypeMatches(itemType) &&
!itemType->xdtTypeMatches(BuiltinTypes::xsInteger))
{
itemType = BuiltinTypes::xsInteger;
}
return makeGenericSequenceType(itemType,
t->cardinality().toWithoutMany());
}
示例13: typeCheck
Expression::Ptr ExpressionSequence::typeCheck(const StaticContext::Ptr &context,
const SequenceType::Ptr &reqType)
{
Q_ASSERT(reqType);
Expression::List::iterator it(m_operands.begin());
const Expression::List::iterator end(m_operands.end());
/* We treat the cardinality differently here by allowing the empty sequence
* for each individual Expression, since the Cardinality can be conformed to by
* the ExpressionSequence as a whole(which we check for at the end). */
const SequenceType::Ptr testOnlyIT(makeGenericSequenceType(reqType->itemType(),
Cardinality::empty() |
reqType->cardinality()));
for(; it != end; ++it)
*it = (*it)->typeCheck(context, testOnlyIT);
/* The above loop is only guaranteed to find item type errors, but the cardinality
* can still be wrong since the operands were treated individually. */
return CardinalityVerifier::verifyCardinality(Expression::Ptr(this), reqType->cardinality(), context);
}
示例14: compress
Expression::Ptr CastableAs::compress(const StaticContext::Ptr &context)
{
const Expression::Ptr me(SingleContainer::compress(context));
if(me.data() != this) /* We already managed to const fold, how convenient. */
return me;
const AtomicType::Ptr t(m_targetType->itemType());
const SequenceType::Ptr opType(m_operand->staticType());
/* Casting to these always succeeds. */
if(*t == *BuiltinTypes::xsString ||
*t == *BuiltinTypes::xsUntypedAtomic ||
(*t == *opType->itemType() &&
(m_targetType->cardinality().isMatch(opType->cardinality()))))
{
return wrapLiteral(CommonValues::BooleanTrue, context, this);
}
else
return me;
}
示例15: compress
Expression::Ptr InstanceOf::compress(const StaticContext::Ptr &context)
{
const Expression::Ptr me(SingleContainer::compress(context));
if(me != this || m_operand->has(DisableTypingDeduction))
return me;
const SequenceType::Ptr opType(m_operand->staticType());
const ItemType::Ptr targetType(m_targetType->itemType());
const ItemType::Ptr operandType(opType->itemType());
if(m_targetType->cardinality().isMatch(opType->cardinality()))
{
if(*operandType == *CommonSequenceTypes::Empty || targetType->xdtTypeMatches(operandType))
return wrapLiteral(CommonValues::BooleanTrue, context, this);
else if(!operandType->xdtTypeMatches(targetType))
return wrapLiteral(CommonValues::BooleanFalse, context, this);
}
/* Optimization: rule out the case where instance of will always fail. */
return me;
}