MCPcopy Create free account
hub / github.com/creatale/node-dv / cvSeqPushMulti

Function cvSeqPushMulti

deps/opencv/modules/core/src/datastructs.cpp:1447–1512  ·  view source on GitHub ↗

Add several elements to the beginning or end of a sequence: */

Source from the content-addressed store, hash-verified

1445
1446/* Add several elements to the beginning or end of a sequence: */
1447CV_IMPL void
1448cvSeqPushMulti( CvSeq *seq, const void *_elements, int count, int front )
1449{
1450 char *elements = (char *) _elements;
1451
1452 if( !seq )
1453 CV_Error( CV_StsNullPtr, "NULL sequence pointer" );
1454 if( count < 0 )
1455 CV_Error( CV_StsBadSize, "number of removed elements is negative" );
1456
1457 int elem_size = seq->elem_size;
1458
1459 if( !front )
1460 {
1461 while( count > 0 )
1462 {
1463 int delta = (int)((seq->block_max - seq->ptr) / elem_size);
1464
1465 delta = MIN( delta, count );
1466 if( delta > 0 )
1467 {
1468 seq->first->prev->count += delta;
1469 seq->total += delta;
1470 count -= delta;
1471 delta *= elem_size;
1472 if( elements )
1473 {
1474 memcpy( seq->ptr, elements, delta );
1475 elements += delta;
1476 }
1477 seq->ptr += delta;
1478 }
1479
1480 if( count > 0 )
1481 icvGrowSeq( seq, 0 );
1482 }
1483 }
1484 else
1485 {
1486 CvSeqBlock* block = seq->first;
1487
1488 while( count > 0 )
1489 {
1490 int delta;
1491
1492 if( !block || block->start_index == 0 )
1493 {
1494 icvGrowSeq( seq, 1 );
1495
1496 block = seq->first;
1497 assert( block->start_index > 0 );
1498 }
1499
1500 delta = MIN( block->start_index, count );
1501 count -= delta;
1502 block->start_index -= delta;
1503 block->count += delta;
1504 seq->total += delta;

Callers 6

cvSeqSliceFunction · 0.85
cvSeqInsertSliceFunction · 0.85
icvReadSeqFunction · 0.85
push_backMethod · 0.85
push_frontMethod · 0.85
icvHoughCirclesGradientFunction · 0.85

Calls 1

icvGrowSeqFunction · 0.85

Tested by

no test coverage detected