From 6dc9508bf13d78a990a36b2b43e9fa498ddbe228 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Wed, 17 Jun 2026 20:14:45 +0200 Subject: lib: optimize buffer allocation --- ttwhy/io.cppm | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ttwhy/io.cppm b/ttwhy/io.cppm index cbd3902..353bdfa 100644 --- a/ttwhy/io.cppm +++ b/ttwhy/io.cppm @@ -27,11 +27,9 @@ namespace ttwhy::io } export template - auto read(InputStream & input_stream, ErrorStream & error_stream) - -> asio::awaitable> + auto read(std::span data, InputStream & input_stream, ErrorStream & error_stream) + -> asio::awaitable> { - auto data = std::string{15, '\0'}; - auto [error, read] = co_await input_stream.async_read_some(asio::buffer(data), asio::as_tuple(asio::use_awaitable)); if (error) @@ -41,12 +39,11 @@ namespace ttwhy::io co_return std::unexpected{error}; } - data.resize(read); - co_return data; + co_return read; } export template - auto write(std::string const & string, OutputStream & output_stream, ErrorStream & error_stream) + auto write(std::span string, OutputStream & output_stream, ErrorStream & error_stream) -> asio::awaitable { auto [error, written] = @@ -65,15 +62,18 @@ namespace ttwhy::io auto echo(InputStream & input_stream, OutputStream & output_stream, ErrorStream & error_stream) -> asio::awaitable { + auto input = std::array{}; + while (true) { - auto input = co_await read(input_stream, error_stream); - if (!input.has_value()) + auto read_result = co_await read(input, input_stream, error_stream); + if (!read_result.has_value()) { - co_return input.error(); + co_return read_result.error(); } - auto write_error = co_await write(input.value(), output_stream, error_stream); + auto to_write = std::span{input.data(), read_result.value()}; + auto write_error = co_await write(to_write, output_stream, error_stream); if (write_error) { co_return write_error; -- cgit v1.2.3