cprover
xml.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module:
4 
5 Author: Daniel Kroening, kroening@kroening.com
6 
7 \*******************************************************************/
8 
9 
10 #ifndef CPROVER_UTIL_XML_H
11 #define CPROVER_UTIL_XML_H
12 
13 #include <list>
14 #include <map>
15 #include <string>
16 #include <iosfwd>
17 
18 class xmlt
19 {
20 public:
21  xmlt()
22  { }
23 
24  explicit xmlt(const std::string &_name):name(_name)
25  { }
26 
27  typedef std::list<xmlt> elementst;
28  typedef std::map<std::string, std::string> attributest;
29 
30  std::string name, data;
31 
34 
35  elementst::const_iterator find(const std::string &key) const;
36  elementst::iterator find(const std::string &key);
37 
38  void set_attribute(
39  const std::string &attribute,
40  unsigned value);
41 
42  void set_attribute(
43  const std::string &attribute,
44  unsigned long value);
45 
46  void set_attribute(
47  const std::string &attribute,
48  unsigned long long value);
49 
50  void set_attribute(
51  const std::string &attribute,
52  const std::string &value);
53 
54  std::string get_attribute(
55  const std::string &attribute) const
56  {
57  attributest::const_iterator i=attributes.find(attribute);
58  if(i!=attributes.end())
59  return i->second;
60  return "";
61  }
62 
64  const std::string &attribute,
65  bool value)
66  {
67  set_attribute(attribute, value?"true":"false");
68  }
69 
70  bool get_attribute_bool(const std::string &attribute) const
71  {
72  attributest::const_iterator i=attributes.find(attribute);
73  if(i!=attributes.end())
74  return (i->second=="true");
75  return false;
76  }
77 
78  std::string get_element(const std::string &element) const
79  {
80  elementst::const_iterator i=find(element);
81  if(i!=elements.end())
82  return i->data;
83  return "";
84  }
85 
86  xmlt &new_element(const std::string &key)
87  {
88  elements.push_back(xmlt());
89  elements.back().name = key;
90  return elements.back();
91  }
92 
94  {
95  elements.push_back(xml);
96  return elements.back();
97  }
98 
100  {
101  elements.push_back(xmlt());
102  return elements.back();
103  }
104 
105  void swap(xmlt &xml);
106  void clear();
107 
108  void output(
109  std::ostream &out,
110  unsigned indent=0) const;
111 
112  static void escape(const std::string &s, std::ostream &out);
113  static std::string unescape(const std::string &s);
114 
115  static void escape_attribute(const std::string &s, std::ostream &out);
116 
117 protected:
118  static void do_indent(
119  std::ostream &out,
120  unsigned indent);
121 };
122 
123 inline std::ostream &operator<<(
124  std::ostream &out,
125  const xmlt &xml)
126 {
127  xml.output(out);
128  return out;
129 }
130 
131 #endif // CPROVER_UTIL_XML_H
void set_attribute_bool(const std::string &attribute, bool value)
Definition: xml.h:63
std::string get_element(const std::string &element) const
Definition: xml.h:78
attributest attributes
Definition: xml.h:32
std::list< xmlt > elementst
Definition: xml.h:27
std::string name
Definition: xml.h:30
xmlt & new_element()
Definition: xml.h:99
xmlt(const std::string &_name)
Definition: xml.h:24
xmlt xml(const source_locationt &location)
Definition: xml_expr.cpp:26
std::string get_attribute(const std::string &attribute) const
Definition: xml.h:54
void clear()
Definition: xml.cpp:16
elementst elements
Definition: xml.h:33
xmlt & new_element(const xmlt &xml)
Definition: xml.h:93
void swap(xmlt &xml)
Definition: xml.cpp:24
elementst::const_iterator find(const std::string &key) const
Definition: xml.cpp:153
void set_attribute(const std::string &attribute, unsigned value)
Definition: xml.cpp:175
std::map< std::string, std::string > attributest
Definition: xml.h:28
Definition: xml.h:18
std::string data
Definition: xml.h:30
static std::string unescape(const std::string &s)
takes a string and unescapes any xml style escaped symbols
Definition: xml.cpp:214
static void escape(const std::string &s, std::ostream &out)
escaping for XML elements
Definition: xml.cpp:79
xmlt()
Definition: xml.h:21
bool get_attribute_bool(const std::string &attribute) const
Definition: xml.h:70
std::ostream & operator<<(std::ostream &out, const xmlt &xml)
Definition: xml.h:123
xmlt & new_element(const std::string &key)
Definition: xml.h:86
static void do_indent(std::ostream &out, unsigned indent)
Definition: xml.cpp:148
static void escape_attribute(const std::string &s, std::ostream &out)
escaping for XML attributes, assuming that double quotes " are used consistently, not single quotes
Definition: xml.cpp:116
void output(std::ostream &out, unsigned indent=0) const
Definition: xml.cpp:32