#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 #include #include #include #include #include DataItemVariable::DataItemVariable(const XMLCh *qualifiedName, XPath2MemoryManager* memMgr) : DataItemImpl(memMgr), _uri(0) { setType(DataItem::VARIABLE); QualifiedName qname(qualifiedName, getMemoryManager()); _prefix = qname.getPrefix(); _name = qname.getName(); } DataItemVariable::DataItemVariable(const XMLCh *prefix, const XMLCh *name, XPath2MemoryManager* memMgr) : DataItemImpl(memMgr), _uri(0) { setType(DataItem::VARIABLE); _prefix = getMemoryManager()->getPooledString(prefix); _name = getMemoryManager()->getPooledString(name); } DataItemVariable::~DataItemVariable() { } Sequence DataItemVariable::collapseTreeInternal(DynamicContext* context, int flags) const { // cerr << "The prefix is: " << _prefix << endl; // cerr << "The name is: " << _name << endl; // cerr << "The VariableStore is: " << context->getVariableStore().print(context->getMemoryManager()) << endl; std::pair var = context->getVariableStore()->getVar(_uri, _name, context); if(!var.first) { const XMLCh* qname = XPath2NSUtils::qualifyName(_prefix, _name, context->getMemoryManager()); const XMLCh* msg = XPath2Utils::concatStrings(X("Variable "), qname, X(" does not exist"), context->getMemoryManager()); DSLthrow(VariableStoreException, X("DataItemVariable::collapseTreeInternal"), msg); } return var.second; } DataItem* DataItemVariable::staticResolution(StaticContext *context, StaticResolutionContext *src) { _uri = context->getUriBoundToPrefix(_prefix); SequenceType* var = context->getVariableTypeStore()->getVar(_uri, _name, context); if(var == NULL) { const XMLCh* qname = XPath2NSUtils::qualifyName(_prefix, _name, context->getMemoryManager()); const XMLCh* msg = XPath2Utils::concatStrings(X("Variable "), qname, X(" does not exist"), context->getMemoryManager()); DSLthrow(StaticAnalysisException, X("DataItemVariable::staticResolution"), msg); } src->variableUsed(_uri, _name); return resolvePredicates(context, src); } const XMLCh *DataItemVariable::getPrefix() const { return _prefix; } const XMLCh *DataItemVariable::getURI() const { return _uri; } const XMLCh *DataItemVariable::getName() const { return _name; }