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 137 of file XrdClXRootDTransport.cc.

Constructor & Destructor Documentation

◆ StreamSelector()

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

Definition at line 139 of file XrdClXRootDTransport.cc.

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

Member Function Documentation

◆ AdjustQueues()

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

Definition at line 151 of file XrdClXRootDTransport.cc.

152  {
153  strmqueues.resize( size - 1, 0);
154  }

◆ MsgReceived()

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

Definition at line 184 of file XrdClXRootDTransport.cc.

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

◆ Select()

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

Definition at line 161 of file XrdClXRootDTransport.cc.

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

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