ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
XML.h
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2//
3// This file is part of ETISS. It is licensed under the BSD 3-Clause License; you may not use this file except in
4// compliance with the License. You should have received a copy of the license along with this project. If not, see the
5// LICENSE file.
14#ifndef ETISS_FAULT_XML_H_
15#define ETISS_FAULT_XML_H_
16
17#include <list>
18#include <string>
19#include <vector>
20
21#ifndef NO_ETISS
22#include "etiss/fault/Defs.h"
23#include "pugixml.hpp"
24#else
25#include "fault/Defs.h"
26#include "pugixml.hpp"
27#endif
28
29#include <cstdio>
30
31namespace etiss
32{
33
34namespace fault
35{
36
37// forwards
38class Trigger;
39class Fault;
40class FaultRef;
41class Action;
42class InjectorAddress;
43
44// some helper for changing Core Names
45extern int coreIDActuallXML;
46void setCoreName(std::string &str);
47
48#if ETISS_FAULT_XML
49
85namespace xml
86{
87
91class Diagnostics
92{
93 public:
94 std::list<std::string> warnings;
95 std::list<std::string> errors;
96 void ignoredNode(const pugi::xml_node &node, const std::string &msg);
97 void unexpectedNode(const pugi::xml_node &node, const std::string &msg);
98 void print(std::ostream &out) const;
99};
100
102#if CXX0X_UP_SUPPORTED
103template <typename T>
104bool parse(pugi::xml_node node, T &dst, Diagnostics &diag)
105{
106 static_assert((sizeof(T) == -1), "etiss::fault::xml::parse needs to be specialized.");
107 return false;
108}
109template <typename T>
110bool write(pugi::xml_node node, const T &src, Diagnostics &diag)
111{
112 static_assert((sizeof(T) == -1), "etiss::fault::xml::write needs to be specialized.");
113 return false;
114}
115#else
116template <typename T>
117bool parse(pugi::xml_node node, T &dst, Diagnostics &diag);
118template <typename T>
119bool write(pugi::xml_node node, const T &src, Diagnostics &diag);
120#endif
121
122#if CXX0X_UP_SUPPORTED
123template <typename T>
124bool parse_attr(pugi::xml_node node, const std::string &attr_name, T &dst, Diagnostics &diag)
125{
126 static_assert((sizeof(T) == -1), "etiss::fault::xml::parse_attr needs to be specialized.");
127 return false;
128}
129template <typename T>
130bool write_attr(pugi::xml_node node, const std::string &attr_name, const T &src, Diagnostics &diag)
131{
132 static_assert((sizeof(T) == -1), "etiss::fault::xml::write_attr needs to be specialized.");
133 return false;
134}
135#else
136template <typename T>
137bool parse_attr(pugi::xml_node node, const std::string &attr_name, T &dst, Diagnostics &diag);
138template <typename T>
139bool write_attr(pugi::xml_node node, const std::string &attr_name, const T &src, Diagnostics &diag);
140#endif
141
143
144template <>
145bool parse<std::string>(pugi::xml_node node, std::string &dst, Diagnostics &diag);
146template <>
147bool write<std::string>(pugi::xml_node node, const std::string &src, Diagnostics &diag);
148
149template <>
150bool parse<uint64_t>(pugi::xml_node node, uint64_t &dst, Diagnostics &diag);
151
152bool parse_hex(pugi::xml_node node, uint64_t &dst, Diagnostics &diag);
153template <>
154bool write<uint64_t>(pugi::xml_node node, const uint64_t &src, Diagnostics &diag);
155
156template <>
157bool parse<unsigned>(pugi::xml_node node, unsigned &dst, Diagnostics &diag);
158template <>
159bool write<unsigned>(pugi::xml_node node, const unsigned &src, Diagnostics &diag);
160
161template <>
162bool parse_attr<std::string>(pugi::xml_node node, const std::string &attr_name, std::string &dst, Diagnostics &diag);
163template <>
164bool write_attr<std::string>(pugi::xml_node node, const std::string &attr_name, const std::string &src,
165 Diagnostics &diag);
166
168template <typename T>
170bool fromString(const std::string &s, T &val);
171
172template <>
173bool fromString<uint64_t>(const std::string &s, uint64_t &val);
174template <>
175bool fromString<unsigned>(const std::string &s, unsigned &val);
176
177bool hasName(const pugi::xml_node &node, const std::string &name);
178bool hasName(const pugi::xml_attribute &attr, const std::string &name);
179
180pugi::xml_node findSingleNode(pugi::xml_node node, const std::string &name, Diagnostics &diag);
181
183
184// TRIGGER
185template <>
186bool parse<etiss::fault::Trigger *>(pugi::xml_node node, etiss::fault::Trigger *&f, Diagnostics &diag);
187template <>
188bool write<const etiss::fault::Trigger *>(pugi::xml_node node, const etiss::fault::Trigger *const &f,
189 Diagnostics &diag);
190
191template <>
192bool parse<etiss::fault::Trigger>(pugi::xml_node node, etiss::fault::Trigger &f, Diagnostics &diag);
193template <>
194bool write<etiss::fault::Trigger>(pugi::xml_node node, const etiss::fault::Trigger &f, Diagnostics &diag);
195
196// FAULT
197template <>
198bool parse<etiss::fault::Fault>(pugi::xml_node node, etiss::fault::Fault &f, Diagnostics &diag);
199template <>
200bool write<etiss::fault::Fault>(pugi::xml_node node, const etiss::fault::Fault &f, Diagnostics &diag);
201template <>
202bool parse<etiss::fault::FaultRef>(pugi::xml_node node, etiss::fault::FaultRef &fref, Diagnostics &diag);
203template <>
204bool write<etiss::fault::FaultRef>(pugi::xml_node node, const etiss::fault::FaultRef &fref, Diagnostics &diag);
205
206// ACTION
207template <>
208bool parse<etiss::fault::Action>(pugi::xml_node node, etiss::fault::Action &f, Diagnostics &diag);
209template <>
210bool write<etiss::fault::Action>(pugi::xml_node node, const etiss::fault::Action &f, Diagnostics &diag);
211
212// INJECTORADDRESS
213template <>
214bool parse<etiss::fault::InjectorAddress>(pugi::xml_node node, etiss::fault::InjectorAddress &dst, Diagnostics &diag);
215template <>
216bool write<etiss::fault::InjectorAddress>(pugi::xml_node node, const etiss::fault::InjectorAddress &src,
217 Diagnostics &diag);
218
219template <>
220bool parse<etiss::fault::InjectorAddress *>(pugi::xml_node node, etiss::fault::InjectorAddress *&dst,
221 Diagnostics &diag);
222template <>
223bool write<const etiss::fault::InjectorAddress *>(pugi::xml_node node, const etiss::fault::InjectorAddress *const &src,
224 Diagnostics &diag);
225
226} // namespace xml
227#endif
228
231bool parseXML(pugi::xml_document &doc, std::istream &input, std::ostream &diagnostics_out = std::cout);
232
233bool parseXML(std::vector<Fault> &vec, const pugi::xml_document &doc, xml::Diagnostics &diag);
234bool parseXML(std::vector<FaultRef> &vec, const pugi::xml_document &doc, xml::Diagnostics &diag);
235
236bool writeXML(const std::vector<Fault> &vec, std::ostream &out, std::ostream &diagnostics_out = std::cout);
237
238} // namespace fault
239
240} // namespace etiss
241
242#endif
contains general definitions used by other fault library code
__device__ __2f16 float bool s
static __inline__ uint64_t
Definition arm_cde.h:31
void setCoreName(std::string &str)
Definition XML.cpp:26
bool writeXML(const std::vector< Fault > &vec, std::ostream &out, std::ostream &diagnostics_out=std::cout)
int coreIDActuallXML
Definition XML.cpp:25
bool parseXML(pugi::xml_document &doc, std::istream &input, std::ostream &diagnostics_out=std::cout)
parse a XML document held in input stream and return as doc
Definition XML.cpp:257
forwards: include/jit/*
Definition Benchmark.h:17