#ifndef MATADOR_FDSET_HPP #define MATADOR_FDSET_HPP #include "matador/net/export.hpp" #include "matador/net/os.hpp" #include #include #include #ifdef _WIN32 #include #else #include #endif namespace matador { /** * This class represents a fd set * used by the reactor class. There it * is used in combination with a call * to select. */ class OOS_NET_API fdset { public: fdset(const fdset&) = delete; fdset& operator=(const fdset&) = delete; /** * Default constructor creates * an empty fd set */ fdset(); /** * Destroys the fd set */ ~fdset() = default; fdset(fdset&& x) noexcept; fdset& operator=(fdset&& x) noexcept; /** * Reset all bits to zero */ void reset(); /** * Checks if the given fd is set * in the fd set. * * @param fd Requested fd * @return True if fd is set */ bool is_set(socket_type fd) const; /** * Clears the giveb fd from the set. * * @param fd fd to clear */ void clear(socket_type fd); /** * Sets the given fd in the fd set. * * @param fd fd to set */ void set(socket_type fd); /** * Returns the highest fd plus one. * This is needed for the call to select * * @return Highest fd plus one */ socket_type maxp1() const; /** * Returns the current number of fd in the set * * @return Number of fd in set */ size_t count() const; /** * Checks if the set is empty * * @return True if the fd set is empty */ bool empty() const; /** * Returns a pointer to the underlying fd_set structure * * @return Pointer to the underlying fd_set structure */ fd_set* get(); private: typedef std::set > int_set_t; int_set_t max_fd_set_; fd_set fd_set_ = {}; }; } #endif //MATADOR_FDSET_HPP