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

Function icvReadSeqTree

deps/opencv/modules/core/src/persistence.cpp:4370–4427  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4368
4369
4370static void*
4371icvReadSeqTree( 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}

Callers

nothing calls this directly

Calls 4

cvGetFileNodeByNameFunction · 0.85
cvStartReadSeqFunction · 0.85
cvReadFunction · 0.85
cvReadIntByNameFunction · 0.85

Tested by

no test coverage detected