LCOV - code coverage report
Current view: top level - src/plugins/xerces - util.hpp (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 16 16 100.0 %
Date: 2019-09-12 12:28:41 Functions: 6 7 85.7 %

          Line data    Source code
       1             : /**
       2             :  * @file
       3             :  *
       4             :  * @brief Utility functions used in the xerces plugin
       5             :  *
       6             :  * Provides unique pointers that act as a bridge between XMLCh and std::string
       7             :  * Provides a general XercesPluginException
       8             :  *
       9             :  * @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
      10             :  */
      11             : 
      12             : #ifndef ELEKTRA_PLUGIN_XERCES_UTIL_H
      13             : #define ELEKTRA_PLUGIN_XERCES_UTIL_H
      14             : 
      15             : #include <memory>
      16             : #include <xercesc/util/TransService.hpp>
      17             : #include <xercesc/util/XMLString.hpp>
      18             : 
      19             : namespace xerces
      20             : {
      21             : 
      22             : template <typename T>
      23             : struct XercesDeleter
      24             : {
      25             :         void operator() (T * ptr) const
      26             :         {
      27          37 :                 ptr->release ();
      28             :         }
      29             : };
      30             : 
      31             : template <>
      32             : struct XercesDeleter<XMLCh>
      33             : {
      34             :         void operator() (XMLCh * ptr) const
      35             :         {
      36         401 :                 XERCES_CPP_NAMESPACE::XMLString::release (&ptr);
      37             :         }
      38             : };
      39             : 
      40             : template <>
      41             : struct XercesDeleter<char>
      42             : {
      43             :         void operator() (char * ptr) const
      44             :         {
      45        4528 :                 XERCES_CPP_NAMESPACE::XMLString::release (&ptr);
      46             :         }
      47             : };
      48             : 
      49             : template <typename T>
      50             : using XercesPtr = std::unique_ptr<T, XercesDeleter<T>>;
      51             : 
      52         401 : inline XercesPtr<XMLCh> toXMLCh (std::string const & str)
      53             : {
      54             :         // XMLByte required by TranscodeFromStr is an unsigned char * but basically they can be used equivalently
      55             :         return XercesPtr<XMLCh> (
      56        1604 :                 XERCES_CPP_NAMESPACE::TranscodeFromStr (reinterpret_cast<const XMLByte *> (str.c_str ()), str.size (), "UTF-8").adopt ());
      57             : }
      58             : 
      59        4528 : inline XercesPtr<char> toCStr (XMLCh const * xmlCh)
      60             : {
      61             :         // XMLByte returned by TranscodeToStr is an unsigned char * but basically they can be used equivalently
      62       13584 :         return XercesPtr<char> (reinterpret_cast<char *> (XERCES_CPP_NAMESPACE::TranscodeToStr (xmlCh, "UTF-8").adopt ()));
      63             : }
      64             : 
      65        4528 : inline std::string toStr (XMLCh const * xmlCh)
      66             : {
      67       22640 :         return std::string (toCStr (xmlCh).get ());
      68             : }
      69             : 
      70             : #define asXMLCh(str) toXMLCh (str).get ()
      71             : #define asCStr(str) toCStr (str).get ()
      72             : 
      73             : class XercesPluginException : public std::exception
      74             : {
      75             : public:
      76           9 :         explicit XercesPluginException (std::string const & m) : msg (m)
      77             :         {
      78           3 :         }
      79           3 :         ~XercesPluginException () throw ()
      80           6 :         {
      81           3 :         }
      82           3 :         const char * what () const throw ()
      83             :         {
      84           6 :                 return msg.c_str ();
      85             :         }
      86             : 
      87             : private:
      88             :         std::string msg;
      89             : };
      90             : } // namespace xerces
      91             : 
      92             : #define ELEKTRA_XERCES_ORIGINAL_ROOT_NAME "xerces/rootname"
      93             : 
      94             : #endif

Generated by: LCOV version 1.13