Initialize sequence reader: */
| 923 | |
| 924 | /* Initialize sequence reader: */ |
| 925 | CV_IMPL void |
| 926 | cvStartReadSeq( const CvSeq *seq, CvSeqReader * reader, int reverse ) |
| 927 | { |
| 928 | CvSeqBlock *first_block; |
| 929 | CvSeqBlock *last_block; |
| 930 | |
| 931 | if( reader ) |
| 932 | { |
| 933 | reader->seq = 0; |
| 934 | reader->block = 0; |
| 935 | reader->ptr = reader->block_max = reader->block_min = 0; |
| 936 | } |
| 937 | |
| 938 | if( !seq || !reader ) |
| 939 | CV_Error( CV_StsNullPtr, "" ); |
| 940 | |
| 941 | reader->header_size = sizeof( CvSeqReader ); |
| 942 | reader->seq = (CvSeq*)seq; |
| 943 | |
| 944 | first_block = seq->first; |
| 945 | |
| 946 | if( first_block ) |
| 947 | { |
| 948 | last_block = first_block->prev; |
| 949 | reader->ptr = first_block->data; |
| 950 | reader->prev_elem = CV_GET_LAST_ELEM( seq, last_block ); |
| 951 | reader->delta_index = seq->first->start_index; |
| 952 | |
| 953 | if( reverse ) |
| 954 | { |
| 955 | schar *temp = reader->ptr; |
| 956 | |
| 957 | reader->ptr = reader->prev_elem; |
| 958 | reader->prev_elem = temp; |
| 959 | |
| 960 | reader->block = last_block; |
| 961 | } |
| 962 | else |
| 963 | { |
| 964 | reader->block = first_block; |
| 965 | } |
| 966 | |
| 967 | reader->block_min = reader->block->data; |
| 968 | reader->block_max = reader->block_min + reader->block->count * seq->elem_size; |
| 969 | } |
| 970 | else |
| 971 | { |
| 972 | reader->delta_index = 0; |
| 973 | reader->block = 0; |
| 974 | |
| 975 | reader->ptr = reader->prev_elem = reader->block_min = reader->block_max = 0; |
| 976 | } |
| 977 | } |
| 978 | |
| 979 | |
| 980 | /* Change the current reading block |
no outgoing calls
no test coverage detected