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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seq_descr_ci.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:23:53  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: seq_descr_ci.cpp,v 1000.1 2004/06/01 19:23:53 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: Aleksey Grichenko
  35. *
  36. * File Description:
  37. *   Object manager iterators
  38. *
  39. */
  40. #include <ncbi_pch.hpp>
  41. #include <objmgr/seq_descr_ci.hpp>
  42. #include <objmgr/bioseq_handle.hpp>
  43. BEGIN_NCBI_SCOPE
  44. BEGIN_SCOPE(objects)
  45. CSeq_descr_CI::CSeq_descr_CI(void)
  46. {
  47.     return;
  48. }
  49. CSeq_descr_CI::CSeq_descr_CI(const CBioseq_Handle& handle,
  50.                              size_t search_depth)
  51.     : m_NextEntry(handle.GetParentEntry()),
  52.       m_MaxCount(search_depth)
  53. {
  54.     x_Next(); // Skip entries without descriptions
  55. }
  56. CSeq_descr_CI::CSeq_descr_CI(const CSeq_entry_Handle& entry,
  57.                              size_t search_depth)
  58.     : m_NextEntry(entry),
  59.       m_MaxCount(search_depth)
  60. {
  61.     x_Next(); // Skip entries without descriptions
  62. }
  63.     
  64. CSeq_descr_CI::CSeq_descr_CI(const CSeq_descr_CI& iter)
  65.     : m_NextEntry(iter.m_NextEntry),
  66.       m_CurrentEntry(iter.m_CurrentEntry),
  67.       m_MaxCount(iter.m_MaxCount)
  68. {
  69.     return;
  70. }
  71. CSeq_descr_CI::~CSeq_descr_CI(void)
  72. {
  73.     return;
  74. }
  75. CSeq_descr_CI& CSeq_descr_CI::operator= (const CSeq_descr_CI& iter)
  76. {
  77.     if (this != &iter) {
  78.         m_NextEntry = iter.m_NextEntry;
  79.         m_CurrentEntry = iter.m_CurrentEntry;
  80.         m_MaxCount = iter.m_MaxCount;
  81.     }
  82.     return *this;
  83. }
  84. void CSeq_descr_CI::x_Next(void)
  85. {
  86.     if ( !m_NextEntry ) {
  87.         m_CurrentEntry = CSeq_entry_Handle();
  88.         return;
  89.     }
  90.     // Find an entry with seq-descr member set
  91.     while (m_NextEntry  &&  !m_NextEntry.IsSetDescr()) {
  92.         m_NextEntry = m_NextEntry.GetParentEntry();
  93.     }
  94.     if ( m_NextEntry ) {
  95.         m_CurrentEntry = m_NextEntry;
  96.         m_NextEntry = m_NextEntry.GetParentEntry();
  97.         if (m_MaxCount) {
  98.             --m_MaxCount;
  99.             if ( !m_MaxCount ) {
  100.                 m_NextEntry = CSeq_entry_Handle();
  101.             }
  102.         }
  103.     }
  104.     else {
  105.         m_CurrentEntry = CSeq_entry_Handle();
  106.     }
  107. }
  108. CSeq_descr_CI& CSeq_descr_CI::operator++(void)
  109. {
  110.     x_Next();
  111.     return *this;
  112. }
  113. CSeq_descr_CI::operator bool (void) const
  114. {
  115.     return m_CurrentEntry  &&  m_CurrentEntry.IsSetDescr();
  116. }
  117. const CSeq_descr& CSeq_descr_CI::operator* (void) const
  118. {
  119.     _ASSERT(m_CurrentEntry  &&  m_CurrentEntry.IsSetDescr());
  120.     return m_CurrentEntry.GetDescr();
  121. }
  122. const CSeq_descr* CSeq_descr_CI::operator-> (void) const
  123. {
  124.     _ASSERT(m_CurrentEntry  &&  m_CurrentEntry.IsSetDescr());
  125.     return &m_CurrentEntry.GetDescr();
  126. }
  127. CSeq_entry_Handle CSeq_descr_CI::GetSeq_entry_Handle(void) const
  128. {
  129.     return m_CurrentEntry;
  130. }
  131. END_SCOPE(objects)
  132. END_NCBI_SCOPE
  133. /*
  134. * ---------------------------------------------------------------------------
  135. * $Log: seq_descr_ci.cpp,v $
  136. * Revision 1000.1  2004/06/01 19:23:53  gouriano
  137. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13
  138. *
  139. * Revision 1.13  2004/05/21 21:42:13  gorelenk
  140. * Added PCH ncbi_pch.hpp
  141. *
  142. * Revision 1.12  2004/03/16 15:47:28  vasilche
  143. * Added CBioseq_set_Handle and set of EditHandles
  144. *
  145. * Revision 1.11  2004/02/09 19:18:54  grichenk
  146. * Renamed CDesc_CI to CSeq_descr_CI. Redesigned CSeq_descr_CI
  147. * and CSeqdesc_CI to avoid using data directly.
  148. *
  149. * Revision 1.10  2003/06/02 16:06:37  dicuccio
  150. * Rearranged src/objects/ subtree.  This includes the following shifts:
  151. *     - src/objects/asn2asn --> arc/app/asn2asn
  152. *     - src/objects/testmedline --> src/objects/ncbimime/test
  153. *     - src/objects/objmgr --> src/objmgr
  154. *     - src/objects/util --> src/objmgr/util
  155. *     - src/objects/alnmgr --> src/objtools/alnmgr
  156. *     - src/objects/flat --> src/objtools/flat
  157. *     - src/objects/validator --> src/objtools/validator
  158. *     - src/objects/cddalignview --> src/objtools/cddalignview
  159. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  160. * replaces the three libmmdb? libs.
  161. *
  162. * Revision 1.9  2003/04/24 16:12:38  vasilche
  163. * Object manager internal structures are splitted more straightforward.
  164. * Removed excessive header dependencies.
  165. *
  166. * Revision 1.8  2003/03/14 19:10:41  grichenk
  167. * + SAnnotSelector::EIdResolving; fixed operator=() for several classes
  168. *
  169. * Revision 1.7  2003/03/13 13:02:36  dicuccio
  170. * Added #include for annot_object.hpp - fixes obtuse error for Win32 builds
  171. *
  172. * Revision 1.6  2002/07/08 20:51:01  grichenk
  173. * Moved log to the end of file
  174. * Replaced static mutex (in CScope, CDataSource) with the mutex
  175. * pool. Redesigned CDataSource data locking.
  176. *
  177. * Revision 1.5  2002/05/06 03:28:47  vakatov
  178. * OM/OM1 renaming
  179. *
  180. * Revision 1.4  2002/02/21 19:27:05  grichenk
  181. * Rearranged includes. Added scope history. Added searching for the
  182. * best seq-id match in data sources and scopes. Updated tests.
  183. *
  184. * Revision 1.3  2002/01/23 21:59:31  grichenk
  185. * Redesigned seq-id handles and mapper
  186. *
  187. * Revision 1.2  2002/01/16 16:25:57  gouriano
  188. * restructured objmgr
  189. *
  190. * Revision 1.1  2002/01/11 19:06:18  gouriano
  191. * restructured objmgr
  192. *
  193. *
  194. * ===========================================================================
  195. */