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) {
94 if (c >= 0 && c < 32) {
96 snprintf(temp,10,
"&#x%04x;", 0xE000 + c);
107 void XmlWriter::Write<std::string>(
const std::string& val) {
112 void XmlWriter::Write<DBString>(
const DBString& val) {
117 void XmlWriter::Write<std::vector<int32_t>>(
const std::vector<int32_t>& val) {
122 void XmlWriter::Write<std::vector<bool>>(
const std::vector<bool>& val) {
127 void XmlWriter::Write<std::vector<uint8_t>>(
const std::vector<uint8_t>& val) {
132 void XmlWriter::Write<std::vector<int16_t>>(
const std::vector<int16_t>& val) {
137 void XmlWriter::Write<std::vector<uint32_t>>(
const std::vector<uint32_t>& val) {
142 void XmlWriter::Write<std::vector<double>>(
const std::vector<double>& val) {
147 void XmlWriter::Write<DBArray<int32_t>>(
const DBArray<int32_t>& val) {
152 void XmlWriter::Write<DBArray<bool>>(
const DBArray<bool>& val) {
157 void XmlWriter::Write<DBArray<uint8_t>>(
const DBArray<uint8_t>& val) {
162 void XmlWriter::Write<DBArray<int16_t>>(
const DBArray<int16_t>& val) {
167 void XmlWriter::Write<DBArray<uint32_t>>(
const DBArray<uint32_t>& val) {
172 void XmlWriter::Write<DBArray<double>>(
const DBArray<double>& val) {
176 void XmlWriter::WriteInt(
int val) {
181 void XmlWriter::Write(
const DBBitArray& val) {
185 template <
typename ArrayType>
186 void XmlWriter::WriteVector(
const ArrayType& val) {
189 for (
auto&& e: val) {
193 Write<typename ArrayType::value_type>(e);
198 void XmlWriter::WriteNode(
const std::string& name,
const T& val) {
204 void XmlWriter::BeginElement(
const std::string& name) {
207 stream <<
"<" << name <<
">";
211 void XmlWriter::BeginElement(
const std::string& name,
int ID) {
215 snprintf(temp, 6,
"%04d", ID);
216 stream <<
"<" << name <<
" id=\"" << temp <<
"\">";
220 void XmlWriter::EndElement(
const std::string& name) {
223 stream <<
"</" << name <<
">";
227 void XmlWriter::NewLine() {
234 void XmlWriter::Indent() {
237 for (
int i = 0; i < indent; i++)
242 bool XmlWriter::IsOk()
const {
243 return (stream.good());
246 template void XmlWriter::WriteNode<bool>(
const std::string& name,
const bool& val);
247 template void XmlWriter::WriteNode<uint8_t>(
const std::string& name,
const uint8_t& val);
248 template void XmlWriter::WriteNode<int16_t>(
const std::string& name,
const int16_t& val);
249 template void XmlWriter::WriteNode<uint32_t>(
const std::string& name,
const uint32_t& val);
250 template void XmlWriter::WriteNode<int32_t>(
const std::string& name,
const int32_t& val);
251 template void XmlWriter::WriteNode<double>(
const std::string& name,
const double& val);
252 template void XmlWriter::WriteNode<std::string>(
const std::string& name,
const std::string& val);
253 template void XmlWriter::WriteNode<DBString>(
const std::string& name,
const DBString& val);
255 template void XmlWriter::WriteNode<std::vector<bool>>(
const std::string& name,
const std::vector<bool>& val);
256 template void XmlWriter::WriteNode<std::vector<uint8_t>>(
const std::string& name,
const std::vector<uint8_t>& val);
257 template void XmlWriter::WriteNode<std::vector<int16_t>>(
const std::string& name,
const std::vector<int16_t>& val);
258 template void XmlWriter::WriteNode<std::vector<uint32_t>>(
const std::string& name,
const std::vector<uint32_t>& val);
259 template void XmlWriter::WriteNode<std::vector<int32_t>>(
const std::string& name,
const std::vector<int32_t>& val);
261 template void XmlWriter::WriteNode<DBArray<bool>>(
const std::string& name,
const DBArray<bool>& val);
262 template void XmlWriter::WriteNode<DBArray<uint8_t>>(
const std::string& name,
const DBArray<uint8_t>& val);
263 template void XmlWriter::WriteNode<DBArray<int16_t>>(
const std::string& name,
const DBArray<int16_t>& val);
264 template void XmlWriter::WriteNode<DBArray<uint32_t>>(
const std::string& name,
const DBArray<uint32_t>& val);
265 template void XmlWriter::WriteNode<DBArray<int32_t>>(
const std::string& name,
const DBArray<int32_t>& val);