From 4dc792bc1deaf2c2410de44d78581b100f302b86 Mon Sep 17 00:00:00 2001 From: Ted John Date: Wed, 22 Feb 2017 17:52:33 +0000 Subject: [PATCH] Use IStream for IniReader and IniWriter --- src/openrct2/config/Config.cpp | 7 +++++-- src/openrct2/config/IniReader.cpp | 11 +++++------ src/openrct2/config/IniReader.hpp | 4 +++- src/openrct2/config/IniWriter.cpp | 14 +++++++------- src/openrct2/config/IniWriter.hpp | 4 +++- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/openrct2/config/Config.cpp b/src/openrct2/config/Config.cpp index 89b11af5fd..753302ad97 100644 --- a/src/openrct2/config/Config.cpp +++ b/src/openrct2/config/Config.cpp @@ -17,6 +17,7 @@ #include #include "../core/Console.hpp" #include "../core/Exception.hpp" +#include "../core/FileStream.hpp" #include "../core/Memory.hpp" #include "../core/Path.hpp" #include "../core/String.hpp" @@ -505,7 +506,8 @@ namespace Config { try { - auto reader = std::unique_ptr(CreateIniReader(path)); + auto fs = FileStream(path, FILE_MODE_OPEN); + auto reader = std::unique_ptr(CreateIniReader(&fs)); ReadGeneral(reader.get()); ReadInterface(reader.get()); ReadSound(reader.get()); @@ -525,7 +527,8 @@ namespace Config { try { - auto writer = std::unique_ptr(CreateIniWriter(path)); + auto fs = FileStream(path, FILE_MODE_WRITE); + auto writer = std::unique_ptr(CreateIniWriter(&fs)); WriteGeneral(writer.get()); WriteInterface(writer.get()); WriteSound(writer.get()); diff --git a/src/openrct2/config/IniReader.cpp b/src/openrct2/config/IniReader.cpp index d732d25c47..4577deda72 100644 --- a/src/openrct2/config/IniReader.cpp +++ b/src/openrct2/config/IniReader.cpp @@ -60,12 +60,11 @@ private: std::unordered_map _values; public: - IniReader(const std::string &path) + IniReader(IStream * stream) { - auto fs = FileStream(path, FILE_MODE_OPEN); - uint64 length = fs.GetLength(); + uint64 length = stream->GetLength() - stream->GetPosition(); _buffer.resize(length); - fs.Read(_buffer.data(), length); + stream->Read(_buffer.data(), length); RemoveBOM(); @@ -368,9 +367,9 @@ utf8 * IIniReader::GetCString(const std::string &name, const utf8 * defaultValue return String::Duplicate(szValue.c_str()); } -IIniReader * CreateIniReader(const std::string &path) +IIniReader * CreateIniReader(IStream * stream) { - return new IniReader(path); + return new IniReader(stream); } IIniReader * CreateDefaultIniReader() diff --git a/src/openrct2/config/IniReader.hpp b/src/openrct2/config/IniReader.hpp index 3b8df92550..e5fee1c671 100644 --- a/src/openrct2/config/IniReader.hpp +++ b/src/openrct2/config/IniReader.hpp @@ -18,6 +18,8 @@ #include "../common.h" #include "ConfigEnum.hpp" +interface IStream; + interface IIniReader { virtual ~IIniReader() = default; @@ -45,5 +47,5 @@ interface IIniReader utf8 * GetCString(const std::string &name, const utf8 * defaultValue) const; }; -IIniReader * CreateIniReader(const std::string &path); +IIniReader * CreateIniReader(IStream * stream); IIniReader * CreateDefaultIniReader(); diff --git a/src/openrct2/config/IniWriter.cpp b/src/openrct2/config/IniWriter.cpp index bad2ca1a88..c09e23a262 100644 --- a/src/openrct2/config/IniWriter.cpp +++ b/src/openrct2/config/IniWriter.cpp @@ -22,12 +22,12 @@ class IniWriter final : public IIniWriter { private: - FileStream _fs; + IStream * _stream; bool _firstSection = false; public: - IniWriter(const std::string &path) - : _fs(path, FILE_MODE_WRITE) + IniWriter(IStream * stream) + : _stream(stream) { } @@ -87,12 +87,12 @@ private: void WriteLine() { - _fs.Write(PLATFORM_NEWLINE, String::SizeOf(PLATFORM_NEWLINE)); + _stream->Write(PLATFORM_NEWLINE, String::SizeOf(PLATFORM_NEWLINE)); } void WriteLine(const std::string &line) { - _fs.Write(line.c_str(), line.size()); + _stream->Write(line.c_str(), line.size()); WriteLine(); } }; @@ -102,7 +102,7 @@ void IIniWriter::WriteString(const std::string &name, const utf8 * value) WriteString(name, String::ToStd(value)); } -IIniWriter * CreateIniWriter(const std::string &path) +IIniWriter * CreateIniWriter(IStream * stream) { - return new IniWriter(path); + return new IniWriter(stream); } diff --git a/src/openrct2/config/IniWriter.hpp b/src/openrct2/config/IniWriter.hpp index a323a91360..434d710116 100644 --- a/src/openrct2/config/IniWriter.hpp +++ b/src/openrct2/config/IniWriter.hpp @@ -18,6 +18,8 @@ #include "../common.h" #include "ConfigEnum.hpp" +interface IStream; + interface IIniWriter { virtual ~IIniWriter() = default; @@ -47,4 +49,4 @@ interface IIniWriter void WriteString(const std::string &name, const utf8 * value); }; -IIniWriter * CreateIniWriter(const std::string &path); +IIniWriter * CreateIniWriter(IStream * stream);