From c214398fac914617fe75a9c9b26ea97e6a0533a6 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Mon, 10 Jun 2024 23:11:25 +0200 Subject: [PATCH] Deprecated readString() method so it is always clear if you want to read a binary encoded string or the file as string. Also added possibility to open a memory stream from any span. --- source/mijin/io/stream.cpp | 8 ++++---- source/mijin/io/stream.hpp | 26 +++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/source/mijin/io/stream.cpp b/source/mijin/io/stream.cpp index e940369..b6d2949 100644 --- a/source/mijin/io/stream.cpp +++ b/source/mijin/io/stream.cpp @@ -34,7 +34,7 @@ namespace mijin void Stream::flush() {} -StreamError Stream::readString(std::string& outString) +StreamError Stream::readBinaryString(std::string& outString) { std::uint32_t length; // NOLINT(cppcoreguidelines-init-variables) StreamError error = read(length); @@ -52,7 +52,7 @@ StreamError Stream::readString(std::string& outString) return StreamError::SUCCESS; } -StreamError Stream::writeString(std::string_view str) +StreamError Stream::writeBinaryString(std::string_view str) { assert(str.length() <= std::numeric_limits::max()); const std::uint32_t length = static_cast(str.length()); @@ -275,10 +275,10 @@ void MemoryStream::openRW(std::span data) canWrite_ = true; } -void MemoryStream::openRO(std::span data) +void MemoryStream::openROImpl(const void* data, std::size_t bytes) { assert(!isOpen()); - data_ = std::span(const_cast(data.data()), data.size()); // NOLINT(cppcoreguidelines-pro-type-const-cast) we'll be fine + data_ = std::span(const_cast(static_cast(data)), bytes); // NOLINT(cppcoreguidelines-pro-type-const-cast) we'll be fine pos_ = 0; canWrite_ = false; } diff --git a/source/mijin/io/stream.hpp b/source/mijin/io/stream.hpp index ba549c2..4ee5e36 100644 --- a/source/mijin/io/stream.hpp +++ b/source/mijin/io/stream.hpp @@ -137,14 +137,25 @@ public: return writeSpan(std::span(std::forward(begin), std::forward(end))); } - StreamError readString(std::string& outString); - StreamError writeString(std::string_view str); + StreamError readBinaryString(std::string& outString); + StreamError writeBinaryString(std::string_view str); + + [[deprecated("Use readBinaryString() or readAsString() instead.")]] + inline StreamError readString(std::string& outString) { return readBinaryString(outString); } + + [[deprecated("Use writeBinaryString() or writeText() instead.")]] + inline StreamError writeString(std::string_view str) { return writeBinaryString(str); } StreamError getTotalLength(std::size_t& outLength); StreamError readRest(TypelessBuffer& outBuffer); template StreamError readAsString(std::basic_string& outString); + + inline StreamError writeText(std::string_view str) + { + return writeSpan(str); + } }; class FileStream : public Stream @@ -181,7 +192,14 @@ private: bool canWrite_ = false; public: void openRW(std::span data); - void openRO(std::span data); + template + void openRO(std::span data) { + openROImpl(data.data(), data.size_bytes()); + } + template + inline void openRO(std::basic_string_view stringView) { + openROImpl(stringView.data(), stringView.size() * sizeof(TChar)); + } void close(); [[nodiscard]] inline bool isOpen() const { return data_.data() != nullptr; } [[nodiscard]] inline std::size_t availableBytes() const { @@ -196,6 +214,8 @@ public: StreamError seek(std::intptr_t pos, SeekMode seekMode = SeekMode::ABSOLUTE) override; bool isAtEnd() override; StreamFeatures getFeatures() override; +private: + void openROImpl(const void* data, std::size_t bytes); }; //