diff options
author | Claudius Holeksa <mail@keldu.de> | 2023-04-29 18:44:59 +0200 |
---|---|---|
committer | Claudius Holeksa <mail@keldu.de> | 2023-04-29 18:44:59 +0200 |
commit | f07487ce8f0f3ebd5c4d1082a9521f09588fa34a (patch) | |
tree | 5cccd5e20d180cbe128dd0ae7759b50d26199af4 /forstio/io/io_helpers.h | |
parent | 47c44aab6cf54e4885de4138cab1aa3825f115e4 (diff) |
Added io to new repo
Diffstat (limited to 'forstio/io/io_helpers.h')
-rw-r--r-- | forstio/io/io_helpers.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/forstio/io/io_helpers.h b/forstio/io/io_helpers.h new file mode 100644 index 0000000..94e37f4 --- /dev/null +++ b/forstio/io/io_helpers.h @@ -0,0 +1,53 @@ +#pragma once + +#include <forstio/async/async.h> +#include <forstio/core/common.h> + +#include <cstdint> +#include <optional> + +namespace saw { +/* + * Helper classes for the specific driver implementations + */ + +/* + * Since I don't want to repeat these implementations for tls on unix systems + * and gnutls doesn't let me write or read into buffers I have to have this kind + * of strange abstraction. This may also be reusable for windows/macOS though. + */ +class input_stream; + +class read_task_and_step_helper { +public: + struct read_io_task { + void *buffer; + size_t min_length; + size_t max_length; + size_t already_read = 0; + }; + std::optional<read_io_task> read_task; + own<conveyor_feeder<size_t>> read_done = nullptr; + + own<conveyor_feeder<void>> on_read_disconnect = nullptr; + +public: + void read_step(input_stream &reader); +}; + +class output_stream; + +class write_task_and_step_helper { +public: + struct write_io_task { + const void *buffer; + size_t length; + size_t already_written = 0; + }; + std::optional<write_io_task> write_task; + own<conveyor_feeder<size_t>> write_done = nullptr; + +public: + void write_step(output_stream &writer); +}; +} // namespace saw |