signal_set.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. //
  2. // Copyright (c) 2025 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_SIGNAL_SET_HPP
  8. #define BOOST_COBALT_IO_SIGNAL_SET_HPP
  9. #include <boost/cobalt/io/detail/config.hpp>
  10. #include <boost/cobalt/op.hpp>
  11. #include <boost/asio/basic_signal_set.hpp>
  12. #include <boost/system/result.hpp>
  13. #include <initializer_list>
  14. namespace boost::cobalt::io
  15. {
  16. struct BOOST_SYMBOL_VISIBLE signal_set
  17. {
  18. BOOST_COBALT_IO_DECL signal_set(const cobalt::executor & executor = this_thread::get_executor());
  19. BOOST_COBALT_IO_DECL signal_set(std::initializer_list<int> sigs, const cobalt::executor & executor = this_thread::get_executor());
  20. [[nodiscard]] BOOST_COBALT_IO_DECL system::result<void> cancel();
  21. [[nodiscard]] BOOST_COBALT_IO_DECL system::result<void> clear();
  22. [[nodiscard]] BOOST_COBALT_IO_DECL system::result<void> add(int signal_number);
  23. [[nodiscard]] BOOST_COBALT_IO_DECL system::result<void> remove(int signal_number);
  24. private:
  25. struct BOOST_COBALT_IO_DECL wait_op_ final : cobalt::op<system::error_code, int>
  26. {
  27. void initiate(completion_handler<system::error_code, int> h) final;
  28. wait_op_(asio::basic_signal_set<cobalt::executor> & signal_set) : signal_set_(signal_set) {}
  29. ~wait_op_() = default;
  30. private:
  31. asio::basic_signal_set<cobalt::executor> & signal_set_;
  32. };
  33. public:
  34. [[nodiscard]] auto wait() { return wait_op_{signal_set_}; }
  35. private:
  36. asio::basic_signal_set<cobalt::executor> signal_set_;
  37. };
  38. }
  39. #endif //BOOST_COBALT_IO_SIGNAL_SET_HPP