metaproxy  1.21.0
Classes | Public Member Functions | Public Attributes | List of all members
metaproxy_1::filter::Multi::FrontendSet Struct Reference
Collaboration diagram for metaproxy_1::filter::Multi::FrontendSet:
Collaboration graph

Classes

class  PresentJob
 

Public Member Functions

 FrontendSet (std::string setname)
 
 FrontendSet ()
 
 ~FrontendSet ()
 
void round_robin (int pos, int number, std::list< PresentJob > &job)
 
void serve_order (int pos, int number, std::list< PresentJob > &job)
 

Public Attributes

std::list< BackendSetm_backend_sets
 
std::string m_setname
 

Detailed Description

Definition at line 68 of file filter_multi.cpp.

Constructor & Destructor Documentation

◆ FrontendSet() [1/2]

mp::filter::Multi::FrontendSet::FrontendSet ( std::string  setname)

Definition at line 221 of file filter_multi.cpp.

222  : m_setname(setname)
223 {
224 }

◆ FrontendSet() [2/2]

mp::filter::Multi::FrontendSet::FrontendSet ( )

Definition at line 227 of file filter_multi.cpp.

228 {
229 }

◆ ~FrontendSet()

mp::filter::Multi::FrontendSet::~FrontendSet ( )

Definition at line 232 of file filter_multi.cpp.

233 {
234 }

Member Function Documentation

◆ round_robin()

void mp::filter::Multi::FrontendSet::round_robin ( int  pos,
int  number,
std::list< PresentJob > &  job 
)

Definition at line 298 of file filter_multi.cpp.

300 {
301  std::list<int> pos;
302  std::list<BackendSet>::const_iterator bsit;
303  for (bsit = m_backend_sets.begin(); bsit != m_backend_sets.end(); bsit++)
304  {
305  pos.push_back(1);
306  }
307 
308  int p = 1;
309 #if 1
310  // optimization step!
311  int omin = 0;
312  while(true)
313  {
314  int min = 0;
315  int no_left = 0;
316  // find min count for each set which is > omin
317  for (bsit = m_backend_sets.begin(); bsit != m_backend_sets.end(); bsit++)
318  {
319  if (bsit->m_count > omin)
320  {
321  if (no_left == 0 || bsit->m_count < min)
322  min = bsit->m_count;
323  no_left++;
324  }
325  }
326  if (no_left == 0) // if nothing greater than omin, bail out.
327  break;
328  int skip = no_left * min;
329  if (p + skip > start) // step gets us "into" present range?
330  {
331  // Yes. skip until start.. Rounding off is deliberate!
332  min = (start-p) / no_left;
333  p += no_left * min;
334 
335  // update positions in each set..
336  std::list<int>::iterator psit = pos.begin();
337  for (psit = pos.begin(); psit != pos.end(); psit++)
338  *psit += min;
339  break;
340  }
341  // skip on each set.. before "present range"..
342  p = p + skip;
343 
344  std::list<int>::iterator psit = pos.begin();
345  for (psit = pos.begin(); psit != pos.end(); psit++)
346  *psit += min;
347 
348  omin = min; // update so we consider next class (with higher count)
349  }
350 #endif
351  int fetched = 0;
352  bool more = true;
353  while (more)
354  {
355  more = false;
356  std::list<int>::iterator psit = pos.begin();
357  bsit = m_backend_sets.begin();
358 
359  for (; bsit != m_backend_sets.end(); psit++,bsit++)
360  {
361  if (fetched >= number)
362  {
363  more = false;
364  break;
365  }
366  if (*psit <= bsit->m_count)
367  {
368  if (p >= start)
369  {
370  PresentJob job(bsit->m_backend, *psit);
371  jobs.push_back(job);
372  fetched++;
373  }
374  (*psit)++;
375  p++;
376  more = true;
377  }
378  }
379  }
380 }
std::list< BackendSet > m_backend_sets

◆ serve_order()

void mp::filter::Multi::FrontendSet::serve_order ( int  pos,
int  number,
std::list< PresentJob > &  job 
)

Definition at line 275 of file filter_multi.cpp.

277 {
278  int i;
279  for (i = 0; i < number; i++)
280  {
281  std::list<BackendSet>::const_iterator bsit;
282  int voffset = 0;
283  int offset = start + i - 1;
284  for (bsit = m_backend_sets.begin(); bsit != m_backend_sets.end();
285  bsit++)
286  {
287  if (offset >= voffset && offset < voffset + bsit->m_count)
288  {
289  PresentJob job(bsit->m_backend, offset - voffset + 1);
290  jobs.push_back(job);
291  break;
292  }
293  voffset += bsit->m_count;
294  }
295  }
296 }

Member Data Documentation

◆ m_backend_sets

std::list<BackendSet> metaproxy_1::filter::Multi::FrontendSet::m_backend_sets

Definition at line 84 of file filter_multi.cpp.

Referenced by metaproxy_1::filter::Multi::Frontend::search().

◆ m_setname

std::string metaproxy_1::filter::Multi::FrontendSet::m_setname

Definition at line 85 of file filter_multi.cpp.

Referenced by metaproxy_1::filter::Multi::Frontend::search().


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