diff options
author | Adrian Kummerlaender | 2014-07-07 22:25:03 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2014-07-07 22:25:03 +0200 |
commit | 8f05c7de54336daefb214a754de35367098b6510 (patch) | |
tree | fc8d2b8309c88a1e57193784ad4f48bfa573952d /src/transformer_facade.cc | |
parent | be99b28838796ff5e1dc91685d6121a55d962a88 (diff) | |
download | InputXSLT-8f05c7de54336daefb214a754de35367098b6510.tar InputXSLT-8f05c7de54336daefb214a754de35367098b6510.tar.gz InputXSLT-8f05c7de54336daefb214a754de35367098b6510.tar.bz2 InputXSLT-8f05c7de54336daefb214a754de35367098b6510.tar.lz InputXSLT-8f05c7de54336daefb214a754de35367098b6510.tar.xz InputXSLT-8f05c7de54336daefb214a754de35367098b6510.tar.zst InputXSLT-8f05c7de54336daefb214a754de35367098b6510.zip |
Implemented custom xercesc::DOMDocument deleter
* pointers to xercesc::DOMDocument were manually released
** this is now solved using a custom deleter for the appropriate std::unqiue_ptr template specialization
* added matching factory method to DomDocumentCache
* updated external function implementations accordingly
** "constructDocument" is now expected to return a DomDocumentCache::document_ptr instance
* updated TransformerFacade accordingly
* this change was implemented to get rid of the manual memory management required by xalan / xerces
Diffstat (limited to 'src/transformer_facade.cc')
-rw-r--r-- | src/transformer_facade.cc | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/src/transformer_facade.cc b/src/transformer_facade.cc index 10c8c7a..76b68d6 100644 --- a/src/transformer_facade.cc +++ b/src/transformer_facade.cc @@ -11,10 +11,8 @@ #include <xalanc/XercesParserLiaison/XercesDOMSupport.hpp> #include <xalanc/XalanTransformer/XercesDOMWrapperParsedSource.hpp> -#include <xercesc/dom/DOMDocument.hpp> -#include <xercesc/dom/DOMImplementation.hpp> - #include "support/xerces_string_guard.h" +#include "support/dom/document_cache.h" namespace InputXSLT { @@ -59,19 +57,15 @@ void TransformerFacade::generate( ) { ErrorCapacitor errorCapacitor(&this->error_multiplexer_); - xercesc::DOMDocument* const inputDocument( - xercesc::DOMImplementation::getImplementation()->createDocument( - nullptr, - *XercesStringGuard<XMLCh>("dummy"), - nullptr - ) + DomDocumentCache::document_ptr inputDocument( + DomDocumentCache::createDocument() ); xalan::XercesParserLiaison parserLiaison; xalan::XercesDOMSupport domSupport(parserLiaison); xalan::XercesDOMWrapperParsedSource inputParsedSource( - inputDocument, + inputDocument.get(), parserLiaison, domSupport ); @@ -82,8 +76,6 @@ void TransformerFacade::generate( target ); - inputDocument->release(); - errorCapacitor.discharge(); } @@ -94,12 +86,12 @@ void TransformerFacade::generate( ) { ErrorCapacitor errorCapacitor(&this->error_multiplexer_); - xercesc::DOMDocument* const inputDocument( - xercesc::DOMImplementation::getImplementation()->createDocument() + DomDocumentCache::document_ptr inputDocument( + DomDocumentCache::createDocument() ); xalan::FormatterToXercesDOM inputFormatter( - inputDocument, + inputDocument.get(), inputDocument->getDocumentElement() ); @@ -121,8 +113,6 @@ void TransformerFacade::generate( target ); - inputDocument->release(); - errorCapacitor.discharge(); } |