XRootD
Loading...
Searching...
No Matches
XrdCl::StreamSelector Struct Reference

Selects less loaded stream for read operation over multiple streams. More...

Collaboration diagram for XrdCl::StreamSelector:

Public Member Functions

 StreamSelector (uint16_t size)
void AdjustQueues (uint16_t size)
void MsgReceived (uint16_t substrm)
uint16_t Select (const std::vector< bool > &connected)

Detailed Description

Selects less loaded stream for read operation over multiple streams.

Definition at line 139 of file XrdClXRootDTransport.cc.

Constructor & Destructor Documentation

◆ StreamSelector()

XrdCl::StreamSelector::StreamSelector ( uint16_t size)
inline

Definition at line 141 of file XrdClXRootDTransport.cc.

142 {
143 //----------------------------------------------------------------------
144 // Subtract one because we shouldn't take into account the control
145 // stream.
146 //----------------------------------------------------------------------
147 strmqueues.resize( size - 1, 0 );
148 }

Member Function Documentation

◆ AdjustQueues()

void XrdCl::StreamSelector::AdjustQueues ( uint16_t size)
inline

Definition at line 153 of file XrdClXRootDTransport.cc.

154 {
155 strmqueues.resize( size - 1, 0);
156 }

◆ MsgReceived()

void XrdCl::StreamSelector::MsgReceived ( uint16_t substrm)
inline

Definition at line 186 of file XrdClXRootDTransport.cc.

187 {
188 if( substrm > 0 )
189 --strmqueues[substrm - 1];
190 }

◆ Select()

uint16_t XrdCl::StreamSelector::Select ( const std::vector< bool > & connected)
inline

Definition at line 163 of file XrdClXRootDTransport.cc.

164 {
165 uint16_t ret = 0;
166 size_t minval = std::numeric_limits<size_t>::max();
167
168 for( uint16_t i = 0; i < connected.size() && i < strmqueues.size(); ++i )
169 {
170 if( !connected[i] ) continue;
171
172 if( strmqueues[i] < minval )
173 {
174 ret = i;
175 minval = strmqueues[i];
176 }
177 }
178
179 ++strmqueues[ret];
180 return ret + 1;
181 }

The documentation for this struct was generated from the following file: