CSeq_entry_Handle CBioseq_Handle::GetComplexityLevel(CBioseq_set::EClass cls) const { const CBioseq_set_Handle::TComplexityTable& ctab = CBioseq_set_Handle::sx_GetComplexityTable(); if (cls == CBioseq_set::eClass_other) { // adjust 255 to the correct value cls = CBioseq_set::EClass(sizeof(ctab) - 1); } CSeq_entry_Handle last = GetParentEntry(); _ASSERT(last && last.IsSeq()); CSeq_entry_Handle e = last.GetParentEntry(); while ( e ) { _ASSERT(e.IsSet()); // Found good level if ( last.IsSet() && ctab[last.GetSet().GetClass()] == ctab[cls] ) break; // Gone too high if ( ctab[e.GetSet().GetClass()] > ctab[cls] ) { break; } // Go up one level last = e; e = e.GetParentEntry(); } return last; }