From 02e6fb1ba8becdeaf16626d4ee82a69591fb3009 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Mon, 14 Dec 2020 12:24:09 +0100 Subject: [PATCH] Add a way to write a VectorStream back --- src/common/serialization/vst3/base.cpp | 16 ++++++++++++++++ src/common/serialization/vst3/base.h | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/src/common/serialization/vst3/base.cpp b/src/common/serialization/vst3/base.cpp index a45e1773..ac29d4cb 100644 --- a/src/common/serialization/vst3/base.cpp +++ b/src/common/serialization/vst3/base.cpp @@ -175,6 +175,22 @@ tresult PLUGIN_API VectorStream::queryInterface(Steinberg::FIDString _iid, return Steinberg::kNoInterface; } +tresult VectorStream::write_back(Steinberg::IBStream* stream) { + if (!stream) { + return Steinberg::kInvalidArgument; + } + + int32 num_bytes_written; + assert(stream->seek(0, kIBSeekSet) == Steinberg::kResultOk); + assert(stream->write(buffer.data(), buffer.size(), &num_bytes_written) == + Steinberg::kResultOk); + + assert(num_bytes_written == 0 || + static_cast(num_bytes_written) == buffer.size()); + + return Steinberg::kResultOk; +} + size_t VectorStream::size() const { return buffer.size(); } diff --git a/src/common/serialization/vst3/base.h b/src/common/serialization/vst3/base.h index 3bd11847..2f50174c 100644 --- a/src/common/serialization/vst3/base.h +++ b/src/common/serialization/vst3/base.h @@ -127,6 +127,8 @@ class VectorStream : public Steinberg::IBStream, /** * Read an existing stream. + * + * @throw std::runtime_error If we couldn't read from the stream. */ VectorStream(Steinberg::IBStream* stream); @@ -134,6 +136,12 @@ class VectorStream : public Steinberg::IBStream, DECLARE_FUNKNOWN_METHODS + /** + * Write the vector buffer back to an IBStream. After writing the seek + * position will be left at the end of the stream. + */ + tresult write_back(Steinberg::IBStream* stream); + /** * Return the buffer's, used in the logging messages. */