#include "../config/pathan_config.h" /* * Copyright (c) 2001, DecisionSoft Limited All rights reserved. * Please see LICENSE.TXT for more information. */ #include #include #include #include #include #include #include ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// DataItemInstanceOf::DataItemInstanceOf(DataItem* expr, SequenceType* exprType, XPath2MemoryManager* memMgr) : DataItemImpl(memMgr), _expr(expr), _exprType(exprType) { setType(DataItem::INSTANCE_OF); } Sequence DataItemInstanceOf::collapseTreeInternal(DynamicContext* context, int ) const { int flags=0; if(_exprType->getOccurrenceIndicator()==SequenceType::QUESTION_MARK || _exprType->getOccurrenceIndicator()==SequenceType::EXACTLY_ONE) flags = DataItem::UNORDERED|DataItem::RETURN_TWO; Sequence toBeTested(_expr->collapseTree(context, flags)); bool result = _exprType->matches(toBeTested, context); return Sequence(DatatypeFactory::POD2AT::createBoolean(context->getMemoryManager(), result, context), context->getMemoryManager()); } DataItem* DataItemInstanceOf::staticResolution(StaticContext *context, StaticResolutionContext *src) { return resolveDataItem(_expr, context, src, true); } const DataItem *DataItemInstanceOf::getExpression() const { return _expr; } const SequenceType *DataItemInstanceOf::getSequenceType() const { return _exprType; } void DataItemInstanceOf::setExpression(DataItem *item) { _expr = item; }