#include "../config/pathan_config.h" /* * Copyright (c) 2001, DecisionSoft Limited All rights reserved. * Please see LICENSE.TXT for more information. */ #include "FunctionLookupImpl.hpp" #include #include FunctionLookupImpl::FunctionLookupImpl(XPath2MemoryManager* memMgr) : _uriPool(17, memMgr), _funcTable(197, false, memMgr), _memMgr(memMgr) { createTable(); } FunctionLookupImpl::~FunctionLookupImpl() { } void FunctionLookupImpl::insertFunction(const XMLCh* const URI, const XMLCh* const name, FuncFactory *func) { _funcTable.put((void*)name,_uriPool.addOrFind(URI),func); } void FunctionLookupImpl::insertFunction(FuncFactory *func) { _funcTable.put((void*)func->getName(),_uriPool.addOrFind(func->getURI()), func); } DataItem* FunctionLookupImpl::lookUpFunction(const XMLCh* URI, const XMLCh* fname, const VectorOfDataItems &args, XPath2MemoryManager* memMgr) const { if(!_uriPool.exists(URI)) return NULL; const FuncFactory* pFactory=_funcTable.get((void*)fname, _uriPool.getId(URI)); if(pFactory) return pFactory->createInstance(args, memMgr); return NULL; } std::vector< std::pair > FunctionLookupImpl::getFunctions() const { std::vector< std::pair > retVal; XERCES_CPP_NAMESPACE_QUALIFIER RefHash2KeysTableOfEnumerator iterator(const_cast* >(&_funcTable)); while(iterator.hasMoreElements()) { FuncFactory& entry=iterator.nextElement(); retVal.push_back(std::pair(entry.getURI(), entry.getName())); } return retVal; } ////////////////////////////////////////////////////////////////////////// #include "../factory/FuncFactoryTemplate.hpp" #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 #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 #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 #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 #include #include #include #include #include void FunctionLookupImpl::createTable() { // From the XPath2 Function & Operators list // Accessors: // fn:node-name insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:nilled insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:string insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:data insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:base-uri insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:document-uri insertFunction(new (_memMgr) FuncFactoryTemplate()); // Debug Functions: // fn:error insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:trace insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on numeric values: // fn:abs insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:ceiling insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:floor insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:round insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:round-half-to-even insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on strings // fn:codepoints-to-string insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:string-to-codepoints insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:compare insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:concat insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:string-join insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:substring insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:string-length insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:normalize-space insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:normalize-unicode insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:upper-case insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:lower-case insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:translate insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:escape-URI insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:contains insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:starts-with insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:ends-with insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:substring-before insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:substring-after insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:matches insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:replace insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:tokenize insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on boolean values // fn:true insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:false insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:not insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on date values // fn:years-from-duration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:months-from-duration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:days-from-duration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:hours-from-duration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:minutes-from-duration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:seconds-from-duration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:year-from-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:month-from-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:day-from-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:hours-from-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:minutes-from-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:seconds-from-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:timezone-from-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:year-from-date insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:month-from-date insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:day-from-date insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:timezone-from-date insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:hours-from-time insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:minutes-from-time insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:seconds-from-time insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:timezone-from-time insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:adjust-dateTime-to-timezone insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:adjust-date-to-timezone insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:adjust-time-to-timezone insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:subtract-dateTimes-yielding-yearMonthDuration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:subtract-dateTimes-yielding-dayTimeDuration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:subtract-dates-yielding-yearMonthDuration insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:subtract-dates-yielding-dayTimeDuration insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on QName values // fn:resolve-QName insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:expanded-QName insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:local-name-from-QName insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:namespace-uri-from-QName insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:namespace-uri-for-prefix insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:in-scope-prefixes insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on anyURI values // fn:resolve-URI insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on nodes // fn:name insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:local-name insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:namespace-uri insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:number insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:lang insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:root insertFunction(new (_memMgr) FuncFactoryTemplate()); // Functions on sequences // fn::zero-or-one insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn::one-or-more insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn::exactly-one insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:boolean insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:index-of insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:empty insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:exists insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:distinct-values insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:insert-before insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:remove insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:reverse insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:subsequence insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:unordered insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:deep-equal insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:count insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:avg insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:max insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:min insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:sum insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:id insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:idref insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:doc insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:collection insertFunction(new (_memMgr) FuncFactoryTemplate()); // Context functions // fn:position insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:last insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:current-dateTime insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:current-date insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:current-time insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:default-collation insertFunction(new (_memMgr) FuncFactoryTemplate()); // fn:implicit-timezone insertFunction(new (_memMgr) FuncFactoryTemplate()); }