MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / fc_process

Function fc_process

extern/libcds/cds/container/fcdeque.h:435–555  ·  view source on GitHub ↗

Batch-processing flat combining

Source from the content-addressed store, hash-verified

433
434 /// Batch-processing flat combining
435 void fc_process( typename fc_kernel::iterator itBegin, typename fc_kernel::iterator itEnd )
436 {
437 typedef typename fc_kernel::iterator fc_iterator;
438
439 for ( fc_iterator it = itBegin, itPrev = itEnd; it != itEnd; ++it ) {
440 switch ( it->op( atomics::memory_order_acquire )) {
441 case op_push_front:
442 if ( itPrev != itEnd
443 && (itPrev->op() == op_pop_front || (m_Deque.empty() && itPrev->op() == op_pop_back)))
444 {
445 collide( *it, *itPrev );
446 itPrev = itEnd;
447 }
448 else
449 itPrev = it;
450 break;
451 case op_push_front_move:
452 if ( itPrev != itEnd
453 && (itPrev->op() == op_pop_front || ( m_Deque.empty() && itPrev->op() == op_pop_back )))
454 {
455 collide_move( *it, *itPrev );
456 itPrev = itEnd;
457 }
458 else
459 itPrev = it;
460 break;
461 case op_push_back:
462 if ( itPrev != itEnd
463 && (itPrev->op() == op_pop_back || (m_Deque.empty() && itPrev->op() == op_pop_front)))
464 {
465 collide( *it, *itPrev );
466 itPrev = itEnd;
467 }
468 else
469 itPrev = it;
470 break;
471 case op_push_back_move:
472 if ( itPrev != itEnd
473 && (itPrev->op() == op_pop_back || ( m_Deque.empty() && itPrev->op() == op_pop_front )))
474 {
475 collide_move( *it, *itPrev );
476 itPrev = itEnd;
477 }
478 else
479 itPrev = it;
480 break;
481 case op_pop_front:
482 if ( itPrev != itEnd ) {
483 if ( m_Deque.empty()) {
484 switch ( itPrev->op()) {
485 case op_push_back:
486 collide( *itPrev, *it );
487 itPrev = itEnd;
488 break;
489 case op_push_back_move:
490 collide_move( *itPrev, *it );
491 itPrev = itEnd;
492 break;

Callers

nothing calls this directly

Calls 3

collide_moveFunction · 0.85
opMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected