From 20fca5978b55606062cdaf4c94dec82f5318a62a Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Sun, 11 May 2014 20:09:34 +0200 Subject: Switched internal DomDocumentCache structure to std::stack * using std::unordered_map for named cache lookups was a nice idea but is not useful when one keeps in mind that: ** we don't want cached external function responses in a situation where we are able to execute transformations inside transformations ** cached responses mean that we can not read a xml file, overwrite it using another transformation and then read it again * the currently available InputXSLT frontend only processes a single transformation anyway, so increased memory requirements should not pose a problem ** if a future frontend should offer batch processing of transformation tasks, one could implement a cache reset method to free memory after a transformation has been processed --- src/function/base.h | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) (limited to 'src/function/base.h') diff --git a/src/function/base.h b/src/function/base.h index c5346c7..fe9f6ff 100644 --- a/src/function/base.h +++ b/src/function/base.h @@ -28,33 +28,23 @@ class FunctionBase : public xalan::Function { ) const { const FilesystemContext fsContext(locator); - const boost::filesystem::path argumentPath( - fsContext.resolve(argument->str()) - ); - - DomDocumentCache::optional_item optionalCachedDocument( - this->document_cache_->get(argumentPath.string()) - ); - - if ( !optionalCachedDocument.first ) { - optionalCachedDocument = this->document_cache_->create( - argumentPath.string(), + xalan::XalanDocument* const domDocument( + this->document_cache_->create( static_cast( const_cast(this) )->constructDocument( fsContext, - argumentPath + fsContext.resolve(argument->str()) ) - ); - } + ) + ); xalan::XPathExecutionContext::BorrowReturnMutableNodeRefList nodeList( executionContext ); nodeList->addNodes( - *optionalCachedDocument.second->getDocumentElement() - ->getChildNodes() + *domDocument->getDocumentElement()->getChildNodes() ); return executionContext.getXObjectFactory().createNodeSet(nodeList); -- cgit v1.2.3