PandA-2024.02
xml_document.hpp
Go to the documentation of this file.
1 /*
2  *
3  * _/_/_/ _/_/ _/ _/ _/_/_/ _/_/
4  * _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/
5  * _/_/_/ _/_/_/_/ _/ _/_/ _/ _/ _/_/_/_/
6  * _/ _/ _/ _/ _/ _/ _/ _/ _/
7  * _/ _/ _/ _/ _/ _/_/_/ _/ _/
8  *
9  * ***********************************************
10  * PandA Project
11  * URL: http://panda.dei.polimi.it
12  * Politecnico di Milano - DEIB
13  * System Architectures Group
14  * ***********************************************
15  * Copyright (C) 2004-2024 Politecnico di Milano
16  *
17  * This file is part of the PandA framework.
18  *
19  * The PandA framework is free software; you can redistribute it and/or modify
20  * it under the terms of the GNU General Public License as published by
21  * the Free Software Foundation; either version 3 of the License, or
22  * (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program. If not, see <http://www.gnu.org/licenses/>.
31  *
32  */
43 #ifndef XML_DOCUMENT_HPP
44 #define XML_DOCUMENT_HPP
45 
46 #include <filesystem>
47 #include <fstream>
48 #include <ostream>
49 #include <string>
50 #include <utility>
51 
52 #include "exceptions.hpp"
53 #include "refcount.hpp"
54 #include "xml_element.hpp"
55 #include "xml_node.hpp"
56 
57 class xml_document : public xml_child
58 {
60  std::string version;
61  std::string encoding;
62 
63  public:
66  explicit xml_document(const std::string& _version = "1.0")
67  : xml_child(std::string("")), root_node(nullptr), version(_version)
68  {
69  }
70 
74  void print(std::ostream& os, bool formatted, simple_indent* pp) const override
75  {
76  os << "<?xml version=\"" << version << "\"";
77  if(encoding != "")
78  {
79  os << " encoding=\"" << encoding << "\"";
80  }
81  os << "?>";
82  if(!formatted || !pp)
83  {
84  os << "\n";
85  }
86  xml_child::print(os, formatted, pp);
87  os << "\n";
88  }
89 
95  {
96  return root_node;
97  }
98 
103  xml_element* create_root_node(const std::string& _name)
104  {
105  root_node = add_child_element(_name);
106  return root_node;
107  }
108 
112  void write_to_file(const std::filesystem::path& filename)
113  {
114  std::ofstream xml_file(filename);
115  THROW_UNREACHABLE("Bug: 0-pointer will be used in the next");
116  print(xml_file, false, nullptr);
117  }
118 
124  void write_to_file_formatted(const std::filesystem::path& filename)
125  {
126  std::ofstream xml_file(filename);
128  print(xml_file, true, &PP);
129  }
130 
133  std::string get_encoding() const
134  {
135  return encoding;
136  }
137 
140  void set_encoding(const std::string& _encoding)
141  {
142  encoding = _encoding;
143  }
144 };
145 
146 #endif /*DOCUMENT_HPP_*/
void write_to_file(const std::filesystem::path &filename)
Write the document to a file.
void print(std::ostream &os, bool formatted, simple_indent *pp) const override
Print the class.
std::string filename
exceptions managed by PandA
xml_element * get_root_node() const
Return the root node.
Definition of hash function for EdgeDescriptor.
Definition: graph.hpp:1321
std::string encoding
xml_element * root_node
#define THROW_UNREACHABLE(str_expr)
helper function used to specify that some points should never be reached
Definition: exceptions.hpp:292
xml_document(const std::string &_version="1.0")
constructor
void write_to_file_formatted(const std::filesystem::path &filename)
Write the document to a file.
xml_element * create_root_node(const std::string &_name)
Creates the root node.
std::string get_encoding() const
std::string version
#define STD_OPENING_CHAR
STD include.
void set_encoding(const std::string &_encoding)
Template definition of refcount.
Very simple pretty printer functor.
#define STD_CLOSING_CHAR
Special closing character used to close the current nested level.
void print(std::ostream &os, bool formatted, simple_indent *pp) const override
Print the class.
Definition: xml_node.hpp:240
#define XML_TAB_SIZE
Definition: xml_node.hpp:68
xml_element * add_child_element(const std::string &name)
Add a child element to this node.
Definition: xml_node.cpp:54

Generated on Mon Feb 12 2024 13:02:55 for PandA-2024.02 by doxygen 1.8.13