LCOV - code coverage report
Current view: top level - xml - xml_pugi.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 8 9 88.9 %
Date: 2026-06-04 02:06:09 Functions: 6 7 85.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : 
       5             : #ifndef __XML_PUGI_H__
       6             : #define __XML_PUGI_H__
       7             : 
       8             : #include <pugixml/pugixml.hpp>
       9             : 
      10             : class XmlPugi : public XmlBase {
      11             : public:
      12             : 
      13             :     virtual int LoadDoc(const std::string &doc);
      14             :     virtual int WriteDoc(uint8_t *buf);
      15             :     virtual int WriteRawDoc(uint8_t *buf);
      16             :     virtual void PrintDoc(std::ostream& os) const;
      17             :     virtual void PrintDocFormatted(std::ostream& os) const;
      18             :     virtual int AddNode(const std::string &key, const std::string &value);
      19             :     virtual int DeleteNode(const std::string &key);
      20             :     virtual int ModifyNode(const std::string &key, const std::string &value);
      21             :     virtual int AddChildNode(const std::string &key, const std::string &value);
      22             :     virtual int AddChildNodeAfter(const std::string &node_name,
      23             :                                   const std::string &key, const std::string &value);
      24             :     virtual int AddAttribute(const std::string &key, const std::string &value);
      25             :     virtual int DeleteAttribute(const std::string &key);
      26             :     virtual int ModifyAttribute(const std::string &key, const std::string &value);
      27             : 
      28             :     // Read methods
      29             :     virtual const char *ReadNode(const std::string &name);
      30             :     virtual const char *ReadNodeName(const std::string &name);
      31             :     virtual const char *ReadNodeValue();
      32             :     virtual const char *ReadChildNode();
      33             :     virtual const char *ReadChildNodeName();
      34             :     virtual const char *ReadNextNode();
      35             :     virtual const char *ReadNextNodeName();
      36             :     virtual void RewindNode();
      37             : 
      38             :     virtual const char *ReadAttrib(const std::string &str);
      39             :     virtual const char *ReadFirstAttrib();
      40             :     virtual const char *ReadNextAttrib();
      41             :     virtual void RewindAttrib();
      42             : 
      43             :     virtual const char *ReadParentName();
      44             : 
      45             :     // resets node and attributes
      46             :     virtual void RewindDoc();
      47             :     virtual void AppendDoc(const std::string &str, XmlBase *a_doc);
      48             : 
      49             :     pugi::xml_node RootNode();
      50             :     pugi::xml_node FindNode(const std::string &name);
      51             : 
      52             :     XmlPugi();
      53             :     virtual ~XmlPugi();
      54             : 
      55             :     struct xmpp_buf_write : pugi::xml_writer {
      56     4255791 :         xmpp_buf_write(XmlPugi *arg) : ref(arg) {}
      57             :         virtual void write(const void *data, size_t sz);
      58             :         XmlPugi *ref;
      59             :     };
      60             : 
      61             :     void SetBuf(const void *buf, size_t sz);
      62             : 
      63     3565799 :     bool IsNull(pugi::xml_node &node) { return node.type() == pugi::node_null; }
      64       82799 :     bool IsNull(pugi::xml_attribute &attr) {
      65       82799 :         return attr == NULL;
      66             :     }
      67           0 :     void LoadXmlDoc(const pugi::xml_document &doc) {doc_.reset(doc);}
      68         265 :     const pugi::xml_document &doc() {return doc_;}
      69             : 
      70             : private:
      71             :     uint8_t *buf_tmp_;
      72             :     size_t ts_; //temp size
      73             :     struct xmpp_buf_write writer_;
      74             : 
      75             :     pugi::xml_document    doc_;
      76             : 
      77             :     // Foll maintains traversal context
      78             :     pugi::xml_node        node_;
      79             :     pugi::xml_attribute   attrib_;
      80             : 
      81             :     struct PugiPredicate {
      82             :         bool operator()(pugi::xml_attribute attr) const {
      83             :             return (strcmp(attr.name(), tmp_.c_str()) == 0);
      84             :         }
      85    90149740 :         bool operator()(pugi::xml_node node) const {
      86    90149740 :             return (strcmp(node.name(), tmp_.c_str()) == 0);
      87             :         }
      88     5205358 :         PugiPredicate(const std::string &name) : tmp_(name) { }
      89             :         std::string tmp_;
      90             :     };
      91             : 
      92             :     static pugi::xml_attribute GAttr;
      93             :     static pugi::xml_node GNode;
      94             :     void SetContext(pugi::xml_node node = GNode,
      95             :                     pugi::xml_attribute atrib = GAttr);
      96             : 
      97             : };
      98             : 
      99             : #endif //  __XML_PUGI_H__

Generated by: LCOV version 1.14