GitHub Actions: Try MSVC builds with /std:c++17 and 20
[ACE_TAO.git] / ACE / ace / Handle_Set.inl
blobdb76152f1681eccbb6d2072d8072bde06d3cabae
1 // -*- C++ -*-
2 #include "ace/Log_Category.h"
4 // AIX defines bzero() in this odd file... used by FD_ZERO
5 #if defined (ACE_HAS_STRINGS)
6 #  include "ace/os_include/os_strings.h"
7 #endif /* ACE_HAS_STRINGS */
9 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
11 // Initialize the bitmask to all 0s and reset the associated fields.
13 ACE_INLINE void
14 ACE_Handle_Set::reset (void)
16   ACE_TRACE ("ACE_Handle_Set::reset");
17   this->max_handle_ =
18     ACE_INVALID_HANDLE;
19 #if defined (ACE_HAS_BIG_FD_SET)
20   this->min_handle_ =
21     NUM_WORDS * WORDSIZE;
22 #endif /* ACE_HAS_BIG_FD_SET */
23   this->size_ = 0;
24   // #if !defined (ACE_HAS_BIG_FD_SET)      Why is this here?  -Steve Huston
25   FD_ZERO (&this->mask_);
26   // #endif /* ACE_HAS_BIG_FD_SET */
29 #if defined (ACE_HAS_BIG_FD_SET)
30 ACE_INLINE ACE_Handle_Set &
31 ACE_Handle_Set::operator = (const ACE_Handle_Set &rhs)
33   ACE_TRACE ("ACE_Handle_Set::operator =");
35   if (rhs.size_ > 0)
36     {
37       this->size_ =
38         rhs.size_;
39       this->max_handle_ =
40         rhs.max_handle_;
41       this->min_handle_ =
42         rhs.min_handle_;
43       this->mask_ =
44         rhs.mask_;
45     }
46   else
47     this->reset ();
49   return *this;
51 #endif /* ACE_HAS_BIG_FD_SET */
53 // Returns the number of the large bit.
55 ACE_INLINE ACE_HANDLE
56 ACE_Handle_Set::max_set (void) const
58   ACE_TRACE ("ACE_Handle_Set::max_set");
59   return this->max_handle_;
62 // Checks whether handle is enabled.
64 ACE_INLINE int
65 ACE_Handle_Set::is_set (ACE_HANDLE handle) const
67   ACE_TRACE ("ACE_Handle_Set::is_set");
69   fd_set *set = const_cast<fd_set*> (&this->mask_);
70   int ret = FD_ISSET (handle, set);
72 #if defined (ACE_HAS_BIG_FD_SET)
73   ret = ret && this->size_ > 0;
74 #elif defined (ACE_VXWORKS) && ACE_VXWORKS >= 0x690
75   ret = ret != 0;
76 #endif
77   return ret;
80 // Enables the handle.
82 ACE_INLINE void
83 ACE_Handle_Set::set_bit (ACE_HANDLE handle)
85   ACE_TRACE ("ACE_Handle_Set::set_bit");
86   if ((handle != ACE_INVALID_HANDLE)
87       && (!this->is_set (handle)))
88     {
89 #if defined (ACE_HANDLE_SET_USES_FD_ARRAY)
90       FD_SET ((SOCKET) handle,
91               &this->mask_);
92       ++this->size_;
93 #else /* ACE_HANDLE_SET_USES_FD_ARRAY */
94 #if defined (ACE_HAS_BIG_FD_SET)
95       if (this->size_ == 0)
96         FD_ZERO (&this->mask_);
98       if (handle < this->min_handle_)
99         this->min_handle_ = handle;
100 #endif /* ACE_HAS_BIG_FD_SET */
102       FD_SET (handle,
103               &this->mask_);
104       ++this->size_;
106       if (handle > this->max_handle_)
107         this->max_handle_ = handle;
108 #endif /* ACE_HANDLE_SET_USES_FD_ARRAY */
109     }
112 // Disables the handle.
114 ACE_INLINE void
115 ACE_Handle_Set::clr_bit (ACE_HANDLE handle)
117   ACE_TRACE ("ACE_Handle_Set::clr_bit");
119   if ((handle != ACE_INVALID_HANDLE) &&
120       (this->is_set (handle)))
121     {
122       FD_CLR ((ACE_SOCKET) handle,
123               &this->mask_);
124       --this->size_;
126 #if !defined (ACE_HANDLE_SET_USES_FD_ARRAY)
127       if (handle == this->max_handle_)
128         this->set_max (this->max_handle_);
129 #endif /* !ACE_HANDLE_SET_USES_FD_ARRAY */
130     }
133 // Returns a count of the number of enabled bits.
135 ACE_INLINE int
136 ACE_Handle_Set::num_set (void) const
138   ACE_TRACE ("ACE_Handle_Set::num_set");
139 #if defined (ACE_HANDLE_SET_USES_FD_ARRAY)
140   return this->mask_.fd_count;
141 #else /* !ACE_HANDLE_SET_USES_FD_ARRAY */
142   return this->size_;
143 #endif /* ACE_HANDLE_SET_USES_FD_ARRAY */
146 // Returns a pointer to the underlying fd_set.
148 ACE_INLINE
149 ACE_Handle_Set::operator fd_set *()
151   ACE_TRACE ("ACE_Handle_Set::operator fd_set *");
153   if (this->size_ > 0)
154     return (fd_set *) &this->mask_;
155   else
156     return (fd_set *) 0;
159 // Returns a pointer to the underlying fd_set.
161 ACE_INLINE fd_set *
162 ACE_Handle_Set::fdset (void)
164   ACE_TRACE ("ACE_Handle_Set::fdset");
166   if (this->size_ > 0)
167     return (fd_set *) &this->mask_;
168   else
169     return (fd_set *) 0;
172 ACE_INLINE
173 ACE_Handle_Set_Iterator::~ACE_Handle_Set_Iterator (void)
177 ACE_END_VERSIONED_NAMESPACE_DECL