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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seqdb.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:46:29  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: seqdb.cpp,v 1000.1 2004/06/01 19:46:29 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:  Kevin Bealer
  35.  *
  36.  */
  37. /// CSeqDB class
  38. /// 
  39. /// This class defines access to the database component by calling
  40. /// methods on objects which represent the various database files,
  41. /// such as the index file, the header file, and the sequence file.
  42. #include <ncbi_pch.hpp>
  43. #include <objtools/readers/seqdb/seqdb.hpp>
  44. #include "seqdbimpl.hpp"
  45. BEGIN_NCBI_SCOPE
  46. CSeqDB::CSeqDB(const string & dbname, char prot_nucl)
  47. {
  48.     m_Impl = new CSeqDBImpl(dbname, prot_nucl, 0, 0, true);
  49. }
  50. CSeqDB::CSeqDB(const string & dbname,
  51.                char           prot_nucl,
  52.                Uint4          oid_begin,
  53.                Uint4          oid_end,
  54.                bool           use_mmap)
  55. {
  56.     m_Impl = new CSeqDBImpl(dbname, prot_nucl, oid_begin, oid_end, use_mmap);
  57. }
  58. Uint4 CSeqDB::GetSeqLength(Uint4 oid) const
  59. {
  60.     return m_Impl->GetSeqLength(oid);
  61. }
  62. Uint4 CSeqDB::GetSeqLengthApprox(Uint4 oid) const
  63. {
  64.     return m_Impl->GetSeqLengthApprox(oid);
  65. }
  66. CRef<CBlast_def_line_set> CSeqDB::GetHdr(Uint4 oid) const
  67. {
  68.     return m_Impl->GetHdr(oid);
  69. }
  70. char CSeqDB::GetSeqType(void) const
  71. {
  72.     return m_Impl->GetSeqType();
  73. }
  74. CRef<CBioseq>
  75. CSeqDB::GetBioseq(TOID oid,
  76.                   bool use_objmgr,
  77.                   bool insert_ctrlA) const
  78. {
  79.     return m_Impl->GetBioseq(oid, use_objmgr, insert_ctrlA);
  80. }
  81. void CSeqDB::RetSequence(const char ** buffer) const
  82. {
  83.     m_Impl->RetSequence(buffer);
  84. }
  85. Uint4 CSeqDB::GetSequence(TOID oid, const char ** buffer) const
  86. {
  87.     return m_Impl->GetSequence(oid, buffer);
  88. }
  89. Uint4 CSeqDB::GetAmbigSeq(TOID oid, const char ** buffer, Uint4 nucl_code) const
  90. {
  91.     return m_Impl->GetAmbigSeq(oid, (char **)buffer, nucl_code, (ESeqDBAllocType) 0);
  92. }
  93. Uint4 CSeqDB::GetAmbigSeqAlloc(TOID            oid,
  94.                               char         ** buffer,
  95.                               Uint4           nucl_code,
  96.                               ESeqDBAllocType strategy) const
  97. {
  98.     if ((strategy != eMalloc) && (strategy != eNew)) {
  99.         NCBI_THROW(CSeqDBException,
  100.                    eArgErr,
  101.                    "Invalid allocation strategy specified.");
  102.     }
  103.     
  104.     return m_Impl->GetAmbigSeq(oid, buffer, nucl_code, strategy);
  105. }
  106. string CSeqDB::GetTitle(void) const
  107. {
  108.     return m_Impl->GetTitle();
  109. }
  110. string CSeqDB::GetDate(void) const
  111. {
  112.     return m_Impl->GetDate();
  113. }
  114. Uint4 CSeqDB::GetNumSeqs(void) const
  115. {
  116.     return m_Impl->GetNumSeqs();
  117. }
  118. Uint8  CSeqDB::GetTotalLength(void) const
  119. {
  120.     return m_Impl->GetTotalLength();
  121. }
  122. Uint4  CSeqDB::GetMaxLength(void) const
  123. {
  124.     return m_Impl->GetMaxLength();
  125. }
  126. CSeqDB::~CSeqDB()
  127. {
  128.     if (m_Impl)
  129.         delete m_Impl;
  130. }
  131. CSeqDBIter CSeqDB::Begin(void) const
  132. {
  133.     return CSeqDBIter(this, 0);
  134. }
  135. bool CSeqDB::CheckOrFindOID(TOID & oid) const
  136. {
  137.     return m_Impl->CheckOrFindOID(oid);
  138. }
  139. const string & CSeqDB::GetDBNameList(void) const
  140. {
  141.     return m_Impl->GetDBNameList();
  142. }
  143. list< CRef<CSeq_id> > CSeqDB::GetSeqIDs(TOID oid) const
  144. {
  145.     return m_Impl->GetSeqIDs(oid);
  146. }
  147. CSeqDBIter::CSeqDBIter(const CSeqDB * db, TOID oid)
  148.     : m_DB    (db),
  149.       m_OID   (oid),
  150.       m_Data  (0),
  151.       m_Length((TOID) -1)
  152. {
  153.     if (m_DB->CheckOrFindOID(m_OID)) {
  154.         x_GetSeq();
  155.     }
  156. }
  157. CSeqDBIter & CSeqDBIter::operator++(void)
  158. {
  159.     x_RetSeq();
  160.     
  161.     ++m_OID;
  162.     
  163.     if (m_DB->CheckOrFindOID(m_OID)) {
  164.         x_GetSeq();
  165.     } else {
  166.         m_Length = (Uint4)-1;
  167.     }
  168.     
  169.     return *this;
  170. }
  171. END_NCBI_SCOPE