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

📄 scope_info.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: scope_info.hpp,v $ * PRODUCTION Revision 1000.2  2004/04/12 17:28:25  gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.8 * PRODUCTION * =========================================================================== */#ifndef SCOPE_INFO__HPP#define SCOPE_INFO__HPP/*  $Id: scope_info.hpp,v 1000.2 2004/04/12 17:28:25 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.** ===========================================================================** Author: Eugene Vasilchenko** File Description:*     Structures used by CScope**/#include <corelib/ncbiobj.hpp>#include <corelib/ncbimtx.hpp>#include <objmgr/seq_id_handle.hpp>#include <objmgr/impl/mutex_pool.hpp>#include <objmgr/objmgr_exception.hpp>#include <objmgr/impl/tse_info.hpp>#include <set>#include <utility>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)class CDataSource;class CDataLoader;class CSeqMap;class CScope;class CBioseq_Info;class CSynonymsSet;struct SSeq_id_ScopeInfo;struct NCBI_XOBJMGR_EXPORT CDataSource_ScopeInfo : public CObject{    typedef CRef<CDataSource> TDataSourceLock;    CDataSource_ScopeInfo(CDataSource& ds);    ~CDataSource_ScopeInfo(void);    typedef CConstRef<CTSE_Info>                     TTSE_Lock;    typedef set<TTSE_Lock>                           TTSE_LockSet;    const TTSE_LockSet& GetTSESet(void) const;    CDataSource& GetDataSource(void);    const CDataSource& GetDataSource(void) const;    CDataLoader* GetDataLoader(void);protected:    friend class CScope_Impl;    CFastMutex& GetMutex(void);    void AddTSE(const CTSE_Info& tse);    void Reset(void);private:    CDataSource_ScopeInfo(const CDataSource_ScopeInfo&);    const CDataSource_ScopeInfo& operator=(const CDataSource_ScopeInfo&);    TDataSourceLock m_DataSource;    TTSE_LockSet    m_TSE_LockSet;    CFastMutex      m_Leaf_Mtx; // for m_TSE_LockSet};class NCBI_XOBJMGR_EXPORT CBioseq_ScopeInfo : public CObject{public:    typedef pair<const CSeq_id_Handle, SSeq_id_ScopeInfo> TScopeInfo;    CBioseq_ScopeInfo(TScopeInfo* scope_info); // no sequence    CBioseq_ScopeInfo(TScopeInfo* scope_info,                      const CConstRef<CBioseq_Info>& bioseq);    ~CBioseq_ScopeInfo(void);    CScope& GetScope(void) const;    bool HasBioseq(void) const;    const CSeq_id_Handle& GetSeq_id_Handle(void) const;    const CBioseq_Info& GetBioseq_Info(void) const;    const CTSE_Info& GetTSE_Info(void) const;    CDataSource& GetDataSource(void) const;     // check if the scope has not been reset    void CheckScope(void) const;private:    friend class CScope_Impl;    friend class CSeq_id_ScopeInfo;    // owner scope's info    TScopeInfo*              m_ScopeInfo;    // bioseq object if any    // if none -> no bioseq for this Seq_id, but there might be annotations    // if buiseq exists, m_TSE_Lock holds lock for TSE containing bioseq    CConstRef<CBioseq_Info>  m_Bioseq_Info;    CConstRef<CTSE_Info>     m_TSE_Lock;    // caches synonyms of bioseq if any    // all synonyms share the same CBioseq_ScopeInfo object    CInitMutex<CSynonymsSet> m_SynCache;private:    CBioseq_ScopeInfo(const CBioseq_ScopeInfo& info);    const CBioseq_ScopeInfo& operator=(const CBioseq_ScopeInfo& info);};struct NCBI_XOBJMGR_EXPORT SSeq_id_ScopeInfo{    SSeq_id_ScopeInfo(CScope* scope);    ~SSeq_id_ScopeInfo(void);    typedef CConstRef<CTSE_Info>                     TTSE_Lock;    typedef set<TTSE_Lock>                           TTSE_LockSet;    typedef CObjectFor<TTSE_LockSet>                 TAnnotRefSet;    typedef CInitMutex<TAnnotRefSet>                 TAnnotRefInfo;    // owner scope    CScope*                       m_Scope;    // caches and locks other (not main) TSEs with annotations on this Seq-id    CInitMutex<CBioseq_ScopeInfo> m_Bioseq_Info;    // caches and locks other (not main) TSEs with annotations on this Seq-id    TAnnotRefInfo                 m_AllAnnotRef_Info;};typedef CRef<CObject> TBlob_ID;class NCBI_XOBJMGR_EXPORT CBlob_Info{public:    CBlob_Info(void)        : m_Blob_ID(0), m_Source(0) {}    CBlob_Info(TBlob_ID bid, CDataSource& src)        : m_Blob_ID(bid), m_Source(&src) {}    ~CBlob_Info(void) {}    CBlob_Info(const CBlob_Info& info)        : m_Blob_ID(info.m_Blob_ID), m_Source(info.m_Source) {}    CBlob_Info& operator =(const CBlob_Info& info)        {            if (&info != this) {                m_Blob_ID = info.m_Blob_ID;                m_Source = info.m_Source;            }            return *this;        }    operator bool(void)        { return bool(m_Blob_ID)  &&  m_Source; }    bool operator !(void)        { return !m_Blob_ID  ||  !m_Source; }    TBlob_ID     m_Blob_ID;    CDataSource* m_Source;};/////////////////////////////////////////////////////////////////////////////// Inline methods//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CDataSource_ScopeInfo/////////////////////////////////////////////////////////////////////////////inlineCDataSource& CDataSource_ScopeInfo::GetDataSource(void){    return *m_DataSource;}inlineconst CDataSource& CDataSource_ScopeInfo::GetDataSource(void) const{    return *m_DataSource;}inlineCFastMutex& CDataSource_ScopeInfo::GetMutex(void){    return m_Leaf_Mtx;}/////////////////////////////////////////////////////////////////////////////// CBioseq_ScopeInfo/////////////////////////////////////////////////////////////////////////////inlinebool CBioseq_ScopeInfo::HasBioseq(void) const{    return m_Bioseq_Info;}inlineconst CBioseq_Info& CBioseq_ScopeInfo::GetBioseq_Info(void) const{    return *m_Bioseq_Info;}inlineconst CSeq_id_Handle& CBioseq_ScopeInfo::GetSeq_id_Handle(void) const{    return m_ScopeInfo->first;}inlinevoid CBioseq_ScopeInfo::CheckScope(void) const{    if ( !m_ScopeInfo ) {        NCBI_THROW(CObjMgrException, eInvalidHandle,                   "No scope associated with bioseq info");    }}END_SCOPE(objects)END_NCBI_SCOPE/** ---------------------------------------------------------------------------* $Log: scope_info.hpp,v $* Revision 1000.2  2004/04/12 17:28:25  gouriano* PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.8** Revision 1.8  2004/01/27 17:10:12  ucko* +tse_info.hpp due to use of CConstRef<CTSE_Info>** Revision 1.7  2003/11/17 16:03:13  grichenk* Throw exception in CBioseq_Handle if the parent scope has been reset** Revision 1.6  2003/10/07 13:43:22  vasilche* Added proper handling of named Seq-annots.* Added feature search from named Seq-annots.* Added configurable adaptive annotation search (default: gene, cds, mrna).* Fixed selection of blobs for loading from GenBank.* Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.* Fixed leaked split chunks annotation stubs.* Moved some classes definitions in separate *.cpp files.** Revision 1.5  2003/09/30 16:22:01  vasilche* Updated internal object manager classes to be able to load ID2 data.* SNP blobs are loaded as ID2 split blobs - readers convert them automatically.* Scope caches results of requests for data to data loaders.* Optimized CSeq_id_Handle for gis.* Optimized bioseq lookup in scope.* Reduced object allocations in annotation iterators.* CScope is allowed to be destroyed before other objects using this scope are* deleted (feature iterators, bioseq handles etc).* Optimized lookup for matching Seq-ids in CSeq_id_Mapper.* Added 'adaptive' option to objmgr_demo application.** Revision 1.4  2003/06/19 19:48:16  vasilche* Removed unnecessary copy constructor of SSeq_id_ScopeInfo.** Revision 1.3  2003/06/19 19:31:00  vasilche* Added missing CBioseq_ScopeInfo destructor for MSVC.** Revision 1.2  2003/06/19 19:08:31  vasilche* Added include to make MSVC happy.** Revision 1.1  2003/06/19 18:23:45  vasilche* Added several CXxx_ScopeInfo classes for CScope related information.* CBioseq_Handle now uses reference to CBioseq_ScopeInfo.* Some fine tuning of locking in CScope.*** ===========================================================================*/#endif  // SCOPE_INFO__HPP

⌨️ 快捷键说明

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