⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scope_impl.hpp

📁 ncbi源码
💻 HPP
📖 第 1 页 / 共 2 页
字号:
/* * =========================================================================== * PRODUCTION $Log: scope_impl.hpp,v $ * PRODUCTION Revision 1000.2  2004/04/16 17:00:16  gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.8 * PRODUCTION * =========================================================================== */#ifndef OBJMGR_IMPL_SCOPE_IMPL__HPP#define OBJMGR_IMPL_SCOPE_IMPL__HPP/*  $Id: scope_impl.hpp,v 1000.2 2004/04/16 17:00:16 gouriano Exp $* ===========================================================================**                            PUBLIC DOMAIN NOTICE*               National Center for Biotechnology Information**  This software/database is a "United States Government Work" under the*  terms of the United States Copyright Act.  It was written as part of*  the author's official duties as a United States Government employee and*  thus cannot be copyrighted.  This software/database is freely available*  to the public for use. The National Library of Medicine and the U.S.*  Government have not placed any restriction on its use or reproduction.**  Although all reasonable efforts have been taken to ensure the accuracy*  and reliability of the software and data, the NLM and the U.S.*  Government do not and cannot warrant the performance or results that*  may be obtained by using this software or data. The NLM and the U.S.*  Government disclaim all warranties, express or implied, including*  warranties of performance, merchantability or fitness for any particular*  purpose.**  Please cite the author in any work or product based on this material.** ===========================================================================** Authors:*           Andrei Gourianov*           Aleksey Grichenko*           Michael Kimelman*           Denis Vakatov*           Eugene Vasilchenko** File Description:*           Scope is top-level object available to a client.*           Its purpose is to define a scope of visibility and reference*           resolution and provide access to the bio sequence data**/#include <corelib/ncbiobj.hpp>#include <corelib/ncbimtx.hpp>#include <objmgr/impl/heap_scope.hpp>#include <objmgr/impl/priority.hpp>#include <objmgr/bioseq_handle.hpp>#include <objmgr/seq_entry_handle.hpp>#include <objmgr/seq_annot_handle.hpp>#include <objmgr/seq_id_handle.hpp>#include <objmgr/seq_id_mapper.hpp>#include <objmgr/impl/scope_info.hpp>#include <objmgr/impl/mutex_pool.hpp>#include <objects/seq/Seq_inst.hpp> // for enum EMol#include <set>#include <map>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)// fwd decl// objectsclass CSeq_entry;class CSeq_annot;class CSeq_data;class CSeq_id;class CSeq_loc;class CBioseq;// objmgrclass CScope;class CHeapScope;class CObjectManager;class CDataSource;class CSeq_entry_Info;class CSeq_annot_Info;class CBioseq_Info;class CSeq_id_Handle;class CSeqMap;class CSeqMatch_Info;class CSynonymsSet;class CBioseq_Handle;class CSeq_annot_Handle;class CSeq_entry_Handle;class CBioseq_EditHandle;class CSeq_annot_EditHandle;class CSeq_entry_EditHandle;class CHandleRangeMap;struct CDataSource_ScopeInfo;struct SAnnotTypeSelector;struct SAnnotSelector;class CPriorityTree;class CPriorityNode;/////////////////////////////////////////////////////////////////////////////// CScope_Impl/////////////////////////////////////////////////////////////////////////////class NCBI_XOBJMGR_EXPORT CScope_Impl : public CObject{public:    typedef CConstRef<CTSE_Info>                     TTSE_Lock;    typedef set<TTSE_Lock>                           TTSE_LockSet;    // History of requests    typedef map<CSeq_id_Handle, SSeq_id_ScopeInfo>   TSeq_idMap;    typedef TSeq_idMap::value_type                   TSeq_idMapValue;    typedef CRef<CBioseq_ScopeInfo>                  TBioseqMapValue;    typedef const CBioseq_Info*                      TBioseqMapKey;    typedef map<TBioseqMapKey, TBioseqMapValue>      TBioseqMap;    typedef SSeq_id_ScopeInfo::TAnnotRefSet          TAnnotRefSet;    typedef int                                      TPriority;    //////////////////////////////////////////////////////////////////    // Adding top level objects: DataLoader, Seq-entry, Bioseq, Seq-annot    enum EPriority {        kPriority_NotSet = -1    };    // Add default data loaders from object manager    void AddDefaults(TPriority priority = kPriority_NotSet);    // Add data loader by name.    // The loader (or its factory) must be known to Object Manager.    void AddDataLoader(const string& loader_name,                       TPriority priority = kPriority_NotSet);    // Add the scope's datasources as a single group with the given priority    void AddScope(CScope_Impl& scope,                  TPriority priority = kPriority_NotSet);    // Add seq_entry, default priority is higher than for defaults or loaders    CSeq_entry_Handle AddTopLevelSeqEntry(CSeq_entry& top_entry,                                          TPriority pri = kPriority_NotSet);    // Add bioseq, return bioseq handle. Try to use unresolved seq-id    // from the bioseq, fail if all ids are already resolved to    // other sequences.    CBioseq_Handle AddBioseq(CBioseq& bioseq,                             TPriority pri = kPriority_NotSet);    // Add Seq-annot.    CSeq_annot_Handle AddAnnot(const CSeq_annot& annot,                               TPriority pri = kPriority_NotSet);    //////////////////////////////////////////////////////////////////    // Modification of existing object tree    CBioseq_EditHandle GetEditHandle(const CBioseq_Handle& seq);    CSeq_entry_EditHandle GetEditHandle(const CSeq_entry_Handle& entry);    CSeq_annot_EditHandle GetEditHandle(const CSeq_annot_Handle& annot);    CBioseq_set_EditHandle GetEditHandle(const CBioseq_set_Handle& seqset);    // Add new sub-entry to the existing tree if it is in this scope    CSeq_entry_EditHandle AttachEntry(const CBioseq_set_EditHandle& seqset,                                      CSeq_entry& entry,                                      int index = -1);    CSeq_entry_EditHandle CopyEntry(const CBioseq_set_EditHandle& seqset,                                    const CSeq_entry_Handle& entry,                                    int index = -1);    CSeq_entry_EditHandle TakeEntry(const CBioseq_set_EditHandle& seqset,                                    const CSeq_entry_EditHandle& entry,                                    int index = -1);    // Add annotations to a seq-entry (seq or set)    CSeq_annot_EditHandle AttachAnnot(const CSeq_entry_EditHandle& entry,                                      const CSeq_annot& annot);    CSeq_annot_EditHandle CopyAnnot(const CSeq_entry_EditHandle& entry,                                    const CSeq_annot_Handle& annot);    CSeq_annot_EditHandle TakeAnnot(const CSeq_entry_EditHandle& entry,                                    const CSeq_annot_EditHandle& annot);    // Remove methods    void RemoveEntry(const CSeq_entry_EditHandle& entry);    void RemoveBioseq(const CBioseq_EditHandle& seq);    void RemoveBioseq_set(const CBioseq_set_EditHandle& seqset);    void RemoveAnnot(const CSeq_annot_EditHandle& annot);    // Modify Seq-entry    void SelectNone(const CSeq_entry_EditHandle& entry);    CBioseq_EditHandle SelectSeq(const CSeq_entry_EditHandle& entry,                                 CBioseq& seq);    CBioseq_EditHandle CopySeq(const CSeq_entry_EditHandle& entry,                               const CBioseq_Handle& seq);    CBioseq_EditHandle TakeSeq(const CSeq_entry_EditHandle& entry,                               const CBioseq_EditHandle& seq);    CBioseq_set_EditHandle SelectSet(const CSeq_entry_EditHandle& entry,                                     CBioseq_set& seqset);    CBioseq_set_EditHandle CopySet(const CSeq_entry_EditHandle& entry,                                   const CBioseq_set_Handle& seqset);    CBioseq_set_EditHandle TakeSet(const CSeq_entry_EditHandle& entry,                                   const CBioseq_set_EditHandle& seqset);    // Get bioseq handle, limit id resolving    CBioseq_Handle GetBioseqHandle(const CSeq_id& id, int get_flag);    CBioseq_Handle GetBioseqHandle(const CSeq_id_Handle& id, int get_flag);    CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id& id,                                          const CBioseq_Handle& bh);    CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id& id,                                          const CSeq_entry_Handle& seh);    CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id_Handle& id,                                          const CBioseq_Handle& bh);    CBioseq_Handle GetBioseqHandleFromTSE(const CSeq_id_Handle& id,                                          const CSeq_entry_Handle& seh);    // Get bioseq handle by seqloc    CBioseq_Handle GetBioseqHandle(const CSeq_loc& loc, int get_flag);    // Deprecated interface    CBioseq_Handle GetBioseqHandle(const CBioseq& bioseq);    CSeq_entry_Handle GetSeq_entryHandle(const CSeq_entry& entry);    CSeq_annot_Handle GetSeq_annotHandle(const CSeq_annot& annot);    void ResetHistory(void);    virtual void DebugDump(CDebugDumpContext ddc, unsigned int depth) const;    CConstRef<CSynonymsSet> GetSynonyms(const CSeq_id& id);    CConstRef<CSynonymsSet> GetSynonyms(const CSeq_id_Handle& id);    CConstRef<CSynonymsSet> GetSynonyms(const CBioseq_Handle& bh);    typedef vector<CSeq_entry_Handle> TTSE_Handles;    void GetAllTSEs(TTSE_Handles& tses, int kind);private:    // constructor/destructor visible from CScope    CScope_Impl(CObjectManager& objmgr);    virtual ~CScope_Impl(void);    // to prevent copying    CScope_Impl(const CScope_Impl&);    CScope_Impl& operator=(const CScope_Impl&);    // Return the highest priority loader or null    CDataSource* GetFirstLoaderSource(void);    void UpdateAnnotIndex(const CSeq_annot& limit_annot);    void UpdateAnnotIndex(const CSeq_annot_Handle& annot);    CConstRef<TAnnotRefSet>    GetTSESetWithAnnots(const CSeq_id_Handle& idh_type);    CConstRef<TAnnotRefSet>    GetTSESetWithAnnots(const CBioseq_Handle& bh);    void x_AttachToOM(CObjectManager& objmgr);    void x_DetachFromOM(void);    void x_ResetHistory(void);    // clean some cache entries when new data source is added    void x_ClearCacheOnNewData(void);    void x_ClearAnnotCache(void);    void x_ClearCacheOnRemoveData(const CSeq_entry_Info& entry);    void x_ClearCacheOnRemoveData(const CBioseq_set_Info& seqset);    void x_ClearCacheOnRemoveData(const CBioseq_Info& seq);    CSeq_entry_EditHandle x_AttachEntry(const CBioseq_set_EditHandle& seqset,                                        CRef<CSeq_entry_Info> entry,                                        int index);    CSeq_annot_EditHandle x_AttachAnnot(const CSeq_entry_EditHandle& entry,                                        CRef<CSeq_annot_Info> annot);    CBioseq_EditHandle x_SelectSeq(const CSeq_entry_EditHandle& entry,                                   CRef<CBioseq_Info> bioseq);    CBioseq_set_EditHandle x_SelectSet(const CSeq_entry_EditHandle& entry,                                       CRef<CBioseq_set_Info> seqset);    // Find the best possible resolution for the Seq-id    void x_ResolveSeq_id(TSeq_idMapValue& id, int get_flag);    // Iterate over priorities, find all possible data sources    CDataSource_ScopeInfo* x_FindBioseqInfo(const CPriorityTree& tree,                                            const CSeq_id_Handle& idh,                                            const TSeq_id_HandleSet* hset,                                            CSeqMatch_Info& match_info,                                            int get_flag);    CDataSource_ScopeInfo* x_FindBioseqInfo(const CPriorityNode& node,                                            const CSeq_id_Handle& idh,                                            const TSeq_id_HandleSet* hset,                                            CSeqMatch_Info& match_info,                                            int get_flag);    CDataSource_ScopeInfo* x_FindBioseqInfo(CDataSource_ScopeInfo& ds_info,                                            const CSeq_id_Handle& idh,                                            const TSeq_id_HandleSet* hset,                                            CSeqMatch_Info& match_info,                                            int get_flag);    CBioseq_Handle x_GetBioseqHandleFromTSE(const CSeq_id_Handle& id,                                            const CTSE_Info& tse);    CBioseq_Handle GetBioseqHandle(const CBioseq_Info& seq);    CBioseq_Handle x_GetBioseqHandle(const CBioseq_Info& seq);public:    CConstRef<CTSE_Info> x_GetTSE_Info(const CSeq_entry& tse);    CConstRef<CSeq_entry_Info> x_GetSeq_entry_Info(const CSeq_entry& entry);    CConstRef<CSeq_annot_Info> x_GetSeq_annot_Info(const CSeq_annot& annot);    CConstRef<CBioseq_Info> x_GetBioseq_Info(const CBioseq& bioseq);private:    // Get bioseq handles for sequences from the given TSE using the filter    typedef vector<CBioseq_Handle> TBioseq_HandleSet;    typedef int TBioseqLevelFlag;    void x_PopulateBioseq_HandleSet(const CSeq_entry_Handle& tse,                                    TBioseq_HandleSet& handles,                                    CSeq_inst::EMol filter,                                    TBioseqLevelFlag level);    CConstRef<CSynonymsSet> x_GetSynonyms(CBioseq_ScopeInfo& info);    void x_AddSynonym(const CSeq_id_Handle& idh,                      CSynonymsSet& syn_set, CBioseq_ScopeInfo& info);    // Conflict reporting function    enum EConflict {        eConflict_History,        eConflict_Live    };    void x_ThrowConflict(EConflict conflict_type,                         const CSeqMatch_Info& info1,                         const CSeqMatch_Info& info2) const;    TSeq_idMapValue& x_GetSeq_id_Info(const CSeq_id_Handle& id);    TSeq_idMapValue& x_GetSeq_id_Info(const CBioseq_Handle& bh);    TSeq_idMapValue* x_FindSeq_id_Info(const CSeq_id_Handle& id);    CRef<CBioseq_ScopeInfo> x_InitBioseq_Info(TSeq_idMapValue& info,                                              int get_flag);    bool x_InitBioseq_Info(TSeq_idMapValue& info,                           CBioseq_ScopeInfo& bioseq_info);    CRef<CBioseq_ScopeInfo> x_GetBioseq_Info(const CSeq_id_Handle& id,                                             int get_flag);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -