本文整理汇总了C++中itemtype::Ptr类的典型用法代码示例。如果您正苦于以下问题:C++ Ptr类的具体用法?C++ Ptr怎么用?C++ Ptr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Ptr类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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;
}
示例2: xdtTypeMatches
bool XSLTNodeTest::xdtTypeMatches(const ItemType::Ptr &other) const
{
if(!other->isNodeType())
return false;
return *static_cast<const XSLTNodeTest *>(other.data()) == *this
? true
: xdtTypeMatches(other->xdtSuperType());
}
示例3: xdtTypeMatches
bool BuiltinNodeType<kind>::xdtTypeMatches(const ItemType::Ptr &other) const
{
if(!other->isNodeType())
return false;
return *static_cast<const BuiltinNodeType *>(other.data()) == *this
? true
: xdtTypeMatches(other->xdtSuperType());
}
示例4: Ptr
AtomicComparator::Ptr ComparisonPlatform<TSubClass, issueError, comparisonType, errorCode>::
fetchComparator(const ItemType::Ptr &t1,
const ItemType::Ptr &t2,
const ReportContext::Ptr &context) const
{
Q_ASSERT(t1);
Q_ASSERT(t2);
if(*BuiltinTypes::xsAnyAtomicType == *t1 ||
*BuiltinTypes::xsAnyAtomicType == *t2 ||
*BuiltinTypes::item == *t1 ||
*BuiltinTypes::item == *t2 ||
*BuiltinTypes::numeric == *t1 ||
*BuiltinTypes::numeric == *t2 ||
*CommonSequenceTypes::Empty == *t1 ||
*CommonSequenceTypes::Empty == *t2)
{
/* The static type of(at least) one of the operands could not
* be narrowed further, so we do the operator
* lookup at runtime.
*/
return AtomicComparator::Ptr();
}
const AtomicComparatorLocator::Ptr locator
(static_cast<const AtomicType *>(t1.data())->comparatorLocator());
if(!locator)
{
if(issueError)
{
context->error(QtXmlPatterns::tr("No comparisons can be done involving the type %1.")
.arg(formatType(context->namePool(), t1)),
errorCode, static_cast<const TSubClass *>(this)->actualReflection());
}
return AtomicComparator::Ptr();
}
const AtomicComparator::Ptr comp(static_cast<const AtomicType *>(t2.data())->accept(locator, operatorID(),
static_cast<const TSubClass *>(this)->actualReflection()));
if(comp)
return comp;
else if(issueError)
{
context->error(QtXmlPatterns::tr("Operator %1 is not available between atomic values of type %2 and %3.")
.arg(formatKeyword(AtomicComparator::displayName(operatorID(),
comparisonType)),
formatType(context->namePool(), t1),
formatType(context->namePool(), t2)),
errorCode, static_cast<const TSubClass *>(this)->actualReflection());
}
return AtomicComparator::Ptr();
}
示例5: xdtTypeMatches
bool AtomicType::xdtTypeMatches(const ItemType::Ptr &other) const
{
if(other->isAtomicType())
{
if(*other == *this)
return true;
else
return xdtTypeMatches(other->xdtSuperType());
}
else
return false;
}
示例6: xdtTypeMatches
bool AbstractNodeTest::xdtTypeMatches(const ItemType::Ptr &other) const
{
Q_ASSERT(other);
if(other->isNodeType())
{
if(*other == *this)
return true;
else
return xdtTypeMatches(other->xdtSuperType());
}
else
return false;
}
示例7: 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;
}
示例8: verifyType
Expression::Ptr TypeChecker::verifyType(const Expression::Ptr &operand,
const SequenceType::Ptr &reqSeqType,
const StaticContext::Ptr &context,
const ReportContext::ErrorCode code,
const Options options)
{
const ItemType::Ptr reqType(reqSeqType->itemType());
const Expression::Properties props(operand->properties());
/* If operand requires a focus, do the necessary type checking for that. */
if(props.testFlag(Expression::RequiresFocus) && options.testFlag(CheckFocus))
{
const ItemType::Ptr contextType(context->contextItemType());
if(contextType)
{
if(props.testFlag(Expression::RequiresContextItem))
{
Q_ASSERT_X(operand->expectedContextItemType(), Q_FUNC_INFO,
"When the Expression sets the RequiresContextItem property, it must "
"return a type in expectedContextItemType()");
const ItemType::Ptr expectedContextType(operand->expectedContextItemType());
/* Allow the empty sequence. We don't want to trigger XPTY0020 on ()/... . */
if(!expectedContextType->xdtTypeMatches(contextType) && contextType != CommonSequenceTypes::Empty)
{
context->error(wrongType(context->namePool(), operand->expectedContextItemType(), contextType),
ReportContext::XPTY0020, operand.data());
return operand;
}
}
}
else
{
context->error(QtXmlPatterns::tr("The focus is undefined."), ReportContext::XPDY0002, operand.data());
return operand;
}
}
SequenceType::Ptr operandSeqType(operand->staticType());
ItemType::Ptr operandType(operandSeqType->itemType());
/* This returns the operand if the types are identical or if operandType
* is a subtype of reqType. */
if(reqType->xdtTypeMatches(operandType) || *operandType == *CommonSequenceTypes::Empty)
return operand;
/* Since we haven't exited yet, it means that the operandType is a super type
* of reqType, and that there hence is a path down to it through the
* type hierachy -- but that doesn't necessarily mean that a up-cast(down the
* hierarchy) would succeed. */
Expression::Ptr result(operand);
if(reqType->isAtomicType())
{
const Expression::ID opID = operand->id();
if((opID == Expression::IDArgumentReference ||
(opID == Expression::IDCardinalityVerifier && operand->operands().first()->is(Expression::IDArgumentReference)))
&& *BuiltinTypes::item == *operandType)
return Expression::Ptr(new ArgumentConverter(result, reqType));
if(!operandType->isAtomicType())
{
result = Expression::Ptr(new Atomizer(result));
/* The atomizer might know more about the type. */
operandType = result->staticType()->itemType();
}
if(reqType->xdtTypeMatches(operandType))
{
/* Atomization was sufficient. Either the expected type is xs:anyAtomicType
* or the type the Atomizer knows it returns, matches the required type. */
return result;
}
const bool compatModeEnabled = context->compatModeEnabled();
if((options.testFlag(AutomaticallyConvert) && BuiltinTypes::xsUntypedAtomic->xdtTypeMatches(operandType)) ||
(compatModeEnabled && BuiltinTypes::xsString->xdtTypeMatches(reqType)))
{
if(*reqType == *BuiltinTypes::numeric)
{
result = typeCheck(new UntypedAtomicConverter(result, BuiltinTypes::xsDouble, code),
context, reqSeqType);
}
else
result = typeCheck(new UntypedAtomicConverter(result, reqType, code), context, reqSeqType);
/* The UntypedAtomicConverter might know more about the type, so reload. */
operandType = result->staticType()->itemType();
}
else if(compatModeEnabled && *reqType == *BuiltinTypes::xsDouble)
{
const FunctionFactory::Ptr functions(context->functionSignatures());
Expression::List numberArgs;
numberArgs.append(operand);
result = functions->createFunctionCall(QXmlName(StandardNamespaces::fn, StandardLocalNames::number),
numberArgs,
context,
//.........这里部分代码省略.........
示例9: xdtTypeMatches
bool AnyNodeType::xdtTypeMatches(const ItemType::Ptr &other) const
{
return other->isNodeType();
}