QMCPACK
XMLWriterClass2.h
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Paul R. C. Kent, kentpr@ornl.gov, Oak Ridge National Laboratory
8 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
9 //
10 // File created by: Paul R. C. Kent, kentpr@ornl.gov, Oak Ridge National Laboratory
11 //////////////////////////////////////////////////////////////////////////////////////
12 
13 
14 #ifndef XML_WRITER_CLASS2
15 #define XML_WRITER_CLASS2
16 
17 #include <vector>
18 #include <string>
19 #include <iostream>
20 #include <fstream>
21 #include <sstream>
22 #include <memory> // std::shared_ptr
23 
24 
26 {
27  std::string Name, Content;
28 
29 public:
30  void Write(std::ostream& out);
31  void Write(std::string& out);
32 
33  XMLAttribute(std::string name, std::string content);
34 
35  XMLAttribute(std::string name, double val);
36  XMLAttribute(std::string name, int val);
37  XMLAttribute(const XMLAttribute& attr);
38 };
39 
41 {
42  std::vector<std::shared_ptr<XMLAttribute>> Attributes;
43  std::vector<std::shared_ptr<XMLElement>> Children;
44  std::string Name, Content;
45  int Level;
46  void Indent(std::ostream& out);
47 
48 public:
49  void Write(std::ostream& out);
50 
51  inline int GetLevel() { return Level; }
52 
53  void AddElement(std::shared_ptr<XMLElement>& elem) { Children.push_back(elem); }
54 
55  void AddAttribute(std::shared_ptr<XMLAttribute>& attr) { Attributes.push_back(attr); }
56 
57  void AddContent(std::string content) { Content += content; }
58 
59  void AddContent(std::vector<double>& data);
60 
61  XMLElement(std::string name, int level = 0)
62  {
63  Name = name;
64  Level = level;
65  }
66 
67  XMLElement(const XMLElement& elem);
68 };
69 
70 
72 {
73 private:
74  std::vector<std::shared_ptr<XMLElement>> Elements;
75  void Write();
76  std::ofstream Out;
77 
78 public:
79  bool StartDocument(std::string fname,
80  std::string version = "",
81  std::string encoding = "",
82  std::string standalone = "");
83  bool EndDocument();
84  bool StartElement(std::string name);
85  bool EndElement();
86  bool FullEndElement();
87  bool WriteAttribute(std::string name, std::string content);
88  bool WriteAttribute(std::string name, double val, bool scientific = false);
89  bool WriteAttribute(std::string name, int val);
90  bool WriteData(std::vector<double> data);
91  bool WriteData(std::string content);
92  bool WriteElement(std::string name, std::vector<double> data);
93  template<typename T>
94  bool WriteData(T data);
95 };
96 
97 template<typename T>
99 {
100  std::stringstream content;
101  content << " " << data << " ";
102  Elements.back()->AddContent(content.str());
103  return true;
104 }
105 
106 
107 #endif
void Write(std::ostream &out)
bool StartElement(std::string name)
std::vector< std::shared_ptr< XMLElement > > Children
bool FullEndElement()
bool WriteElement(std::string name, std::vector< double > data)
bool StartDocument(std::string fname, std::string version="", std::string encoding="", std::string standalone="")
std::vector< std::shared_ptr< XMLElement > > Elements
XMLElement(std::string name, int level=0)
void AddElement(std::shared_ptr< XMLElement > &elem)
std::string Content
bool EndDocument()
std::ofstream Out
std::string Content
bool WriteData(std::vector< double > data)
void AddAttribute(std::shared_ptr< XMLAttribute > &attr)
void AddContent(std::string content)
void Indent(std::ostream &out)
std::string Name
void Write(std::ostream &out)
XMLAttribute(std::string name, std::string content)
std::vector< std::shared_ptr< XMLAttribute > > Attributes
const char version[]
Definition: HDFVersion.h:30
std::string Name
bool WriteAttribute(std::string name, std::string content)