XRootD
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: