diff options
Diffstat (limited to 'src/support/dom/document_cache.cc')
-rw-r--r-- | src/support/dom/document_cache.cc | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/support/dom/document_cache.cc b/src/support/dom/document_cache.cc index 0ad540c..23805b5 100644 --- a/src/support/dom/document_cache.cc +++ b/src/support/dom/document_cache.cc @@ -1,19 +1,43 @@ #include "document_cache.h" +#include <xercesc/dom/DOMDocument.hpp> +#include <xercesc/dom/DOMImplementation.hpp> + #include <stdexcept> +#include "support/xerces_string_guard.h" + namespace InputXSLT { +auto DomDocumentCache::createDocument() -> document_ptr { + return document_ptr( + xercesc::DOMImplementation::getImplementation()->createDocument( + nullptr, + *XercesStringGuard<XMLCh>("content"), + nullptr + ) + ); +} + DomDocumentCache::DomDocumentCache(): write_mutex_(), cache_() { } -xalan::XalanDocument* DomDocumentCache::create(xercesc::DOMDocument* document) { +xalan::XalanDocument* DomDocumentCache::create(document_ptr&& document) { std::lock_guard<std::mutex> guard(this->write_mutex_); - this->cache_.emplace(new item(document)); + this->cache_.emplace( + new item( + std::move(document) + ) + ); return this->cache_.top()->getXalanDocument(); } +void DomDocumentCache::document_deleter::operator()( + xercesc::DOMDocument* document) { + document->release(); +} + } |