#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( nullptr, *XercesStringGuard("content"), nullptr ) ); } DomDocumentCache::DomDocumentCache(): write_mutex_(), cache_() { } xalan::XalanDocument* DomDocumentCache::create(document_ptr&& document) { std::lock_guard guard(this->write_mutex_); this->cache_.emplace( new item( std::move(document) ) ); return this->cache_.top()->getXalanDocument(); } void DomDocumentCache::document_deleter::operator()( xercesc::DOMDocument* document) { document->release(); } }