diff options
Diffstat (limited to 'src/support')
-rw-r--r-- | src/support/xerces_string_guard.cc | 18 | ||||
-rw-r--r-- | src/support/xerces_string_guard.h | 24 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/support/xerces_string_guard.cc b/src/support/xerces_string_guard.cc new file mode 100644 index 0000000..14ad29b --- /dev/null +++ b/src/support/xerces_string_guard.cc @@ -0,0 +1,18 @@ +#include "xerces_string_guard.h" + +namespace InputXSLT { + +XercesStringGuard::XercesStringGuard(const std::string& src): + string_(xercesc::XMLString::transcode(src.data())) { } + +XercesStringGuard::~XercesStringGuard() { + xercesc::XMLString::release( + const_cast<XMLCh**>(&this->string_) + ); +} + +XMLCh* XercesStringGuard::operator*() { + return this->string_; +} + +} diff --git a/src/support/xerces_string_guard.h b/src/support/xerces_string_guard.h new file mode 100644 index 0000000..f64a53e --- /dev/null +++ b/src/support/xerces_string_guard.h @@ -0,0 +1,24 @@ +#ifndef INPUTXSLT_SRC_SUPPORT_XERCES_STRING_GUARD_H_ +#define INPUTXSLT_SRC_SUPPORT_XERCES_STRING_GUARD_H_ + +#include <xercesc/util/XMLString.hpp> + +#include <string> + +namespace InputXSLT { + +class XercesStringGuard { + public: + XercesStringGuard(const std::string&); + ~XercesStringGuard(); + + XMLCh* operator*(); + + private: + XMLCh* const string_; + +}; + +} + +#endif // INPUTXSLT_SRC_SUPPORT_XERCES_STRING_GUARD_H_ |