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

Function cvSeqSort

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

Source from the content-addressed store, hash-verified

1897}
1898
1899CV_IMPL void
1900cvSeqSort( CvSeq* seq, CvCmpFunc cmp_func, void* aux )
1901{
1902 int elem_size;
1903 int isort_thresh = 7;
1904 CvSeqReader left, right;
1905 int sp = 0;
1906
1907 struct
1908 {
1909 CvSeqReaderPos lb;
1910 CvSeqReaderPos ub;
1911 }
1912 stack[48];
1913
1914 if( !CV_IS_SEQ(seq) )
1915 CV_Error( !seq ? CV_StsNullPtr : CV_StsBadArg, "Bad input sequence" );
1916
1917 if( !cmp_func )
1918 CV_Error( CV_StsNullPtr, "Null compare function" );
1919
1920 if( seq->total <= 1 )
1921 return;
1922
1923 elem_size = seq->elem_size;
1924 isort_thresh *= elem_size;
1925
1926 cvStartReadSeq( seq, &left, 0 );
1927 right = left;
1928 CV_SAVE_READER_POS( left, stack[0].lb );
1929 CV_PREV_SEQ_ELEM( elem_size, right );
1930 CV_SAVE_READER_POS( right, stack[0].ub );
1931
1932 while( sp >= 0 )
1933 {
1934 CV_RESTORE_READER_POS( left, stack[sp].lb );
1935 CV_RESTORE_READER_POS( right, stack[sp].ub );
1936 sp--;
1937
1938 for(;;)
1939 {
1940 int i, n, m;
1941 CvSeqReader ptr, ptr2;
1942
1943 if( left.block == right.block )
1944 n = (int)(right.ptr - left.ptr) + elem_size;
1945 else
1946 {
1947 n = cvGetSeqReaderPos( &right );
1948 n = (n - cvGetSeqReaderPos( &left ) + 1)*elem_size;
1949 }
1950
1951 if( n <= isort_thresh )
1952 {
1953 insert_sort:
1954 ptr = ptr2 = left;
1955 CV_NEXT_SEQ_ELEM( elem_size, ptr );
1956 CV_NEXT_SEQ_ELEM( elem_size, right );

Callers 1

icvWriteSparseMatFunction · 0.85

Calls 4

cvStartReadSeqFunction · 0.85
cvGetSeqReaderPosFunction · 0.85
cvSetSeqReaderPosFunction · 0.85
icvMed3Function · 0.85

Tested by

no test coverage detected