mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-26 00:04:43 +01:00
50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
/*****************************************************************************
|
|
* Copyright (c) 2014-2025 OpenRCT2 developers
|
|
*
|
|
* For a complete list of all authors, please refer to contributors.md
|
|
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
|
|
*
|
|
* OpenRCT2 is licensed under the GNU General Public License version 3.
|
|
*****************************************************************************/
|
|
|
|
#include "IStream.hpp"
|
|
|
|
#include "StreamBuffer.hpp"
|
|
#include "String.hpp"
|
|
|
|
#include <vector>
|
|
|
|
namespace OpenRCT2
|
|
{
|
|
constexpr size_t kIStreamCopyBufferLength = 16 * 1024;
|
|
|
|
void IStream::CopyFromStream(IStream& stream, uint64_t length)
|
|
{
|
|
StreamReadBuffer buffer(stream, length, kIStreamCopyBufferLength);
|
|
while (buffer)
|
|
{
|
|
auto block = buffer.ReadBlock(stream);
|
|
this->Write(block.first, block.second);
|
|
}
|
|
}
|
|
|
|
std::string IStream::ReadString()
|
|
{
|
|
std::string result;
|
|
uint8_t ch;
|
|
while ((ch = ReadValue<uint8_t>()) != 0)
|
|
{
|
|
result.push_back(ch);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void IStream::WriteString(std::string_view str)
|
|
{
|
|
// if the string contains any null characters, then stop the write at the first one
|
|
str = String::toStringView(str.data(), str.size());
|
|
Write(str.data(), str.size());
|
|
WriteValue<uint8_t>(0);
|
|
}
|
|
} // namespace OpenRCT2
|