Dbtag.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:10k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: Dbtag.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:32:21  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.16
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: Dbtag.cpp,v 1000.2 2004/06/01 19:32:21 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  .......
  35.  *
  36.  * File Description:
  37.  *   .......
  38.  *
  39.  * Remark:
  40.  *   This code was originally generated by application DATATOOL
  41.  *   using specifications from the ASN data definition file
  42.  *   'general.asn'.
  43.  *
  44.  * ---------------------------------------------------------------------------
  45.  */
  46. // standard includes
  47. // generated includes
  48. #include <ncbi_pch.hpp>
  49. #include <objects/general/Dbtag.hpp>
  50. #include <objects/general/Object_id.hpp>
  51. #include <corelib/ncbistd.hpp>
  52. #include <util/static_map.hpp>
  53. // generated classes
  54. BEGIN_NCBI_SCOPE
  55. BEGIN_objects_SCOPE // namespace ncbi::objects::
  56. typedef pair<const char*, CDbtag::EDbtagType> TDbxrefPair;
  57. static const TDbxrefPair kApprovedDbXrefs[] = {
  58.     TDbxrefPair("ATCC", CDbtag::eDbtagType_ATCC),
  59.     TDbxrefPair("ATCC(dna)", CDbtag::eDbtagType_ATCC_dna),
  60.     TDbxrefPair("ATCC(in host)", CDbtag::eDbtagType_ATCC_in_host),
  61.     TDbxrefPair("AceView/WormGenes", CDbtag::eDbtagType_AceView_WormGenes),
  62.     TDbxrefPair("BDGP_EST", CDbtag::eDbtagType_BDGP_EST),
  63.     TDbxrefPair("BDGP_INS", CDbtag::eDbtagType_BDGP_INS),
  64.     TDbxrefPair("CDD", CDbtag::eDbtagType_CDD),
  65.     TDbxrefPair("CK", CDbtag::eDbtagType_CK),
  66.     TDbxrefPair("COG", CDbtag::eDbtagType_COG),
  67.     TDbxrefPair("ENSEMBL", CDbtag::eDbtagType_ENSEMBL),
  68.     TDbxrefPair("ESTLIB", CDbtag::eDbtagType_ESTLIB),
  69.     TDbxrefPair("FANTOM_DB", CDbtag::eDbtagType_FANTOM_DB),
  70.     TDbxrefPair("FLYBASE", CDbtag::eDbtagType_FLYBASE),
  71.     TDbxrefPair("GABI", CDbtag::eDbtagType_GABI),
  72.     TDbxrefPair("GDB", CDbtag::eDbtagType_GDB),
  73.     TDbxrefPair("GI", CDbtag::eDbtagType_GI),
  74.     TDbxrefPair("GO", CDbtag::eDbtagType_GO),
  75.     TDbxrefPair("GOA", CDbtag::eDbtagType_GOA),
  76.     TDbxrefPair("GeneDB", CDbtag::eDbtagType_GeneDB),
  77.     TDbxrefPair("GeneID", CDbtag::eDbtagType_GeneID),
  78.     TDbxrefPair("IFO", CDbtag::eDbtagType_IFO),
  79.     TDbxrefPair("IMGT/HLA", CDbtag::eDbtagType_IMGT_HLA),
  80.     TDbxrefPair("IMGT/LIGM", CDbtag::eDbtagType_IMGT_LIGM),
  81.     TDbxrefPair("ISFinder", CDbtag::eDbtagType_ISFinder),
  82.     TDbxrefPair("InterimID", CDbtag::eDbtagType_InterimID),
  83.     TDbxrefPair("Interpro", CDbtag::eDbtagType_Interpro),
  84.     TDbxrefPair("JCM", CDbtag::eDbtagType_JCM),
  85.     TDbxrefPair("LocusID", CDbtag::eDbtagType_LocusID),
  86.     TDbxrefPair("MGD", CDbtag::eDbtagType_MGD),
  87.     TDbxrefPair("MGI", CDbtag::eDbtagType_MGI),
  88.     TDbxrefPair("MIM", CDbtag::eDbtagType_MIM),
  89.     TDbxrefPair("MaizeDB", CDbtag::eDbtagType_MaizeDB),
  90.     TDbxrefPair("NextDB", CDbtag::eDbtagType_NextDB),
  91.     TDbxrefPair("PID", CDbtag::eDbtagType_PID),
  92.     TDbxrefPair("PIDd", CDbtag::eDbtagType_PIDd),
  93.     TDbxrefPair("PIDe", CDbtag::eDbtagType_PIDe),
  94.     TDbxrefPair("PIDg", CDbtag::eDbtagType_PIDg),
  95.     TDbxrefPair("PIR", CDbtag::eDbtagType_PIR),
  96.     TDbxrefPair("PSEUDO", CDbtag::eDbtagType_PSEUDO),
  97.     TDbxrefPair("RATMAP", CDbtag::eDbtagType_RATMAP),
  98.     TDbxrefPair("REMTREMBL", CDbtag::eDbtagType_REMTREMBL),
  99.     TDbxrefPair("RGD", CDbtag::eDbtagType_RGD),
  100.     TDbxrefPair("RZPD", CDbtag::eDbtagType_RZPD),
  101.     TDbxrefPair("RiceGenes", CDbtag::eDbtagType_RiceGenes),
  102.     TDbxrefPair("SGD", CDbtag::eDbtagType_SGD),
  103.     TDbxrefPair("SoyBase", CDbtag::eDbtagType_SoyBase),
  104.     TDbxrefPair("Swiss-Prot", CDbtag::eDbtagType_SWISS_PROT),
  105.     TDbxrefPair("TrEMBL", CDbtag::eDbtagType_SPTREMBL),
  106.     TDbxrefPair("UniGene", CDbtag::eDbtagType_UniGene),
  107.     TDbxrefPair("UniSTS", CDbtag::eDbtagType_UniSTS),
  108.     TDbxrefPair("WorfDB", CDbtag::eDbtagType_WorfDB),
  109.     TDbxrefPair("WormBase", CDbtag::eDbtagType_WormBase),
  110.     TDbxrefPair("ZFIN", CDbtag::eDbtagType_ZFIN),
  111.     TDbxrefPair("dbEST", CDbtag::eDbtagType_dbEST),
  112.     TDbxrefPair("dbSNP", CDbtag::eDbtagType_dbSNP),
  113.     TDbxrefPair("dbSTS", CDbtag::eDbtagType_dbSTS),
  114.     TDbxrefPair("niaEST", CDbtag::eDbtagType_niaEST),
  115.     TDbxrefPair("taxon", CDbtag::eDbtagType_taxon)
  116. };
  117. static const TDbxrefPair kApprovedRefSeqDbXrefs[] = {
  118.     TDbxrefPair("DDBJ", CDbtag::eDbtagType_DDBJ),
  119.     TDbxrefPair("EMBL", CDbtag::eDbtagType_EMBL),
  120.     TDbxrefPair("GenBank", CDbtag::eDbtagType_GenBank),
  121.     TDbxrefPair("REBASE", CDbtag::eDbtagType_REBASE)
  122. };
  123. // case sensetive
  124. typedef CStaticArrayMap<const char*, CDbtag::EDbtagType, PCase> TDbxrefTypeMap;
  125. static const TDbxrefTypeMap sc_ApprovedDb(kApprovedDbXrefs,
  126.                                           sizeof(kApprovedDbXrefs));
  127. static const TDbxrefTypeMap sc_ApprovedRefSeqDb(kApprovedRefSeqDbXrefs,
  128.                                                 sizeof(kApprovedRefSeqDbXrefs));
  129. // destructor
  130. CDbtag::~CDbtag(void)
  131. {
  132. }
  133. bool CDbtag::Match(const CDbtag& dbt2) const
  134. {
  135. if (! PNocase().Equals(GetDb(), dbt2.GetDb()))
  136. return false;
  137. return ((GetTag()).Match((dbt2.GetTag())));
  138. }
  139. int CDbtag::Compare(const CDbtag& dbt2) const
  140. {
  141.     int ret = PNocase().Compare(GetDb(), dbt2.GetDb());
  142.     if (ret == 0) {
  143.         ret = GetTag().Compare(dbt2.GetTag());
  144.     }
  145.     return ret;
  146. }
  147. // Appends a label to "label" based on content of CDbtag 
  148. void CDbtag::GetLabel(string* label) const
  149. {
  150.     const CObject_id& id = GetTag();
  151.     switch (id.Which()) {
  152.     case CObject_id::e_Str:
  153.         *label += GetDb() + ": " + id.GetStr();
  154.         break;
  155.     case CObject_id::e_Id:
  156.         *label += GetDb() + ": " + NStr::IntToString(id.GetId());
  157.         break;
  158.     default:
  159.         *label += GetDb();
  160.     }
  161. }
  162. // Test if CDbtag.db is in the approved databases list.
  163. // NOTE: 'GenBank', 'EMBL', 'DDBJ' and 'REBASE' are approved only in 
  164. //        the context of a RefSeq record.
  165. bool CDbtag::IsApproved(bool refseq) const
  166. {
  167.     if ( !CanGetDb() ) {
  168.         return false;
  169.     }
  170.     const string& db = GetDb();
  171.     return sc_ApprovedDb.find(db.c_str()) != sc_ApprovedDb.end()  ||
  172.         (refseq  &&  sc_ApprovedRefSeqDb.find(db.c_str()) != sc_ApprovedRefSeqDb.end());
  173. }
  174. const char* CDbtag::IsApprovedNoCase(bool refseq) const
  175. {
  176.     if ( !CanGetDb() ) {
  177.         return false;
  178.     }
  179.     const string& db = GetDb();
  180.     
  181.     const char* retval = 0;
  182.     ITERATE (TDbxrefTypeMap, it, sc_ApprovedDb) {
  183.         if ( NStr::EqualNocase(db, it->first) ) {
  184.             retval = it->first;
  185.             break;
  186.         }
  187.     }
  188.     if ( retval == 0  &&  refseq ) {
  189.         ITERATE (TDbxrefTypeMap, it, sc_ApprovedRefSeqDb) {
  190.             if ( NStr::EqualNocase(db, it->first) ) {
  191.                 retval = it->first;
  192.                 break;
  193.             }
  194.         }
  195.     }
  196.     return retval;
  197. }
  198. // Retrieve the enumerated type for the dbtag
  199. CDbtag::EDbtagType CDbtag::GetType(void) const
  200. {
  201.     if (m_Type == eDbtagType_bad) {
  202.         if ( !CanGetDb() ) {
  203.             return m_Type;
  204.         }
  205.         const string& db = GetDb();
  206.         TDbxrefTypeMap::const_iterator iter =
  207.             sc_ApprovedDb.find(db.c_str());
  208.         if ( iter != sc_ApprovedDb.end() ) {
  209.             m_Type = iter->second;
  210.         } else {
  211.             iter = sc_ApprovedRefSeqDb.find(db.c_str());
  212.             if ( iter != sc_ApprovedRefSeqDb.end() ) {
  213.                 m_Type = iter->second;
  214.             }
  215.         }
  216.     }
  217.     return m_Type;
  218. }
  219. // Force a refresh of the internal type
  220. void CDbtag::InvalidateType(void)
  221. {
  222.     m_Type = eDbtagType_bad;
  223. }
  224. END_objects_SCOPE // namespace ncbi::objects::
  225. END_NCBI_SCOPE
  226. /*
  227.  * ===========================================================================
  228.  * $Log: Dbtag.cpp,v $
  229.  * Revision 1000.2  2004/06/01 19:32:21  gouriano
  230.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.16
  231.  *
  232.  * Revision 6.16  2004/05/28 20:09:44  johnson
  233.  * Added Compare for seq-id type General (CDbtag)
  234.  *
  235.  * Revision 6.15  2004/05/19 17:21:39  gorelenk
  236.  * Added include of PCH - ncbi_pch.hpp
  237.  *
  238.  * Revision 6.14  2004/04/23 16:56:00  shomrat
  239.  * + IsApprovedNoCase
  240.  *
  241.  * Revision 6.13  2004/01/29 20:35:22  vasilche
  242.  * Use CStaticArrayMap<>.
  243.  *
  244.  * Revision 6.12  2004/01/20 20:28:59  ucko
  245.  * Fix calculation of kApprovedDbXrefs_size.
  246.  *
  247.  * Revision 6.11  2004/01/20 16:04:36  dicuccio
  248.  * Implemented enumerated type interpretation of string-based database name
  249.  *
  250.  * Revision 6.10  2004/01/06 14:36:06  dicuccio
  251.  * Removed unnecessary #include of ncbiapp.hpp and ncbireg.hpp.  Added <set>
  252.  * where needed.
  253.  *
  254.  * Revision 6.9  2003/10/01 13:12:24  shomrat
  255.  * REBASE is legal refseq dbxref
  256.  *
  257.  * Revision 6.8  2003/09/17 15:22:57  vasilche
  258.  * Removed unnecessary array of strings and related memory leak.
  259.  *
  260.  * Revision 6.7  2003/07/22 16:34:39  shomrat
  261.  * Added ZFIN to approved DB list
  262.  *
  263.  * Revision 6.6  2003/06/27 16:22:25  shomrat
  264.  * Changed initialization of kApprovedDbXrefs
  265.  *
  266.  * Revision 6.5  2003/06/27 15:40:09  shomrat
  267.  * Implemented IsApproved
  268.  *
  269.  * Revision 6.4  2002/01/10 19:45:57  clausen
  270.  * Added GetLabel
  271.  *
  272.  * Revision 6.3  2001/12/07 18:52:04  grichenk
  273.  * Updated "#include"-s and forward declarations to work with the
  274.  * new datatool version.
  275.  *
  276.  * Revision 6.2  2000/12/15 19:22:10  ostell
  277.  * made AsString do Upcase, and switched to using PNocase().Equals()
  278.  *
  279.  * Revision 6.1  2000/11/21 18:58:20  vasilche
  280.  * Added Match() methods for CSeq_id, CObject_id and CDbtag.
  281.  *
  282.  *
  283.  * ===========================================================================
  284.  */