From 8f05c7de54336daefb214a754de35367098b6510 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Mon, 7 Jul 2014 22:25:03 +0200 Subject: 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 --- src/support/dom/document_cache.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/support/dom/document_cache.h') diff --git a/src/support/dom/document_cache.h b/src/support/dom/document_cache.h index 1f9a9e3..3aeb332 100644 --- a/src/support/dom/document_cache.h +++ b/src/support/dom/document_cache.h @@ -14,10 +14,23 @@ namespace InputXSLT { class DomDocumentCache { + class document_deleter { + friend std::unique_ptr; + + void operator()(xercesc::DOMDocument*); + }; + public: + typedef std::unique_ptr< + xercesc::DOMDocument, + document_deleter + > document_ptr; + + static document_ptr createDocument(); + DomDocumentCache(); - xalan::XalanDocument* create(xercesc::DOMDocument*); + xalan::XalanDocument* create(document_ptr&&); private: class item; -- cgit v1.2.3