// // signal_set_base.hpp // ~~~~~~~~~~~~~~~~~~~ // // Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #ifndef ASIO_SIGNAL_SET_BASE_HPP #define ASIO_SIGNAL_SET_BASE_HPP #if defined(_MSC_VER) && (_MSC_VER >= 1200) # pragma once #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) #include "asio/detail/config.hpp" #include "asio/detail/socket_types.hpp" #include "asio/detail/push_options.hpp" namespace asio { /// The signal_set_base class is used as a base for the basic_signal_set class /// templates so that we have a common place to define the flags enum. class signal_set_base { public: # if defined(GENERATING_DOCUMENTATION) /// Enumeration representing the different types of flags that may specified /// when adding a signal to a set. enum flags { /// Bitmask representing no flags. none = 0, /// Affects the behaviour of interruptible functions such that, if the /// function would have failed with error::interrupted when interrupted by /// the specified signal, the function shall instead be restarted and not /// fail with error::interrupted. restart = implementation_defined, /// Do not generate SIGCHLD when child processes stop or stopped child /// processes continue. no_child_stop = implementation_defined, /// Do not transform child processes into zombies when they terminate. no_child_wait = implementation_defined, /// Special value to indicate that the signal registration does not care /// which flags are set, and so will not conflict with any prior /// registrations of the same signal. dont_care = -1 }; /// Portability typedef. typedef flags flags_t; #elif defined(ASIO_HAS_ENUM_CLASS) enum class flags : int { none = 0, restart = ASIO_OS_DEF(SA_RESTART), no_child_stop = ASIO_OS_DEF(SA_NOCLDSTOP), no_child_wait = ASIO_OS_DEF(SA_NOCLDWAIT), dont_care = -1 }; typedef flags flags_t; #else // defined(ASIO_HAS_ENUM_CLASS) struct flags { enum flags_t { none = 0, restart = ASIO_OS_DEF(SA_RESTART), no_child_stop = ASIO_OS_DEF(SA_NOCLDSTOP), no_child_wait = ASIO_OS_DEF(SA_NOCLDWAIT), dont_care = -1 }; }; typedef flags::flags_t flags_t; #endif // defined(ASIO_HAS_ENUM_CLASS) protected: /// Protected destructor to prevent deletion through this type. ~signal_set_base() { } }; /// Negation operator. /** * @relates signal_set_base::flags */ inline ASIO_CONSTEXPR bool operator!(signal_set_base::flags_t x) { return static_cast(x) == 0; } /// Bitwise and operator. /** * @relates signal_set_base::flags */ inline ASIO_CONSTEXPR signal_set_base::flags_t operator&( signal_set_base::flags_t x, signal_set_base::flags_t y) { return static_cast( static_cast(x) & static_cast(y)); } /// Bitwise or operator. /** * @relates signal_set_base::flags */ inline ASIO_CONSTEXPR signal_set_base::flags_t operator|( signal_set_base::flags_t x, signal_set_base::flags_t y) { return static_cast( static_cast(x) | static_cast(y)); } /// Bitwise xor operator. /** * @relates signal_set_base::flags */ inline ASIO_CONSTEXPR signal_set_base::flags_t operator^( signal_set_base::flags_t x, signal_set_base::flags_t y) { return static_cast( static_cast(x) ^ static_cast(y)); } /// Bitwise negation operator. /** * @relates signal_set_base::flags */ inline ASIO_CONSTEXPR signal_set_base::flags_t operator~( signal_set_base::flags_t x) { return static_cast(~static_cast(x)); } /// Bitwise and-assignment operator. /** * @relates signal_set_base::flags */ inline signal_set_base::flags_t& operator&=( signal_set_base::flags_t& x, signal_set_base::flags_t y) { x = x & y; return x; } /// Bitwise or-assignment operator. /** * @relates signal_set_base::flags */ inline signal_set_base::flags_t& operator|=( signal_set_base::flags_t& x, signal_set_base::flags_t y) { x = x | y; return x; } /// Bitwise xor-assignment operator. /** * @relates signal_set_base::flags */ inline signal_set_base::flags_t& operator^=( signal_set_base::flags_t& x, signal_set_base::flags_t y) { x = x ^ y; return x; } } // namespace asio #include "asio/detail/pop_options.hpp" #endif // ASIO_SIGNAL_SET_BASE_HPP