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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: annot_ci.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:26:54  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.27
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ANNOT_CI__HPP
  10. #define ANNOT_CI__HPP
  11. /*  $Id: annot_ci.hpp,v 1000.1 2004/04/12 17:26:54 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, Michael Kimelman, Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   Object manager iterators
  40. *
  41. */
  42. #include <objmgr/annot_types_ci.hpp>
  43. #include <objmgr/seq_annot_ci.hpp>
  44. #include <corelib/ncbistd.hpp>
  45. BEGIN_NCBI_SCOPE
  46. BEGIN_SCOPE(objects)
  47. class NCBI_XOBJMGR_EXPORT CAnnot_CI : public CAnnotTypes_CI
  48. {
  49. public:
  50.     CAnnot_CI(void);
  51.     CAnnot_CI(CScope& scope, const CSeq_loc& loc,
  52.               const SAnnotSelector& sel);
  53.     CAnnot_CI(const CBioseq_Handle& bioseq, TSeqPos start, TSeqPos stop,
  54.               const SAnnotSelector& sel);
  55.     // Search all TSEs in all datasources
  56.     CAnnot_CI(CScope& scope, const CSeq_loc& loc,
  57.               SAnnotSelector::EOverlapType overlap_type
  58.               = SAnnotSelector::eOverlap_Intervals,
  59.               SAnnotSelector::EResolveMethod resolve
  60.               = SAnnotSelector::eResolve_TSE);
  61.     // Search only in TSE, containing the bioseq
  62.     CAnnot_CI(const CBioseq_Handle& bioseq, TSeqPos start, TSeqPos stop,
  63.               SAnnotSelector::EOverlapType overlap_type
  64.               = SAnnotSelector::eOverlap_Intervals,
  65.               SAnnotSelector::EResolveMethod resolve
  66.               = SAnnotSelector::eResolve_TSE);
  67.     // Iterate all features from the object regardless of their location
  68.     CAnnot_CI(const CAnnot_CI& iter);
  69.     virtual ~CAnnot_CI(void);
  70.     CAnnot_CI& operator= (const CAnnot_CI& iter);
  71.     CAnnot_CI& operator++ (void);
  72.     CAnnot_CI& operator-- (void);
  73.     operator bool (void) const;
  74.     CSeq_annot_Handle& operator*(void) const;
  75.     CSeq_annot_Handle* operator->(void) const;
  76. private:
  77.     void x_Collect(void);
  78.     CAnnot_CI operator++ (int);
  79.     CAnnot_CI operator-- (int);
  80.     typedef set<CSeq_annot_Handle> TSeqAnnotSet;
  81.     typedef TSeqAnnotSet::iterator TIterator;
  82.     mutable TSeqAnnotSet m_SeqAnnotSet;
  83.     TIterator m_Iterator;
  84.     mutable CSeq_annot_Handle m_Value;
  85. };
  86. inline
  87. CAnnot_CI& CAnnot_CI::operator++ (void)
  88. {
  89.     _ASSERT(m_Iterator != m_SeqAnnotSet.end());
  90.     ++m_Iterator;
  91.     return *this;
  92. }
  93. inline
  94. CAnnot_CI& CAnnot_CI::operator-- (void)
  95. {
  96.     _ASSERT(m_Iterator != m_SeqAnnotSet.begin());
  97.     --m_Iterator;
  98.     return *this;
  99. }
  100. inline
  101. CAnnot_CI::operator bool (void) const
  102. {
  103.     return m_Iterator != m_SeqAnnotSet.end();
  104. }
  105. inline
  106. CSeq_annot_Handle& CAnnot_CI::operator*(void) const
  107. {
  108.     _ASSERT(*this);
  109.     return m_Value = *m_Iterator;
  110. }
  111. inline
  112. CSeq_annot_Handle* CAnnot_CI::operator->(void) const
  113. {
  114.     _ASSERT(*this);
  115.     m_Value = *m_Iterator;
  116.     return &m_Value;
  117. }
  118. END_SCOPE(objects)
  119. END_NCBI_SCOPE
  120. /*
  121. * ---------------------------------------------------------------------------
  122. * $Log: annot_ci.hpp,v $
  123. * Revision 1000.1  2004/04/12 17:26:54  gouriano
  124. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.27
  125. *
  126. * Revision 1.27  2004/04/05 15:56:13  grichenk
  127. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  128. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  129. * inherited from SAnnotSelector.
  130. *
  131. * Revision 1.26  2004/03/16 15:47:25  vasilche
  132. * Added CBioseq_set_Handle and set of EditHandles
  133. *
  134. * Revision 1.25  2004/02/04 18:05:31  grichenk
  135. * Added annotation filtering by set of types/subtypes.
  136. * Renamed *Choice to *Type in SAnnotSelector.
  137. *
  138. * Revision 1.24  2003/10/09 12:29:52  dicuccio
  139. * Added missing 'public' in inheritance
  140. *
  141. * Revision 1.23  2003/09/11 17:45:06  grichenk
  142. * Added adaptive-depth option to annot-iterators.
  143. *
  144. * Revision 1.22  2003/08/27 21:08:03  grichenk
  145. * CAnnotTypes_CI made private
  146. *
  147. * Revision 1.21  2003/08/22 15:00:47  grichenk
  148. * Redesigned CAnnot_CI to iterate over seq-annots, containing
  149. * given location.
  150. *
  151. * Revision 1.20  2003/08/15 15:21:58  grichenk
  152. * Initial revision
  153. *
  154. *
  155. * ===========================================================================
  156. */
  157. #endif  // ANNOT_CI__HPP