📄 seq_id_tree.hpp
字号:
/* * =========================================================================== * PRODUCTION $Log: seq_id_tree.hpp,v $ * PRODUCTION Revision 1000.1 2004/04/12 17:28:34 gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.5 * PRODUCTION * =========================================================================== */#ifndef OBJECTS_OBJMGR___SEQ_ID_TREE__HPP#define OBJECTS_OBJMGR___SEQ_ID_TREE__HPP/* $Id: seq_id_tree.hpp,v 1000.1 2004/04/12 17:28:34 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: Aleksey Grichenko, Eugene Vasilchenko** File Description:* Seq-id mapper for Object Manager**/#include <corelib/ncbiobj.hpp>#include <corelib/ncbimtx.hpp>#include <corelib/ncbistr.hpp>#include <corelib/ncbi_limits.hpp>#include <objects/general/Date.hpp>#include <objects/general/Dbtag.hpp>#include <objects/general/Object_id.hpp>#include <objects/biblio/Id_pat.hpp>#include <objects/seqloc/Seq_id.hpp>#include <objects/seqloc/PDB_mol_id.hpp>#include <objects/seqloc/PDB_seq_id.hpp>#include <objects/seqloc/Patent_seq_id.hpp>#include <objects/seqloc/Giimport_id.hpp>#include <objects/seqloc/Textseq_id.hpp>#include <objmgr/seq_id_handle.hpp>#include <vector>#include <set>#include <map>BEGIN_NCBI_SCOPEBEGIN_SCOPE(objects)class CSeq_id;class CSeq_id_Handle;class CSeq_id_Info;class CSeq_id_Mapper;class CSeq_id_Which_Tree;//////////////////////////////////////////////////////////////////////// CSeq_id_***_Tree:://// Seq-id sub-type specific trees//// Base class for seq-id type-specific treesclass NCBI_XOBJMGR_EXPORT CSeq_id_Which_Tree : public CObject{public: // 'ctors CSeq_id_Which_Tree(void); virtual ~CSeq_id_Which_Tree(void); static void Initialize(vector<CRef<CSeq_id_Which_Tree> >& v); virtual bool Empty(void) const = 0; // Find exaclty the same seq-id virtual CSeq_id_Handle FindInfo(const CSeq_id& id) const = 0; virtual CSeq_id_Handle FindOrCreate(const CSeq_id& id) = 0; virtual CSeq_id_Handle GetGiHandle(int gi); virtual void DropInfo(const CSeq_id_Info* info); typedef set<CSeq_id_Handle> TSeq_id_MatchList; // Get the list of matching seq-id. virtual bool HaveMatch(const CSeq_id_Handle& id) const; virtual void FindMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list) const = 0; virtual void FindMatchStr(string sid, TSeq_id_MatchList& id_list) const = 0; virtual bool IsBetterVersion(const CSeq_id_Handle& h1, const CSeq_id_Handle& h2) const; // Reverse matching virtual bool HaveReverseMatch(const CSeq_id_Handle& id) const; virtual void FindReverseMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list);protected: friend class CSeq_id_Mapper; CSeq_id_Info* CreateInfo(void); CSeq_id_Info* CreateInfo(const CSeq_id& id); virtual void x_Unindex(const CSeq_id_Info* info) = 0;/* typedef CRWLockPosix TRWLock; typedef TRWLock::TReadLockGuard TReadLockGuard; typedef TRWLock::TWriteLockGuard TWriteLockGuard;*/ typedef CMutex TRWLock; typedef CMutexGuard TReadLockGuard; typedef CMutexGuard TWriteLockGuard; mutable TRWLock m_TreeLock;private: CSeq_id_Which_Tree(const CSeq_id_Which_Tree& tree); const CSeq_id_Which_Tree& operator=(const CSeq_id_Which_Tree& tree);};////////////////////////////////////////////////////////////////////// not-set tree (maximum 1 entry allowed)class CSeq_id_not_set_Tree : public CSeq_id_Which_Tree{public: CSeq_id_not_set_Tree(void); ~CSeq_id_not_set_Tree(void); virtual bool Empty(void) const; virtual CSeq_id_Handle FindInfo(const CSeq_id& id) const; virtual CSeq_id_Handle FindOrCreate(const CSeq_id& id); virtual void DropInfo(const CSeq_id_Info* info); virtual bool HaveMatch(const CSeq_id_Handle& id) const; virtual void FindMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list) const; virtual void FindMatchStr(string sid, TSeq_id_MatchList& id_list) const; virtual bool HaveReverseMatch(const CSeq_id_Handle& id) const; virtual void FindReverseMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list);protected: virtual void x_Unindex(const CSeq_id_Info* info); bool x_Check(const CSeq_id& id) const;};////////////////////////////////////////////////////////////////////// Base class for Gi, Gibbsq & Gibbmt treesclass CSeq_id_int_Tree : public CSeq_id_Which_Tree{public: CSeq_id_int_Tree(void); ~CSeq_id_int_Tree(void); virtual bool Empty(void) const; virtual CSeq_id_Handle FindInfo(const CSeq_id& id) const; virtual CSeq_id_Handle FindOrCreate(const CSeq_id& id); virtual bool HaveMatch(const CSeq_id_Handle& id) const; virtual void FindMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list) const; virtual void FindMatchStr(string sid, TSeq_id_MatchList& id_list) const;protected: virtual void x_Unindex(const CSeq_id_Info* info); virtual bool x_Check(const CSeq_id& id) const = 0; virtual int x_Get(const CSeq_id& id) const = 0;private: typedef map<int, CSeq_id_Info*> TIntMap; TIntMap m_IntMap;};////////////////////////////////////////////////////////////////////// Gibbsq treeclass CSeq_id_Gibbsq_Tree : public CSeq_id_int_Tree{protected: virtual bool x_Check(const CSeq_id& id) const; virtual int x_Get(const CSeq_id& id) const;};////////////////////////////////////////////////////////////////////// Gibbmt treeclass CSeq_id_Gibbmt_Tree : public CSeq_id_int_Tree{protected: virtual bool x_Check(const CSeq_id& id) const; virtual int x_Get(const CSeq_id& id) const;};////////////////////////////////////////////////////////////////////// Gi treeclass CSeq_id_Gi_Tree : public CSeq_id_Which_Tree{public: CSeq_id_Gi_Tree(void); ~CSeq_id_Gi_Tree(void); virtual bool Empty(void) const; virtual CSeq_id_Handle FindInfo(const CSeq_id& id) const; virtual CSeq_id_Handle FindOrCreate(const CSeq_id& id); virtual CSeq_id_Handle GetGiHandle(int gi); virtual void DropInfo(const CSeq_id_Info* info); virtual bool HaveMatch(const CSeq_id_Handle& id) const; virtual void FindMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list) const; virtual void FindMatchStr(string sid, TSeq_id_MatchList& id_list) const;protected: virtual void x_Unindex(const CSeq_id_Info* info); bool x_Check(const CSeq_id& id) const; int x_Get(const CSeq_id& id) const; CConstRef<CSeq_id_Info> m_Info;};////////////////////////////////////////////////////////////////////// Base class for e_Genbank, e_Embl, e_Pir, e_Swissprot, e_Other,// e_Ddbj, e_Prf, e_Tpg, e_Tpe, e_Tpd treesclass CSeq_id_Textseq_Tree : public CSeq_id_Which_Tree{public: CSeq_id_Textseq_Tree(void); ~CSeq_id_Textseq_Tree(void); virtual bool Empty(void) const; virtual CSeq_id_Handle FindInfo(const CSeq_id& id) const; virtual CSeq_id_Handle FindOrCreate(const CSeq_id& id); virtual void FindMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list) const; virtual void FindMatchStr(string sid, TSeq_id_MatchList& id_list) const; virtual bool IsBetterVersion(const CSeq_id_Handle& h1, const CSeq_id_Handle& h2) const; virtual bool HaveReverseMatch(const CSeq_id_Handle& id) const; virtual void FindReverseMatch(const CSeq_id_Handle& id, TSeq_id_MatchList& id_list);protected: virtual void x_Unindex(const CSeq_id_Info* info); virtual bool x_Check(const CSeq_id& id) const = 0; virtual const CTextseq_id& x_Get(const CSeq_id& id) const = 0; CSeq_id_Info* x_FindInfo(const CTextseq_id& tid) const;private: typedef vector<CSeq_id_Info*> TVersions; typedef map<string, TVersions, PNocase> TStringMap; CSeq_id_Info* x_FindVersionEqual(const TVersions& ver_list, const CTextseq_id& tid) const; void x_FindVersionMatch(const TVersions& ver_list, const CTextseq_id& tid, TSeq_id_MatchList& id_list) const; TStringMap m_ByAccession; TStringMap m_ByName; // Used for searching by string};////////////////////////////////////////////////////////////////////// Genbank, EMBL and DDBJ joint tree
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -