OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
xml_pugi.h
Go to the documentation of this file.
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  xmpp_buf_write(XmlPugi *arg) : ref(arg) {}
57  virtual void write(const void *data, size_t sz);
59  };
60 
61  void SetBuf(const void *buf, size_t sz);
62 
63  bool IsNull(pugi::xml_node &node) { return node.type() == pugi::node_null; }
64  bool IsNull(pugi::xml_attribute &attr) {
65  return attr == NULL;
66  }
67  void LoadXmlDoc(const pugi::xml_document &doc) {doc_.reset(doc);}
68  const pugi::xml_document &doc() {return doc_;}
69 
70 private:
71  uint8_t *buf_tmp_;
72  size_t ts_; //temp size
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  bool operator()(pugi::xml_node node) const {
86  return (strcmp(node.name(), tmp_.c_str()) == 0);
87  }
88  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__
XmlPugi()
Definition: xml_pugi.cc:17
virtual int LoadDoc(const std::string &doc)
Definition: xml_pugi.cc:173
pugi::xml_node FindNode(const std::string &name)
Definition: xml_pugi.cc:51
virtual const char * ReadNextNode()
Definition: xml_pugi.cc:96
virtual const char * ReadParentName()
Definition: xml_pugi.cc:136
virtual int ModifyNode(const std::string &key, const std::string &value)
Definition: xml_pugi.cc:238
virtual void write(const void *data, size_t sz)
Definition: xml_pugi.cc:331
pugi::xml_node node_
Definition: xml_pugi.h:78
virtual const char * ReadNodeValue()
Definition: xml_pugi.cc:67
size_t ts_
Definition: xml_pugi.h:72
virtual void RewindNode()
Definition: xml_pugi.cc:110
virtual const char * ReadChildNode()
Definition: xml_pugi.cc:82
virtual int WriteRawDoc(uint8_t *buf)
Definition: xml_pugi.cc:151
pugi::xml_node RootNode()
Definition: xml_pugi.cc:24
virtual void PrintDocFormatted(std::ostream &os) const
Definition: xml_pugi.cc:164
virtual int DeleteAttribute(const std::string &key)
Definition: xml_pugi.cc:299
static pugi::xml_attribute GAttr
Definition: xml_pugi.h:92
bool operator()(pugi::xml_attribute attr) const
Definition: xml_pugi.h:82
const pugi::xml_document & doc()
Definition: xml_pugi.h:68
bool operator()(pugi::xml_node node) const
Definition: xml_pugi.h:85
uint8_t * buf_tmp_
Definition: xml_pugi.h:71
virtual void PrintDoc(std::ostream &os) const
Definition: xml_pugi.cc:160
xmpp_buf_write(XmlPugi *arg)
Definition: xml_pugi.h:56
virtual int AddAttribute(const std::string &key, const std::string &value)
Definition: xml_pugi.cc:282
static pugi::xml_node GNode
Definition: xml_pugi.h:93
virtual ~XmlPugi()
Definition: xml_pugi.cc:20
bool IsNull(pugi::xml_attribute &attr)
Definition: xml_pugi.h:64
virtual int AddChildNode(const std::string &key, const std::string &value)
Definition: xml_pugi.cc:250
bool IsNull(pugi::xml_node &node)
Definition: xml_pugi.h:63
virtual const char * ReadNodeName(const std::string &name)
Definition: xml_pugi.cc:58
virtual void RewindDoc()
Definition: xml_pugi.cc:189
void LoadXmlDoc(const pugi::xml_document &doc)
Definition: xml_pugi.h:67
virtual int ModifyAttribute(const std::string &key, const std::string &value)
Definition: xml_pugi.cc:315
virtual const char * ReadChildNodeName()
Definition: xml_pugi.cc:89
PugiPredicate(const std::string &name)
Definition: xml_pugi.h:88
virtual const char * ReadAttrib(const std::string &str)
Definition: xml_pugi.cc:114
virtual const char * ReadNode(const std::string &name)
Definition: xml_pugi.cc:28
virtual int AddNode(const std::string &key, const std::string &value)
Definition: xml_pugi.cc:212
void SetBuf(const void *buf, size_t sz)
Definition: xml_pugi.cc:335
virtual int WriteDoc(uint8_t *buf)
Definition: xml_pugi.cc:142
virtual void AppendDoc(const std::string &str, XmlBase *a_doc)
Definition: xml_pugi.cc:193
virtual int DeleteNode(const std::string &key)
Definition: xml_pugi.cc:228
pugi::xml_attribute attrib_
Definition: xml_pugi.h:79
virtual const char * ReadNextNodeName()
Definition: xml_pugi.cc:103
virtual void RewindAttrib()
Definition: xml_pugi.cc:132
virtual const char * ReadNextAttrib()
Definition: xml_pugi.cc:126
std::string tmp_
Definition: xml_pugi.h:89
struct xmpp_buf_write writer_
Definition: xml_pugi.h:73
virtual int AddChildNodeAfter(const std::string &node_name, const std::string &key, const std::string &value)
Definition: xml_pugi.cc:266
virtual const char * ReadFirstAttrib()
Definition: xml_pugi.cc:120
pugi::xml_document doc_
Definition: xml_pugi.h:75
void SetContext(pugi::xml_node node=GNode, pugi::xml_attribute atrib=GAttr)
Definition: xml_pugi.cc:168