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