xmlserializer.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008 by Marc Boris Duerner
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * As a special exception, you may use this file as part of a free
10  * software library without restriction. Specifically, if other files
11  * instantiate templates or use macros or inline functions from this
12  * file, or you compile this file and link it with other files to
13  * produce an executable, this file does not by itself cause the
14  * resulting executable to be covered by the GNU General Public
15  * License. This exception does not however invalidate any other
16  * reasons why the executable file might be covered by the GNU Library
17  * General Public License.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27  */
28 #ifndef cxxtools_Xml_XmlSerializer_h
29 #define cxxtools_Xml_XmlSerializer_h
30 
32 #include <cxxtools/decomposer.h>
33 #include <sstream>
34 
35 namespace cxxtools
36 {
37 
38 namespace xml
39 {
40 
47 {
48  // make non copyable
49  XmlSerializer(const XmlSerializer&) { }
50  XmlSerializer& operator=(const XmlSerializer&) { return *this; }
51 
52  public:
59  XmlSerializer();
60 
66  XmlSerializer(std::ostream& os);
67 
75 
78 
89  void attach(std::ostream& os);
90 
103  void attach(cxxtools::xml::XmlWriter& writer);
104 
110  void detach();
111 
112  void useXmlDeclaration(bool sw)
113  { _formatter.useXmlDeclaration(sw); }
114 
115  bool useXmlDeclaration() const
116  { return _formatter.useXmlDeclaration(); }
117 
118  void useIndent(bool sw)
119  { _formatter.useIndent(sw); }
120 
121  bool useIndent() const
122  { return _formatter.useIndent(); }
123 
124  void useEndl(bool sw)
125  { _formatter.useEndl(sw); }
126 
127  bool useEndl() const
128  { return _formatter.useEndl(); }
129 
130  void useAttributes(bool sw)
131  { _formatter.useAttributes(sw); }
132 
133  bool useAttributes() const
134  { return _formatter.useAttributes(); }
135 
143  template <typename T>
144  void serialize(const T& type, const std::string& name)
145  {
146  Decomposer<T> decomposer;
147  decomposer.begin(type);
148  decomposer.setName(name);
149  decomposer.format(_formatter);
150  _formatter.finish();
151  _formatter.flush();
152  }
153 
154  void finish()
155  {
156  }
157 
158  template <typename T>
159  static std::string toString(const T& type, const std::string& name, bool beautify = false)
160  {
161  std::ostringstream os;
164  XmlSerializer s(&writer);
165  s.serialize(type, name);
166  s.finish();
167  return os.str();
168  }
169 
170  private:
171  XmlFormatter _formatter;
172 };
173 
174 } // namespace xml
175 
176 } // namespace cxxtools
177 
178 #endif