13 #include "lcf/saveopt.h"
14 #include "lcf/writer_xml.h"
15 #include "lcf/dbstring.h"
16 #include "lcf/dbarray.h"
17 #include "lcf/dbbitarray.h"
21 XmlWriter::XmlWriter(std::ostream& filestream, EngineVersion engine) :
27 stream <<
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
31 XmlWriter::~XmlWriter() {
35 void XmlWriter::Write<bool>(
const bool& val) {
37 stream << (val ?
"T" :
"F");
41 void XmlWriter::Write<int32_t>(
const int32_t& val) {
47 void XmlWriter::Write<int8_t>(
const int8_t& val) {
52 void XmlWriter::Write<uint8_t>(
const uint8_t& val) {
57 void XmlWriter::Write<int16_t>(
const int16_t& val) {
62 void XmlWriter::Write<uint32_t>(
const uint32_t& val) {
68 void XmlWriter::Write<double>(
const double& val) {
73 void XmlWriter::WriteString(StringView val) {
96 if (c >= 0 && c < 32) {
98 snprintf(temp,10,
"&#x%04x;", 0xE000 + c);
109 void XmlWriter::Write<std::string>(
const std::string& val) {
114 void XmlWriter::Write<DBString>(
const DBString& val) {
119 void XmlWriter::Write<std::vector<int32_t>>(
const std::vector<int32_t>& val) {
124 void XmlWriter::Write<std::vector<bool>>(
const std::vector<bool>& val) {
129 void XmlWriter::Write<std::vector<uint8_t>>(
const std::vector<uint8_t>& val) {
134 void XmlWriter::Write<std::vector<int16_t>>(
const std::vector<int16_t>& val) {
139 void XmlWriter::Write<std::vector<uint32_t>>(
const std::vector<uint32_t>& val) {
144 void XmlWriter::Write<std::vector<double>>(
const std::vector<double>& val) {
149 void XmlWriter::Write<DBArray<int32_t>>(
const DBArray<int32_t>& val) {
154 void XmlWriter::Write<DBArray<bool>>(
const DBArray<bool>& val) {
159 void XmlWriter::Write<DBArray<uint8_t>>(
const DBArray<uint8_t>& val) {
164 void XmlWriter::Write<DBArray<int16_t>>(
const DBArray<int16_t>& val) {
169 void XmlWriter::Write<DBArray<uint32_t>>(
const DBArray<uint32_t>& val) {
174 void XmlWriter::Write<DBArray<double>>(
const DBArray<double>& val) {
178 void XmlWriter::WriteInt(
int val) {
183 void XmlWriter::Write(
const DBBitArray& val) {
187 template <
typename ArrayType>
188 void XmlWriter::WriteVector(
const ArrayType& val) {
191 for (
auto&& e: val) {
195 Write<typename ArrayType::value_type>(e);
200 void XmlWriter::WriteNode(
const std::string& name,
const T& val) {
206 void XmlWriter::BeginElement(
const std::string& name) {
209 stream <<
"<" << name <<
">";
213 void XmlWriter::BeginElement(
const std::string& name,
int ID) {
217 snprintf(temp, 6,
"%04d", ID);
218 stream <<
"<" << name <<
" id=\"" << temp <<
"\">";
222 void XmlWriter::EndElement(
const std::string& name) {
225 stream <<
"</" << name <<
">";
229 void XmlWriter::NewLine() {
236 void XmlWriter::Indent() {
239 for (
int i = 0; i < indent; i++)
244 bool XmlWriter::IsOk()
const {
245 return (stream.good());
248 template void XmlWriter::WriteNode<bool>(
const std::string& name,
const bool& val);
249 template void XmlWriter::WriteNode<uint8_t>(
const std::string& name,
const uint8_t& val);
250 template void XmlWriter::WriteNode<int16_t>(
const std::string& name,
const int16_t& val);
251 template void XmlWriter::WriteNode<uint32_t>(
const std::string& name,
const uint32_t& val);
252 template void XmlWriter::WriteNode<int32_t>(
const std::string& name,
const int32_t& val);
253 template void XmlWriter::WriteNode<double>(
const std::string& name,
const double& val);
254 template void XmlWriter::WriteNode<std::string>(
const std::string& name,
const std::string& val);
255 template void XmlWriter::WriteNode<DBString>(
const std::string& name,
const DBString& val);
257 template void XmlWriter::WriteNode<std::vector<bool>>(
const std::string& name,
const std::vector<bool>& val);
258 template void XmlWriter::WriteNode<std::vector<uint8_t>>(
const std::string& name,
const std::vector<uint8_t>& val);
259 template void XmlWriter::WriteNode<std::vector<int16_t>>(
const std::string& name,
const std::vector<int16_t>& val);
260 template void XmlWriter::WriteNode<std::vector<uint32_t>>(
const std::string& name,
const std::vector<uint32_t>& val);
261 template void XmlWriter::WriteNode<std::vector<int32_t>>(
const std::string& name,
const std::vector<int32_t>& val);
263 template void XmlWriter::WriteNode<DBArray<bool>>(
const std::string& name,
const DBArray<bool>& val);
264 template void XmlWriter::WriteNode<DBArray<uint8_t>>(
const std::string& name,
const DBArray<uint8_t>& val);
265 template void XmlWriter::WriteNode<DBArray<int16_t>>(
const std::string& name,
const DBArray<int16_t>& val);
266 template void XmlWriter::WriteNode<DBArray<uint32_t>>(
const std::string& name,
const DBArray<uint32_t>& val);
267 template void XmlWriter::WriteNode<DBArray<int32_t>>(
const std::string& name,
const DBArray<int32_t>& val);