| 4368 | |
| 4369 | |
| 4370 | static void* |
| 4371 | icvReadSeqTree( CvFileStorage* fs, CvFileNode* node ) |
| 4372 | { |
| 4373 | void* ptr = 0; |
| 4374 | CvFileNode *sequences_node = cvGetFileNodeByName( fs, node, "sequences" ); |
| 4375 | CvSeq* sequences; |
| 4376 | CvSeq* root = 0; |
| 4377 | CvSeq* parent = 0; |
| 4378 | CvSeq* prev_seq = 0; |
| 4379 | CvSeqReader reader; |
| 4380 | int i, total; |
| 4381 | int prev_level = 0; |
| 4382 | |
| 4383 | if( !sequences_node || !CV_NODE_IS_SEQ(sequences_node->tag) ) |
| 4384 | CV_Error( CV_StsParseError, |
| 4385 | "opencv-sequence-tree instance should contain a field \"sequences\" that should be a sequence" ); |
| 4386 | |
| 4387 | sequences = sequences_node->data.seq; |
| 4388 | total = sequences->total; |
| 4389 | |
| 4390 | cvStartReadSeq( sequences, &reader, 0 ); |
| 4391 | for( i = 0; i < total; i++ ) |
| 4392 | { |
| 4393 | CvFileNode* elem = (CvFileNode*)reader.ptr; |
| 4394 | CvSeq* seq; |
| 4395 | int level; |
| 4396 | seq = (CvSeq*)cvRead( fs, elem ); |
| 4397 | level = cvReadIntByName( fs, elem, "level", -1 ); |
| 4398 | if( level < 0 ) |
| 4399 | CV_Error( CV_StsParseError, "All the sequence tree nodes should contain \"level\" field" ); |
| 4400 | if( !root ) |
| 4401 | root = seq; |
| 4402 | if( level > prev_level ) |
| 4403 | { |
| 4404 | assert( level == prev_level + 1 ); |
| 4405 | parent = prev_seq; |
| 4406 | prev_seq = 0; |
| 4407 | if( parent ) |
| 4408 | parent->v_next = seq; |
| 4409 | } |
| 4410 | else if( level < prev_level ) |
| 4411 | { |
| 4412 | for( ; prev_level > level; prev_level-- ) |
| 4413 | prev_seq = prev_seq->v_prev; |
| 4414 | parent = prev_seq->v_prev; |
| 4415 | } |
| 4416 | seq->h_prev = prev_seq; |
| 4417 | if( prev_seq ) |
| 4418 | prev_seq->h_next = seq; |
| 4419 | seq->v_prev = parent; |
| 4420 | prev_seq = seq; |
| 4421 | prev_level = level; |
| 4422 | CV_NEXT_SEQ_ELEM( sequences->elem_size, reader ); |
| 4423 | } |
| 4424 | |
| 4425 | ptr = root; |
| 4426 | return ptr; |
| 4427 | } |
nothing calls this directly
no test coverage detected