ChunkPath::ChunkPath( const ChunkPath& path ) { for( XMP_Int32 i=0; i<path.length(); i++ ) { this->append( path.identifier(i) ); } }
ChunkPath::MatchResult ChunkPath::match( const ChunkPath& path ) const { MatchResult ret = kNoMatch; if( path.length() > 0 ) { XMP_Int32 depth = ( this->length() > path.length() ? path.length() : this->length() ); XMP_Int32 matchCount = 0; for( XMP_Int32 i=0; i<depth; i++ ) { const ChunkIdentifier& id1 = this->identifier(i); const ChunkIdentifier& id2 = path.identifier(i); if( id1.id == id2.id ) { if( i == this->length() - 1 && id1.type == kType_NONE ) { matchCount++; } else if( id1.type == id2.type ) { matchCount++; } } else break; } if( matchCount == depth ) { ret = ( path.length() >= this->length() ? kFullMatch : kPartMatch ); } } return ret; }