コード例 #1
0
ファイル: bioseq_handle.cpp プロジェクト: swuecho/igblast
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;
}
コード例 #2
0
ファイル: bioseq_handle.cpp プロジェクト: swuecho/igblast
CSeq_entry_Handle
CBioseq_Handle::GetExactComplexityLevel(CBioseq_set::EClass cls) const
{
    CSeq_entry_Handle ret = GetComplexityLevel(cls);
    if ( ret  &&
         (!ret.IsSet()  ||  !ret.GetSet().IsSetClass()  ||
         ret.GetSet().GetClass() != cls) ) {
        ret.Reset();
    }
    return ret;
}
コード例 #3
0
ファイル: seq_entry_ci.cpp プロジェクト: swuecho/igblast
CSeq_entry_CI::CSeq_entry_CI(const CSeq_entry_Handle& entry,
                             TFlags flags,
                             CSeq_entry::E_Choice     type_filter )
    : m_Flags(flags),
      m_Filter(type_filter)
{
    if ( m_Flags & fIncludeGivenEntry ) {
        m_Current = entry;
        while ((*this)  &&  !x_ValidType()) {
            x_Next();
        }
    } else {
        if ( entry.IsSet() ) {
            x_Initialize( entry.GetSet() );
        }
    }
}