/* -*- C++ -*- */ //============================================================================= /** * @file Handle_Set.h * * @author Douglas C. Schmidt */ //============================================================================= #ifndef ACE_HANDLE_SET_H #define ACE_HANDLE_SET_H #include /**/ "ace/pre.h" #include /**/ "ace/ACE_export.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ #include "ace/os_include/sys/os_select.h" #include "ace/os_include/os_limits.h" // Default size of the ACE Reactor. #if defined (FD_SETSIZE) int const ACE_FD_SETSIZE = FD_SETSIZE; #else /* !FD_SETSIZE */ # define ACE_FD_SETSIZE FD_SETSIZE #endif /* ACE_FD_SETSIZE */ #if defined(FD_SETSIZE) && defined(__FD_SETSIZE) && (FD_SETSIZE > __FD_SETSIZE) #error FD_SETSIZE definition is too large, please correct! #endif #if !defined (ACE_DEFAULT_SELECT_REACTOR_SIZE) # define ACE_DEFAULT_SELECT_REACTOR_SIZE ACE_FD_SETSIZE #endif /* ACE_DEFAULT_SELECT_REACTOR_SIZE */ ACE_BEGIN_VERSIONED_NAMESPACE_DECL /** * @class ACE_Handle_Set * * @brief C++ wrapper facade for the socket @c fd_set abstraction. * * This abstraction is a very efficient wrapper facade over * @c fd_set. In particular, no range checking is performed, so * it's important not to set or clear bits that are outside the * @c ACE_DEFAULT_SELECT_REACTOR_SIZE. */ class ACE_Export ACE_Handle_Set { public: friend class ACE_Handle_Set_Iterator; // = Initialization and termination. enum { MAXSIZE = ACE_DEFAULT_SELECT_REACTOR_SIZE }; /// Constructor, initializes the bitmask to all 0s. ACE_Handle_Set (void); /** * Constructor, initializes the handle set from a given mask. */ ACE_Handle_Set (const fd_set &mask); // = Methods for manipulating bitsets. /// Initialize the bitmask to all 0s and reset the associated fields. void reset (void); /** * Checks whether @a handle is enabled. No range checking is * performed so @a handle must be less than * @c ACE_DEFAULT_SELECT_REACTOR_SIZE. */ int is_set (ACE_HANDLE handle) const; /// Enables the @a handle. No range checking is performed so @a handle /// must be less than @c ACE_DEFAULT_SELECT_REACTOR_SIZE. void set_bit (ACE_HANDLE handle); /// Disables the @a handle. No range checking is performed so /// @a handle must be less than @c ACE_DEFAULT_SELECT_REACTOR_SIZE. void clr_bit (ACE_HANDLE handle); /// Returns a count of the number of enabled bits. int num_set (void) const; /// Returns the number of the large bit. ACE_HANDLE max_set (void) const; /** * Rescan the underlying @c fd_set up to handle @a max to find the new * (highest bit set) and (how many bits set) values. * This is useful for evaluating the changes after the handle set has * been manipulated in some way other than member functions; for example, * after