Xmipp  v3.23.11-Nereus
Classes | Enumerations | Functions
rfs Namespace Reference

Classes

class  queue_bag
 

Enumerations

enum  RemoveResult { RemoveResult::KeepContinue, RemoveResult::KeepBreak, RemoveResult::RemoveContinue, RemoveResult::RemoveBreak }
 

Functions

void testQueueBag ()
 
template<typename T , typename Consumer >
void forEach (queue_bag< T > &queue, Consumer consumer)
 
template<typename T , typename Predicate >
size_t removeMatching (queue_bag< T > &queue, Predicate predicate)
 

Enumeration Type Documentation

◆ RemoveResult

enum rfs::RemoveResult
strong
Enumerator
KeepContinue 
KeepBreak 
RemoveContinue 
RemoveBreak 

Definition at line 229 of file queue_bag.h.

Function Documentation

◆ forEach()

template<typename T , typename Consumer >
void rfs::forEach ( queue_bag< T > &  queue,
Consumer  consumer 
)

Iterate through queue_bag until all elements are consumed or until consumer returns false.

Definition at line 221 of file queue_bag.h.

221  {
222  for (size_t i = 0; i < queue.getSize(); ++i) {
223  if (!consumer(queue[i])) {
224  return;
225  }
226  }
227  }
#define i

◆ removeMatching()

template<typename T , typename Predicate >
size_t rfs::removeMatching ( queue_bag< T > &  queue,
Predicate  predicate 
)

Does bulk removal of elements from queue_bag. Removes only those elements, which match the predicate.

Template Parameters
Predicatelambda that takes T& and returns RemoveResult
Returns
amount of removed items

Definition at line 242 of file queue_bag.h.

242  {
243  size_t removed = 0;
244  size_t i = 0;
245  while (i < queue.getSize()) {
246  RemoveResult res = predicate(queue[i]);
247  if (res == RemoveResult::RemoveContinue || res == RemoveResult::RemoveBreak) {
248  queue.removeIndex(i);
249  } else {
250  i++;
251  }
252 
253  if (res == RemoveResult::KeepBreak || res == RemoveResult::RemoveBreak) {
254  break;
255  }
256  }
257  return removed;
258  }
RemoveResult
Definition: queue_bag.h:229
#define i

◆ testQueueBag()

void rfs::testQueueBag ( )