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