From b48d55671e7d8c3fdd2d9c3fc966ed1bfd13056b Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 15 Jan 2022 17:44:56 +0100 Subject: [PATCH] Add AbstractTextDumper to implement stream holding and indendation --- src/ObjWriting/Dumping/AbstractTextDumper.cpp | 28 +++++++++++++++++++ src/ObjWriting/Dumping/AbstractTextDumper.h | 16 +++++++++++ .../Dumping/Localize/StringFileDumper.cpp | 6 ++-- .../Dumping/Localize/StringFileDumper.h | 6 ++-- .../Dumping/MapFile/MapFileDumper.cpp | 21 +------------- .../Dumping/MapFile/MapFileDumper.h | 13 ++++----- .../Dumping/SndCurve/SndCurveDumper.cpp | 2 +- .../Dumping/SndCurve/SndCurveDumper.h | 6 ++-- 8 files changed, 60 insertions(+), 38 deletions(-) create mode 100644 src/ObjWriting/Dumping/AbstractTextDumper.cpp create mode 100644 src/ObjWriting/Dumping/AbstractTextDumper.h diff --git a/src/ObjWriting/Dumping/AbstractTextDumper.cpp b/src/ObjWriting/Dumping/AbstractTextDumper.cpp new file mode 100644 index 00000000..5dcb847f --- /dev/null +++ b/src/ObjWriting/Dumping/AbstractTextDumper.cpp @@ -0,0 +1,28 @@ +#include "AbstractTextDumper.h" + +#include + +AbstractTextDumper::AbstractTextDumper(std::ostream& stream) + : m_stream(stream), + m_indent(0u) +{ + +} + +void AbstractTextDumper::Indent() const +{ + for (auto i = 0u; i < m_indent; i++) + m_stream << " "; +} + +void AbstractTextDumper::IncIndent() +{ + ++m_indent; +} + +void AbstractTextDumper::DecIndent() +{ + assert(m_indent > 0); + if (m_indent > 0) + m_indent--; +} \ No newline at end of file diff --git a/src/ObjWriting/Dumping/AbstractTextDumper.h b/src/ObjWriting/Dumping/AbstractTextDumper.h new file mode 100644 index 00000000..38ff119d --- /dev/null +++ b/src/ObjWriting/Dumping/AbstractTextDumper.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +class AbstractTextDumper +{ +protected: + std::ostream& m_stream; + size_t m_indent; + + void Indent() const; + void IncIndent(); + void DecIndent(); + + explicit AbstractTextDumper(std::ostream& stream); +}; \ No newline at end of file diff --git a/src/ObjWriting/Dumping/Localize/StringFileDumper.cpp b/src/ObjWriting/Dumping/Localize/StringFileDumper.cpp index 14d85237..33eb1575 100644 --- a/src/ObjWriting/Dumping/Localize/StringFileDumper.cpp +++ b/src/ObjWriting/Dumping/Localize/StringFileDumper.cpp @@ -2,8 +2,8 @@ #include StringFileDumper::StringFileDumper(Zone* zone, std::ostream& stream) - : m_zone(zone), - m_stream(stream), + : AbstractTextDumper(stream), + m_zone(zone), m_language_caps("ENGLISH"), m_wrote_header(false) { @@ -42,7 +42,7 @@ void StringFileDumper::WriteLocalizeEntry(const std::string& reference, const st WriteHeader(); m_stream << "\n"; - m_stream << "REFERENCE " << reference <<"\n"; + m_stream << "REFERENCE " << reference << "\n"; auto escapedValue = std::regex_replace(value, std::regex("\n"), "\\n"); escapedValue = std::regex_replace(escapedValue, std::regex("\r"), "\\r"); diff --git a/src/ObjWriting/Dumping/Localize/StringFileDumper.h b/src/ObjWriting/Dumping/Localize/StringFileDumper.h index 23d0cf5d..5a9c9a86 100644 --- a/src/ObjWriting/Dumping/Localize/StringFileDumper.h +++ b/src/ObjWriting/Dumping/Localize/StringFileDumper.h @@ -1,13 +1,11 @@ #pragma once -#include - +#include "Dumping/AbstractTextDumper.h" #include "Zone/Zone.h" -class StringFileDumper +class StringFileDumper : AbstractTextDumper { Zone* m_zone; - std::ostream& m_stream; std::string m_config_file; std::string m_notes; diff --git a/src/ObjWriting/Dumping/MapFile/MapFileDumper.cpp b/src/ObjWriting/Dumping/MapFile/MapFileDumper.cpp index 8f013032..a524ac57 100644 --- a/src/ObjWriting/Dumping/MapFile/MapFileDumper.cpp +++ b/src/ObjWriting/Dumping/MapFile/MapFileDumper.cpp @@ -32,32 +32,13 @@ MapFileDumper::PhysicsCylinder::PhysicsCylinder(const Vec3 middlePoint, const fl } MapFileDumper::MapFileDumper(std::ostream& stream) - : m_stream(stream), + : AbstractTextDumper(stream), m_flags{}, - m_indent(0u), m_entity_index(0u), m_brush_index(0u) { } -void MapFileDumper::Indent() const -{ - for (auto i = 0u; i < m_indent; i++) - m_stream << " "; -} - -void MapFileDumper::IncIndent() -{ - ++m_indent; -} - -void MapFileDumper::DecIndent() -{ - assert(m_indent > 0); - if (m_indent > 0) - m_indent--; -} - void MapFileDumper::Init() const { m_stream << "iwmap 4\n"; diff --git a/src/ObjWriting/Dumping/MapFile/MapFileDumper.h b/src/ObjWriting/Dumping/MapFile/MapFileDumper.h index ff9b5843..fd8f20ec 100644 --- a/src/ObjWriting/Dumping/MapFile/MapFileDumper.h +++ b/src/ObjWriting/Dumping/MapFile/MapFileDumper.h @@ -2,7 +2,9 @@ #include -class MapFileDumper +#include "Dumping/AbstractTextDumper.h" + +class MapFileDumper : AbstractTextDumper { public: union Vec3 @@ -13,6 +15,7 @@ public: float m_y; float m_z; }; + float v[3]; Vec3(float x, float y, float z); @@ -39,21 +42,15 @@ public: }; private: - std::ostream& m_stream; - struct { bool m_in_entity : 1; bool m_in_brush : 1; } m_flags; - size_t m_indent; + size_t m_entity_index; size_t m_brush_index; - void Indent() const; - void IncIndent(); - void DecIndent(); - public: explicit MapFileDumper(std::ostream& stream); diff --git a/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.cpp b/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.cpp index 752c4c41..5480db86 100644 --- a/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.cpp +++ b/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.cpp @@ -9,7 +9,7 @@ SndCurveDumper::SndCurveDumper(std::ostream& stream) } SndCurveDumper::SndCurveDumper(std::ostream& stream, const size_t precision) - : m_stream(stream), + : AbstractTextDumper(stream), m_precision(precision), m_current_knot(0u), m_total_knots(0u) diff --git a/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.h b/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.h index ec0a4b83..5394bce0 100644 --- a/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.h +++ b/src/ObjWriting/Dumping/SndCurve/SndCurveDumper.h @@ -1,11 +1,13 @@ #pragma once + #include -class SndCurveDumper +#include "Dumping/AbstractTextDumper.h" + +class SndCurveDumper : AbstractTextDumper { static constexpr auto DEFAULT_PRECISION = 4; - std::ostream& m_stream; size_t m_precision; size_t m_current_knot; size_t m_total_knots;