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