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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bioseq_ci.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:27:03  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef BIOSEQ_CI__HPP
  10. #define BIOSEQ_CI__HPP
  11. /*  $Id: bioseq_ci.hpp,v 1000.1 2004/04/12 17:27:03 gouriano Exp $
  12. * ===========================================================================
  13. *
  14. *                            PUBLIC DOMAIN NOTICE
  15. *               National Center for Biotechnology Information
  16. *
  17. *  This software/database is a "United States Government Work" under the
  18. *  terms of the United States Copyright Act.  It was written as part of
  19. *  the author's official duties as a United States Government employee and
  20. *  thus cannot be copyrighted.  This software/database is freely available
  21. *  to the public for use. The National Library of Medicine and the U.S.
  22. *  Government have not placed any restriction on its use or reproduction.
  23. *
  24. *  Although all reasonable efforts have been taken to ensure the accuracy
  25. *  and reliability of the software and data, the NLM and the U.S.
  26. *  Government do not and cannot warrant the performance or results that
  27. *  may be obtained by using this software or data. The NLM and the U.S.
  28. *  Government disclaim all warranties, express or implied, including
  29. *  warranties of performance, merchantability or fitness for any particular
  30. *  purpose.
  31. *
  32. *  Please cite the author in any work or product based on this material.
  33. *
  34. * ===========================================================================
  35. *
  36. * Author: Aleksey Grichenko
  37. *
  38. * File Description:
  39. *   Iterates over bioseqs from a given seq-entry and scope
  40. *
  41. */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <objmgr/bioseq_handle.hpp>
  44. #include <objmgr/impl/heap_scope.hpp>
  45. #include <objects/seq/Seq_inst.hpp>
  46. BEGIN_NCBI_SCOPE
  47. BEGIN_SCOPE(objects)
  48. class CScope;
  49. class CBioseq_Handle;
  50. class CSeq_entry;
  51. class CSeq_entry_Handle;
  52. // Base class for CBioseq_CI to make enums visible in CScope
  53. class CBioseq_CI_Base {
  54. public:
  55.     enum EBioseqLevelFlag {
  56.         eLevel_All,
  57.         eLevel_Mains,
  58.         eLevel_Parts
  59.     };
  60. };
  61. class NCBI_XOBJMGR_EXPORT CBioseq_CI : public CBioseq_CI_Base
  62. {
  63. public:
  64.     // 'ctors
  65.     CBioseq_CI(void);
  66.     // Iterate over bioseqs from the entry taken from the scope. Use optional
  67.     // filter to iterate over selected bioseq types only.
  68.     CBioseq_CI(const CSeq_entry_Handle& entry,
  69.                CSeq_inst::EMol filter = CSeq_inst::eMol_not_set,
  70.                EBioseqLevelFlag level = eLevel_All);
  71.     CBioseq_CI(CScope& scope, const CSeq_entry& entry,
  72.                CSeq_inst::EMol filter = CSeq_inst::eMol_not_set,
  73.                EBioseqLevelFlag level = eLevel_All);
  74.     CBioseq_CI(const CBioseq_CI& bioseq_ci);
  75.     ~CBioseq_CI(void);
  76.     CScope& GetScope(void) const;
  77.     CBioseq_CI& operator= (const CBioseq_CI& bioseq_ci);
  78.     CBioseq_CI& operator++ (void);
  79.     operator bool (void) const;
  80.     const CBioseq_Handle& operator* (void) const;
  81.     const CBioseq_Handle* operator-> (void) const;
  82. private:
  83.     typedef vector<CBioseq_Handle>            TBioseq_HandleSet;
  84.     typedef TBioseq_HandleSet::const_iterator THandleIterator;
  85.     CHeapScope           m_Scope;
  86.     TBioseq_HandleSet    m_Handles;
  87.     THandleIterator      m_Current;
  88. };
  89. inline
  90. CBioseq_CI& CBioseq_CI::operator++ (void)
  91. {
  92.     if ( m_Current != m_Handles.end() ) {
  93.         m_Current++;
  94.     }
  95.     return *this;
  96. }
  97. inline
  98. CBioseq_CI::operator bool (void) const
  99. {
  100.     return m_Current != m_Handles.end();
  101. }
  102. inline
  103. const CBioseq_Handle& CBioseq_CI::operator* (void) const
  104. {
  105.     return *m_Current;
  106. }
  107. inline
  108. const CBioseq_Handle* CBioseq_CI::operator-> (void) const
  109. {
  110.     return &(*m_Current);
  111. }
  112. inline
  113. CScope& CBioseq_CI::GetScope(void) const
  114. {
  115.     return m_Scope;
  116. }
  117. END_SCOPE(objects)
  118. END_NCBI_SCOPE
  119. /*
  120. * ---------------------------------------------------------------------------
  121. * $Log: bioseq_ci.hpp,v $
  122. * Revision 1000.1  2004/04/12 17:27:03  gouriano
  123. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.15
  124. *
  125. * Revision 1.15  2004/03/16 15:47:25  vasilche
  126. * Added CBioseq_set_Handle and set of EditHandles
  127. *
  128. * Revision 1.14  2004/02/19 17:15:02  vasilche
  129. * Removed unused include.
  130. *
  131. * Revision 1.13  2003/10/01 19:24:36  vasilche
  132. * Added export specifier to CBioseq_CI as it's not completely inlined anymore.
  133. *
  134. * Revision 1.12  2003/09/30 16:21:59  vasilche
  135. * Updated internal object manager classes to be able to load ID2 data.
  136. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  137. * Scope caches results of requests for data to data loaders.
  138. * Optimized CSeq_id_Handle for gis.
  139. * Optimized bioseq lookup in scope.
  140. * Reduced object allocations in annotation iterators.
  141. * CScope is allowed to be destroyed before other objects using this scope are
  142. * deleted (feature iterators, bioseq handles etc).
  143. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  144. * Added 'adaptive' option to objmgr_demo application.
  145. *
  146. * Revision 1.11  2003/09/16 14:38:13  dicuccio
  147. * Removed export specifier - the entire class is inlined, and the export
  148. * specifier confuses MSVC in such cases.  Added #include for scope.hpp, which
  149. * contains the base class (previously undefined without this).
  150. *
  151. * Revision 1.10  2003/09/03 19:59:59  grichenk
  152. * Added sequence filtering by level (mains/parts/all)
  153. *
  154. * Revision 1.9  2003/06/02 16:01:36  dicuccio
  155. * Rearranged include/objects/ subtree.  This includes the following shifts:
  156. *     - include/objects/alnmgr --> include/objtools/alnmgr
  157. *     - include/objects/cddalignview --> include/objtools/cddalignview
  158. *     - include/objects/flat --> include/objtools/flat
  159. *     - include/objects/objmgr/ --> include/objmgr/
  160. *     - include/objects/util/ --> include/objmgr/util/
  161. *     - include/objects/validator --> include/objtools/validator
  162. *
  163. * Revision 1.8  2003/03/10 17:51:36  kuznets
  164. * iterate->ITERATE
  165. *
  166. * Revision 1.7  2003/02/25 14:48:06  vasilche
  167. * Added Win32 export modifier to object manager classes.
  168. *
  169. * Revision 1.6  2003/02/04 16:01:48  dicuccio
  170. * Removed export specification so that MSVC won't try to export an inlined class
  171. *
  172. * Revision 1.5  2002/12/26 20:42:55  dicuccio
  173. * Added Win32 export specifier.  Removed unimplemented (private) operator++(int)
  174. *
  175. * Revision 1.4  2002/12/05 19:28:29  grichenk
  176. * Prohibited postfix operator ++()
  177. *
  178. * Revision 1.3  2002/10/15 13:37:28  grichenk
  179. * Fixed inline declarations
  180. *
  181. * Revision 1.2  2002/10/02 17:58:21  grichenk
  182. * Added sequence type filter to CBioseq_CI
  183. *
  184. * Revision 1.1  2002/09/30 20:00:48  grichenk
  185. * Initial revision
  186. *
  187. *
  188. * ===========================================================================
  189. */
  190. #endif  // BIOSEQ_CI__HPP