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

📄 cache.hpp

📁 ncbi源码
💻 HPP
字号:
/* * =========================================================================== * PRODUCTION $Log: cache.hpp,v $ * PRODUCTION Revision 1000.1  2004/04/12 17:27:03  gouriano * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R6.13 * PRODUCTION * =========================================================================== */#ifndef NCBI_TAXON1_CACHE_HPP#define NCBI_TAXON1_CACHE_HPP/* $Id: cache.hpp,v 1000.1 2004/04/12 17:27:03 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:  Vladimir Soussov, Michael Domrachev * * File Description: *     NCBI Taxonomy information retreival library caching mechanism * */#include <objects/taxon1/taxon1.hpp>#include <objects/seqfeat/seqfeat__.hpp>#include "ctreecont.hpp"#include <map>BEGIN_NCBI_SCOPEBEGIN_objects_SCOPEclass CTaxon1Node;class COrgRefCache{public:    COrgRefCache( CTaxon1& host );    bool Init( unsigned nCapacity = 10 );    bool Lookup( int tax_id, CTaxon1Node** ppNode );    bool LookupAndAdd( int tax_id, CTaxon1Node** ppData );    bool LookupAndInsert( int tax_id, CTaxon1_data** ppData );    bool LookupAndInsert( int tax_id, CTaxon2_data** ppData );    bool Lookup( int tax_id, CTaxon1_data** ppData );    bool Lookup( int tax_id, CTaxon2_data** ppData );    bool Insert1( CTaxon1Node& node );    bool Insert2( CTaxon1Node& node );    // Rank stuff    const char* GetRankName( int rank ) const;    int GetSuperkingdomRank() const { return m_nSuperkingdomRank; }    int GetFamilyRank() const { return m_nFamilyRank; }    int GetOrderRank() const { return m_nOrderRank; }    int GetClassRank() const { return m_nClassRank; }    int GetGenusRank() const { return m_nGenusRank; }    int GetSubgenusRank() const { return m_nSubgenusRank; }    int GetSpeciesRank() const { return m_nSpeciesRank; }    int GetSubspeciesRank() const { return m_nSubspeciesRank; }    int GetFormaRank() const { return m_nFormaRank; }    int GetVarietyRank() const { return m_nVarietyRank; }    const char* GetNameClassName( short nc ) const;    short GetPreferredCommonNameClass() const { return m_ncPrefCommon; }    short GetCommonNameClass() const { return m_ncCommon; }    short GetSynonymNameClass() const { return m_ncSynonym; }    short GetGBAcronymNameClass() const { return m_ncGBAcronym; }    short GetGBSynonymNameClass() const { return m_ncGBSynonym; }    short GetGBAnamorphNameClass() const { return m_ncGBAnamorph; }    const char* GetDivisionName( short div_id ) const;    const char* GetDivisionCode( short div_id ) const;    short GetVirusesDivision() const { return m_divViruses; }    short GetPhagesDivision() const { return m_divPhages; }    CTreeCont& GetTree() { return m_tPartTree; }    const CTreeCont& GetTree() const { return m_tPartTree; }    void  SetIndexEntry( int id, CTaxon1Node* pNode );    COrgMod::ESubtype GetSubtypeFromName( string& sName );private:    friend class CTaxon1Node;    struct SCacheEntry {        friend class CTaxon1Node;        CRef< CTaxon1_data > m_pTax1;        CRef< CTaxon2_data > m_pTax2;        CTaxon1Node*  m_pTreeNode;        // 	COrg_ref* p_org_ref;        // 	bool is_uncultured;        // 	bool is_species;        // 	bool has_modif;        // 	list< string > blast_name;        CTaxon1_data* GetData1();        CTaxon2_data* GetData2();    };    CTaxon1&           m_host;    unsigned           m_nMaxTaxId;    CTaxon1Node**      m_ppEntries; // index by tax_id    CTreeCont          m_tPartTree; // Partial tree    unsigned           m_nCacheCapacity; // Max number of elements in cache    list<SCacheEntry*> m_lCache; // LRU list    bool             BuildOrgRef( CTaxon1Node& node, COrg_ref& org,                                  bool& is_species );    bool             BuildOrgModifier( CTaxon1Node* pNode,                                       COrgName& on,                                       CTaxon1Node* pParent = NULL );    bool             SetBinomialName( CTaxon1Node& node, COrgName& on );    bool             SetPartialName( CTaxon1Node& node, COrgName& on );    // Rank stuff    int m_nSuperkingdomRank;    int m_nFamilyRank;    int m_nOrderRank;    int m_nClassRank;    int m_nGenusRank;    int m_nSubgenusRank;    int m_nSpeciesRank;    int m_nSubspeciesRank;    int m_nFormaRank;    int m_nVarietyRank;    typedef map<int, string> TRankMap;    typedef TRankMap::const_iterator TRankMapCI;    typedef TRankMap::iterator TRankMapI;    TRankMap m_rankStorage;    bool     InitRanks();    int      FindRankByName( const char* pchName ) const;    // Name classes stuff    short m_ncPrefCommon; // now called "genbank common name"    short m_ncCommon;    short m_ncSynonym;    short m_ncGBAcronym;    short m_ncGBSynonym;    short m_ncGBAnamorph;    typedef map<short, string> TNameClassMap;    typedef TNameClassMap::const_iterator TNameClassMapCI;    typedef TNameClassMap::iterator TNameClassMapI;    TNameClassMap m_ncStorage;    bool     InitNameClasses();    short    FindNameClassByName( const char* pchName ) const;    // Division stuff    short m_divViruses;    short m_divPhages;    struct SDivision {        string m_sCode;        string m_sName;    };    typedef map<short, struct SDivision> TDivisionMap;    typedef TDivisionMap::const_iterator TDivisionMapCI;    typedef TDivisionMap::iterator TDivisionMapI;    TDivisionMap m_divStorage;    bool     InitDivisions();    short    FindDivisionByCode( const char* pchCode ) const;};class CTaxon1Node : public CTreeContNodeBase, public ITaxon1Node {public:    CTaxon1Node( const CRef< CTaxon1_name >& ref )        : m_ref( ref ), m_cacheEntry( NULL ), m_flags( 0 ) {}    explicit CTaxon1Node( const CTaxon1Node& node )        : CTreeContNodeBase(), m_ref( node.m_ref ),	  m_cacheEntry( NULL ), m_flags( 0 ) {}    virtual ~CTaxon1Node() {}    virtual int           GetTaxId() const { return m_ref->GetTaxid(); }    virtual const string& GetName() const { return m_ref->GetOname(); }    virtual const string& GetBlastName() const    { return m_ref->CanGetUname() ? m_ref->GetUname() : kEmptyStr; }    virtual short         GetRank() const;    virtual short         GetDivision() const;    virtual short         GetGC() const;    virtual short         GetMGC() const;                           virtual bool          IsUncultured() const;    virtual bool          IsGenBankHidden() const;    virtual bool          IsRoot() const    { return CTreeContNodeBase::IsRoot(); }    COrgRefCache::SCacheEntry* GetEntry() { return m_cacheEntry; }    bool                  IsJoinTerminal() const    { return m_flags&mJoinTerm ? true : false; }    void                  SetJoinTerminal() { m_flags |= mJoinTerm; }    bool                  IsSubtreeLoaded() const    { return m_flags&mSubtreeLoaded ? true : false; }    void                  SetSubtreeLoaded( bool b )    { if( b ) m_flags |= mSubtreeLoaded; else m_flags &= ~mSubtreeLoaded; }    CTaxon1Node*          GetParent()    { return static_cast<CTaxon1Node*>(Parent()); }private:    friend class COrgRefCache;    enum EFlags {	mJoinTerm      = 0x1,	mSubtreeLoaded = 0x2    };    CRef< CTaxon1_name >       m_ref;    COrgRefCache::SCacheEntry* m_cacheEntry;    unsigned                   m_flags;};class CTaxTreeConstIterator : public ITreeIterator {public:    CTaxTreeConstIterator( CTreeConstIterator* pIt, CTaxon1::EIteratorMode m )	: m_it( pIt ), m_itMode( m )  {}    virtual ~CTaxTreeConstIterator() {	delete m_it;    }    virtual CTaxon1::EIteratorMode GetMode() const { return m_itMode; }    virtual const ITaxon1Node* GetNode() const    { return CastCI(m_it->GetNode()); }    const ITaxon1Node* operator->() const { return GetNode(); }    virtual bool IsLastChild() const;    virtual bool IsFirstChild() const;    virtual bool IsTerminal() const;    // Navigation    virtual void GoRoot() { m_it->GoRoot(); }    virtual bool GoParent();    virtual bool GoChild();    virtual bool GoSibling();    virtual bool GoNode(const ITaxon1Node* pNode);    // move cursor to the nearest common ancestor    // between node pointed by cursor and the node    // with given node_id    virtual bool GoAncestor(const ITaxon1Node* pNode);    // check if node pointed by cursor    // is belong to subtree wich root node    // has given node_id    virtual bool BelongSubtree(const ITaxon1Node* subtree_root) const;    // check if node with given node_id belongs    // to subtree pointed by cursor    virtual bool AboveNode(const ITaxon1Node* node) const;protected:    virtual bool IsVisible( const CTreeContNodeBase* p ) const = 0;    // Moves m_it to the next visible for this parent    bool NextVisible( const CTreeContNodeBase* pParent ) const;    const ITaxon1Node* CastCI( const CTreeContNodeBase* p ) const    { return static_cast<const ITaxon1Node*>	  (static_cast<const CTaxon1Node*>(p)); }    const CTreeContNodeBase* CastIC( const ITaxon1Node* p ) const    { return static_cast<const CTreeContNodeBase*>	  (static_cast<const CTaxon1Node*>(p)); }    mutable CTreeConstIterator* m_it;    CTaxon1::EIteratorMode      m_itMode;};class CFullTreeConstIterator : public CTaxTreeConstIterator {public:    CFullTreeConstIterator( CTreeConstIterator* pIt )	: CTaxTreeConstIterator( pIt, CTaxon1::eIteratorMode_FullTree ) {}    virtual ~CFullTreeConstIterator() {}    virtual bool IsLastChild() const    { return m_it->GetNode() && m_it->GetNode()->IsLastChild(); }    virtual bool IsFirstChild() const    { return m_it->GetNode() && m_it->GetNode()->IsFirstChild(); }    virtual bool IsTerminal() const    { return m_it->GetNode() && m_it->GetNode()->IsTerminal(); }    // Navigation    virtual bool GoParent() { return m_it->GoParent(); }    virtual bool GoChild() { return m_it->GoChild(); }    virtual bool GoSibling() { return m_it->GoSibling(); }    virtual bool GoNode(const ITaxon1Node* pNode)    { return m_it->GoNode(CastIC(pNode)); }    // move cursor to the nearest common ancestor    // between node pointed by cursor and the node    // with given node_id    virtual bool GoAncestor(const ITaxon1Node* pNode)    { return m_it->GoAncestor(CastIC(pNode)); }    // check if node pointed by cursor    // is belong to subtree wich root node    // has given node_id    virtual bool BelongSubtree(const ITaxon1Node* subtree_root) const    { return m_it->BelongSubtree(CastIC(subtree_root)); }	    // check if node with given node_id belongs    // to subtree pointed by cursor    virtual bool AboveNode(const ITaxon1Node* node) const    { return m_it->AboveNode(CastIC(node)); }protected:    virtual bool IsVisible( const CTreeContNodeBase* ) const { return true; }};class CTreeLeavesBranchesIterator : public CTaxTreeConstIterator {public:    CTreeLeavesBranchesIterator( CTreeConstIterator* pIt ) :	CTaxTreeConstIterator( pIt, CTaxon1::eIteratorMode_LeavesBranches ) {}    virtual ~CTreeLeavesBranchesIterator() {}    virtual bool IsTerminal() const    { return m_it->GetNode() && m_it->GetNode()->IsTerminal(); }protected:    virtual bool IsVisible( const CTreeContNodeBase* p ) const;};class CTreeBestIterator : public CTaxTreeConstIterator {public:    CTreeBestIterator( CTreeConstIterator* pIt ) :	CTaxTreeConstIterator( pIt, CTaxon1::eIteratorMode_Best ) {}    virtual ~CTreeBestIterator() {}    virtual bool IsTerminal() const    { return m_it->GetNode() && m_it->GetNode()->IsTerminal(); }protected:    virtual bool IsVisible( const CTreeContNodeBase* p ) const;};class CTreeBlastIterator : public CTaxTreeConstIterator {public:    CTreeBlastIterator( CTreeConstIterator* pIt ) :	CTaxTreeConstIterator( pIt, CTaxon1::eIteratorMode_Blast ) {}    virtual ~CTreeBlastIterator() {}protected:    virtual bool IsVisible( const CTreeContNodeBase* p ) const;};END_objects_SCOPEEND_NCBI_SCOPE/* * $Log: cache.hpp,v $ * Revision 1000.1  2004/04/12 17:27:03  gouriano * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R6.13 * * Revision 6.13  2004/02/04 16:14:44  domrach * New iterator types (modes of operation) are introduced. They include: * full tree, branches'n'leaves, best, and blast. Position inquiry f-ns * IsTerminal(), IsFirstChild(), and IsLastChild() has been moved from * ITreeNode to ITreeIterator. Node loading f-ns() now return the ITreeNode * for tax id. * * Revision 6.12  2003/06/23 20:42:08  domrach * New treatment of subspecies names introduced * * Revision 6.11  2003/06/05 20:44:01  domrach * Adjusted to the new CanGetXxx verification methods * * Revision 6.10  2003/05/31 15:55:48  lavr * Explicit 'int'->'bool' casts to avoid compiler warnings * * Revision 6.9  2003/05/06 19:53:53  domrach * New functions and interfaces for traversing the cached partial taxonomy tree introduced. Convenience functions GetDivisionName() and GetRankName() were added * * Revision 6.8  2003/03/05 21:33:52  domrach * Enhanced orgref processing. Orgref cache capacity control added. * * Revision 6.7  2003/01/21 19:36:23  domrach * Secondary tax id support added. New copy constructor for partial tree support added. * * Revision 6.6  2003/01/10 19:58:46  domrach * Function GetPopsetJoin() added to CTaxon1 class * * Revision 6.5  2002/11/08 14:39:52  domrach * Member function GetSuperkingdom() added * * Revision 6.4  2002/08/06 15:09:46  domrach * Introducing new genbank name classes * * Revision 6.3  2002/02/14 22:44:50  vakatov * Use STimeout instead of time_t. * Get rid of warnings and extraneous #include's, shuffled code a little. * * Revision 6.2  2002/01/31 00:31:26  vakatov * Follow the renaming of "CTreeCont.hpp" to "ctreecont.hpp". * Get rid of "std::" which is unnecessary and sometimes un-compilable. * Also done some source identation/beautification. * * Revision 6.1  2002/01/28 19:56:10  domrach * Initial checkin of the library implementation files * * =========================================================================== */#endif // NCBI_TAXON1_CACHE_HPP

⌨️ 快捷键说明

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