stream_file.hpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //
  2. // Copyright (c) 2024 Klemens Morgenstern (klemens.morgenstern@gmx.net)
  3. //
  4. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. #ifndef BOOST_COBALT_IO_STREAM_FILE_HPP
  8. #define BOOST_COBALT_IO_STREAM_FILE_HPP
  9. #include <boost/asio/basic_stream_file.hpp>
  10. #include <boost/cobalt/io/detail/config.hpp>
  11. #include <boost/cobalt/config.hpp>
  12. #include <boost/cobalt/io/buffer.hpp>
  13. #include <boost/cobalt/io/file.hpp>
  14. #include <boost/cobalt/io/ops.hpp>
  15. #include <boost/cobalt/io/stream.hpp>
  16. #include <boost/cobalt/op.hpp>
  17. #include <boost/system/result.hpp>
  18. namespace boost::cobalt::io
  19. {
  20. struct BOOST_SYMBOL_VISIBLE stream_file : file, stream
  21. {
  22. BOOST_COBALT_IO_DECL stream_file(const cobalt::executor & executor = this_thread::get_executor());
  23. BOOST_COBALT_IO_DECL stream_file(const char * path, file::flags open_flags,
  24. const cobalt::executor & executor = this_thread::get_executor());
  25. BOOST_COBALT_IO_DECL stream_file(const std::string & path, file::flags open_flags,
  26. const cobalt::executor & executor = this_thread::get_executor());
  27. BOOST_COBALT_IO_DECL stream_file(const native_handle_type & native_file,
  28. const cobalt::executor & executor = this_thread::get_executor());
  29. BOOST_COBALT_IO_DECL stream_file(stream_file && sf) noexcept;
  30. [[nodiscard]] write_op write_some(const_buffer_sequence buffer)
  31. {
  32. return {buffer, this, initiate_write_some_};
  33. }
  34. [[nodiscard]] read_op read_some(mutable_buffer_sequence buffer)
  35. {
  36. return {buffer, this, initiate_read_some_};
  37. }
  38. BOOST_COBALT_IO_DECL system::result<std::uint64_t> seek(
  39. std::int64_t offset,
  40. seek_basis whence);
  41. private:
  42. BOOST_COBALT_IO_DECL static void initiate_read_some_(void *, mutable_buffer_sequence, boost::cobalt::completion_handler<system::error_code, std::size_t>);
  43. BOOST_COBALT_IO_DECL static void initiate_write_some_(void *, const_buffer_sequence, boost::cobalt::completion_handler<system::error_code, std::size_t>);
  44. #if defined(BOOST_ASIO_HAS_FILE)
  45. asio::basic_stream_file<executor> implementation_;
  46. #endif
  47. };
  48. }
  49. #endif //BOOST_COBALT_IO_STREAM_FILE_HPP