#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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include PathanExpressionImpl::PathanExpressionImpl(const XMLCh *expression, const XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* documentRoot, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager* memMgr, const XERCES_CPP_NAMESPACE_QUALIFIER DOMXPathNSResolver *nsr, XERCES_CPP_NAMESPACE_QUALIFIER XMLGrammarPool *xmlGP) : _createdWith(memMgr), _memMgr(memMgr), _docRoot(documentRoot) { _staticContext = _memMgr.createContext(xmlGP); _staticContext->setNSResolver(nsr); _compiledExpression = PathanEngine::createDataItem(expression, _staticContext, &_memMgr, true); } PathanExpressionImpl::PathanExpressionImpl(const XMLCh *expression, DynamicContext *context, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager* memMgr) : _createdWith(memMgr), _memMgr(memMgr), _docRoot(0), _staticContext(context) { _compiledExpression = PathanEngine::createDataItem(expression, _staticContext, &_memMgr, true); } PathanExpressionImpl::~PathanExpressionImpl() { }//destructor void PathanExpressionImpl::release() { _memMgr.reset(); _createdWith->deallocate(this); } // weak version - must create a context from scratch void* PathanExpressionImpl::evaluate(XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* contextNode, unsigned short type, void*) const throw (XERCES_CPP_NAMESPACE_QUALIFIER DOMXPathException, XERCES_CPP_NAMESPACE_QUALIFIER DOMException) { return new (_createdWith) XPath2Result((XPath2Result::ResultType)type, _compiledExpression, contextNode, _staticContext, _createdWith); } // strong version, use given context XPath2Result* PathanExpressionImpl::evaluate(DynamicContext* context, unsigned short type) const throw (XERCES_CPP_NAMESPACE_QUALIFIER DOMXPathException, XERCES_CPP_NAMESPACE_QUALIFIER DOMException) { return new (_createdWith) XPath2Result((XPath2Result::ResultType)type, _compiledExpression, context, _createdWith); } DynamicContext *PathanExpressionImpl::createContext(XPath2MemoryManager *mm) const { if(mm == 0) { mm = const_cast(&_memMgr); } return _staticContext->createDynamicContext(mm); }