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

Function cvSeqPopMulti

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

Remove several elements from the end of sequence: */

Source from the content-addressed store, hash-verified

1514
1515/* Remove several elements from the end of sequence: */
1516CV_IMPL void
1517cvSeqPopMulti( CvSeq *seq, void *_elements, int count, int front )
1518{
1519 char *elements = (char *) _elements;
1520
1521 if( !seq )
1522 CV_Error( CV_StsNullPtr, "NULL sequence pointer" );
1523 if( count < 0 )
1524 CV_Error( CV_StsBadSize, "number of removed elements is negative" );
1525
1526 count = MIN( count, seq->total );
1527
1528 if( !front )
1529 {
1530 if( elements )
1531 elements += count * seq->elem_size;
1532
1533 while( count > 0 )
1534 {
1535 int delta = seq->first->prev->count;
1536
1537 delta = MIN( delta, count );
1538 assert( delta > 0 );
1539
1540 seq->first->prev->count -= delta;
1541 seq->total -= delta;
1542 count -= delta;
1543 delta *= seq->elem_size;
1544 seq->ptr -= delta;
1545
1546 if( elements )
1547 {
1548 elements -= delta;
1549 memcpy( elements, seq->ptr, delta );
1550 }
1551
1552 if( seq->first->prev->count == 0 )
1553 icvFreeSeqBlock( seq, 0 );
1554 }
1555 }
1556 else
1557 {
1558 while( count > 0 )
1559 {
1560 int delta = seq->first->count;
1561
1562 delta = MIN( delta, count );
1563 assert( delta > 0 );
1564
1565 seq->first->count -= delta;
1566 seq->total -= delta;
1567 count -= delta;
1568 seq->first->start_index += delta;
1569 delta *= seq->elem_size;
1570
1571 if( elements )
1572 {
1573 memcpy( elements, seq->first->data, delta );

Callers 3

cvClearSeqFunction · 0.85
cvSeqRemoveSliceFunction · 0.85
icvApproxPolyDPFunction · 0.85

Calls 1

icvFreeSeqBlockFunction · 0.85

Tested by

no test coverage detected