#include "document_cache.h" #include #include #include #include "support/xerces_string_guard.h" namespace InputXSLT { auto DomDocumentCache::createDocument() -> document_ptr { return document_ptr( xercesc::DOMImplementation::getImplementation()->createDocument() ); } auto DomDocumentCache::createDocument(const std::string& name) -> document_ptr { return document_ptr( xercesc::DOMImplementation::getImplementation()->createDocument( nullptr, *XercesStringGuard(name), nullptr ) ); } DomDocumentCache::DomDocumentCache(): write_mutex_(), cache_() { } xalan::XalanDocument* DomDocumentCache::create(document_ptr&& document) { std::lock_guard guard(this->write_mutex_); this->cache_.emplace( std::make_unique( std::move(document) ) ); return this->cache_.top()->getXalanDocument(); } void DomDocumentCache::document_deleter::operator()( xercesc::DOMDocument* document) { document->release(); } }