00001
00002
00003
00004
00005 #include "ace/Log_Msg.h"
00006
00007
00008
00009 #include "ace/os_include/os_string.h"
00010
00011
00012 #include "ace/os_include/os_strings.h"
00013
00014
00015 #if defined (ACE_HAS_BSTRING)
00016 # include <bstring.h>
00017 #endif
00018
00019
00020 #if defined (ACE_HAS_STRINGS)
00021 # include "ace/os_include/os_strings.h"
00022 #endif
00023
00024 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00025
00026
00027
00028 ACE_INLINE void
00029 ACE_Handle_Set::reset (void)
00030 {
00031 ACE_TRACE ("ACE_Handle_Set::reset");
00032 this->max_handle_ =
00033 ACE_INVALID_HANDLE;
00034 #if defined (ACE_HAS_BIG_FD_SET)
00035 this->min_handle_ =
00036 NUM_WORDS * WORDSIZE;
00037 #endif
00038 this->size_ = 0;
00039
00040 FD_ZERO (&this->mask_);
00041
00042 }
00043
00044 #if defined (ACE_HAS_BIG_FD_SET)
00045 ACE_INLINE ACE_Handle_Set &
00046 ACE_Handle_Set::operator = (const ACE_Handle_Set &rhs)
00047 {
00048 ACE_TRACE ("ACE_Handle_Set::operator =");
00049
00050 if (rhs.size_ > 0)
00051 {
00052 this->size_ =
00053 rhs.size_;
00054 this->max_handle_ =
00055 rhs.max_handle_;
00056 this->min_handle_ =
00057 rhs.min_handle_;
00058 this->mask_ =
00059 rhs.mask_;
00060 }
00061 else
00062 this->reset ();
00063
00064 return *this;
00065 }
00066 #endif
00067
00068
00069
00070 ACE_INLINE ACE_HANDLE
00071 ACE_Handle_Set::max_set (void) const
00072 {
00073 ACE_TRACE ("ACE_Handle_Set::max_set");
00074 return this->max_handle_;
00075 }
00076
00077
00078
00079 ACE_INLINE int
00080 ACE_Handle_Set::is_set (ACE_HANDLE handle) const
00081 {
00082 ACE_TRACE ("ACE_Handle_Set::is_set");
00083 #if defined (ACE_HAS_BIG_FD_SET)
00084 return FD_ISSET (handle,
00085 &this->mask_)
00086 && this->size_ > 0;
00087 #elif defined (ACE_HAS_NONCONST_FD_ISSET)
00088 return FD_ISSET (handle,
00089 const_cast<fd_set*> (&this->mask_));
00090 #else
00091 return FD_ISSET (handle,
00092 &this->mask_);
00093 #endif
00094 }
00095
00096
00097
00098 ACE_INLINE void
00099 ACE_Handle_Set::set_bit (ACE_HANDLE handle)
00100 {
00101 ACE_TRACE ("ACE_Handle_Set::set_bit");
00102 if ((handle != ACE_INVALID_HANDLE)
00103 && (!this->is_set (handle)))
00104 {
00105 #if defined (ACE_WIN32)
00106 FD_SET ((SOCKET) handle,
00107 &this->mask_);
00108 ++this->size_;
00109 #else
00110 #if defined (ACE_HAS_BIG_FD_SET)
00111 if (this->size_ == 0)
00112 FD_ZERO (&this->mask_);
00113
00114 if (handle < this->min_handle_)
00115 this->min_handle_ = handle;
00116 #endif
00117
00118 FD_SET (handle,
00119 &this->mask_);
00120 ++this->size_;
00121
00122 if (handle > this->max_handle_)
00123 this->max_handle_ = handle;
00124 #endif
00125 }
00126 }
00127
00128
00129
00130 ACE_INLINE void
00131 ACE_Handle_Set::clr_bit (ACE_HANDLE handle)
00132 {
00133 ACE_TRACE ("ACE_Handle_Set::clr_bit");
00134
00135 if ((handle != ACE_INVALID_HANDLE) &&
00136 (this->is_set (handle)))
00137 {
00138 FD_CLR ((ACE_SOCKET) handle,
00139 &this->mask_);
00140 --this->size_;
00141
00142 #if !defined (ACE_WIN32)
00143 if (handle == this->max_handle_)
00144 this->set_max (this->max_handle_);
00145 #endif
00146 }
00147 }
00148
00149
00150
00151 ACE_INLINE int
00152 ACE_Handle_Set::num_set (void) const
00153 {
00154 ACE_TRACE ("ACE_Handle_Set::num_set");
00155 #if defined (ACE_WIN32)
00156 return this->mask_.fd_count;
00157 #else
00158 return this->size_;
00159 #endif
00160 }
00161
00162
00163
00164 ACE_INLINE
00165 ACE_Handle_Set::operator fd_set *()
00166 {
00167 ACE_TRACE ("ACE_Handle_Set::operator fd_set *");
00168
00169 if (this->size_ > 0)
00170 return (fd_set *) &this->mask_;
00171 else
00172 return (fd_set *) 0;
00173 }
00174
00175
00176
00177 ACE_INLINE fd_set *
00178 ACE_Handle_Set::fdset (void)
00179 {
00180 ACE_TRACE ("ACE_Handle_Set::fdset");
00181
00182 if (this->size_ > 0)
00183 return (fd_set *) &this->mask_;
00184 else
00185 return (fd_set *) 0;
00186 }
00187
00188 ACE_INLINE
00189 ACE_Handle_Set_Iterator::~ACE_Handle_Set_Iterator (void)
00190 {
00191 }
00192
00193 ACE_END_VERSIONED_NAMESPACE_DECL