| 3249 | |
| 3250 | |
| 3251 | CV_IMPL void |
| 3252 | cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader, |
| 3253 | int len, void* _data, const char* dt ) |
| 3254 | { |
| 3255 | char* data0 = (char*)_data; |
| 3256 | int fmt_pairs[CV_FS_MAX_FMT_PAIRS*2], k = 0, fmt_pair_count; |
| 3257 | int i = 0, offset = 0, count = 0; |
| 3258 | |
| 3259 | CV_CHECK_FILE_STORAGE( fs ); |
| 3260 | |
| 3261 | if( !reader || !data0 ) |
| 3262 | CV_Error( CV_StsNullPtr, "Null pointer to reader or destination array" ); |
| 3263 | |
| 3264 | if( !reader->seq && len != 1 ) |
| 3265 | CV_Error( CV_StsBadSize, "The readed sequence is a scalar, thus len must be 1" ); |
| 3266 | |
| 3267 | fmt_pair_count = icvDecodeFormat( dt, fmt_pairs, CV_FS_MAX_FMT_PAIRS ); |
| 3268 | |
| 3269 | for(;;) |
| 3270 | { |
| 3271 | for( k = 0; k < fmt_pair_count; k++ ) |
| 3272 | { |
| 3273 | int elem_type = fmt_pairs[k*2+1]; |
| 3274 | int elem_size = CV_ELEM_SIZE(elem_type); |
| 3275 | char* data; |
| 3276 | |
| 3277 | count = fmt_pairs[k*2]; |
| 3278 | offset = cvAlign( offset, elem_size ); |
| 3279 | data = data0 + offset; |
| 3280 | |
| 3281 | for( i = 0; i < count; i++ ) |
| 3282 | { |
| 3283 | CvFileNode* node = (CvFileNode*)reader->ptr; |
| 3284 | if( CV_NODE_IS_INT(node->tag) ) |
| 3285 | { |
| 3286 | int ival = node->data.i; |
| 3287 | |
| 3288 | switch( elem_type ) |
| 3289 | { |
| 3290 | case CV_8U: |
| 3291 | *(uchar*)data = CV_CAST_8U(ival); |
| 3292 | data++; |
| 3293 | break; |
| 3294 | case CV_8S: |
| 3295 | *(char*)data = CV_CAST_8S(ival); |
| 3296 | data++; |
| 3297 | break; |
| 3298 | case CV_16U: |
| 3299 | *(ushort*)data = CV_CAST_16U(ival); |
| 3300 | data += sizeof(ushort); |
| 3301 | break; |
| 3302 | case CV_16S: |
| 3303 | *(short*)data = CV_CAST_16S(ival); |
| 3304 | data += sizeof(short); |
| 3305 | break; |
| 3306 | case CV_32S: |
| 3307 | *(int*)data = ival; |
| 3308 | data += sizeof(int); |
no test coverage detected