aboutsummaryrefslogtreecommitdiff
path: root/src/support/dom/document_cache.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/support/dom/document_cache.cc')
-rw-r--r--src/support/dom/document_cache.cc28
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();
+}
+
}