YAPOG  0.0.1
Yet Another Pokemon Online Game
XmlTree.cpp
Go to the documentation of this file.
1 #include <boost/optional.hpp>
2 
6 
7 namespace yap
8 {
10  : rootData_ ()
11  , data_ (nullptr)
12  {
13  }
14 
15  XmlTree::XmlTree (const XmlTree& copy)
16  : rootData_ ()
17  , data_ (copy.data_)
18  {
19  }
20 
21  void XmlTree::Create (const String& rootName)
22  {
23  data_ = &GetRootData ();
24 
25  Add (rootName, "");
26  }
27 
28  void XmlTree::CreateFromStream (IStream& iStream, const String& rootName)
29  {
30  read_xml (iStream, GetRootData ());
31 
32  data_ = &GetRootData ();
33  }
34 
35  void XmlTree::CreateFromXmlTree (const String& rootName, XmlTree& copy)
36  {
37  data_ = &copy.GetChild (rootName);
38  }
39 
41  {
42  data_ = data;
43  }
44 
45  void XmlTree::Dump (OStream& oStream)
46  {
47  boost::property_tree::xml_writer_settings<char> w (' ', 2);
48 
49  write_xml (oStream, rootData_, w);
50  }
51 
53  {
54  XmlTreePtrType xmlTreePtr (new XmlTree ());
55 
56  xmlTreePtr->CreateFromXmlTree (rootName, *this);
57 
58  return xmlTreePtr;
59  }
60 
61  bool XmlTree::NodeExists (const String& name) const
62  {
63  boost::optional<DataType&> targetNode =
64  data_->get_child_optional (name);
65 
66  return targetNode;
67  }
68 
69  const String& XmlTree::GetNode (int index) const
70  {
71  for (const DataType::value_type& node : *data_)
72  {
73  if (index-- == 0)
74  return node.first;
75  }
76 
77  YAPOG_THROW("Index out of bound: " + StringHelper::ToString (index));
78  }
79 
81  {
82  return data_;
83  }
84 
86  {
87  return data_->get_child (name);
88  }
89 
91  {
92  return GetRootData ().get_child (name);
93  }
94 
96  {
97  return rootData_;
98  }
99 
101  {
102  return rootData_;
103  }
104 } // namespace yap