#pragma once #include #include #include #include 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_task; own> read_done = nullptr; own> 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_task; own> write_done = nullptr; public: void write_step(output_stream &writer); }; } // namespace saw