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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: id_range.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/12 17:33:49  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef NCBI_OBJMGR_SPLIT_ID_RANGE__HPP
  10. #define NCBI_OBJMGR_SPLIT_ID_RANGE__HPP
  11. /*  $Id: id_range.hpp,v 1000.0 2004/04/12 17:33:49 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:  Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *   Utility class for collecting ranges of sequences
  40. *
  41. * ===========================================================================
  42. */
  43. #include <corelib/ncbistd.hpp>
  44. #include <objmgr/seq_id_handle.hpp>
  45. #include <util/range.hpp>
  46. #include <map>
  47. BEGIN_NCBI_SCOPE
  48. class CObjectOStream;
  49. BEGIN_SCOPE(objects)
  50. class CSeq_feat;
  51. class CSeq_align;
  52. class CSeq_graph;
  53. class CSeq_loc;
  54. class CSeq_id;
  55. class CSeq_point;
  56. class CSeq_interval;
  57. class CPacked_seqpnt;
  58. class CDense_seg;
  59. class CDense_diag;
  60. class CPacked_seg;
  61. class COneSeqRange
  62. {
  63. public:
  64.     typedef CRange<TSeqPos> TRange;
  65.     COneSeqRange(void)
  66.         : m_TotalRange(TRange::GetEmpty())
  67.         {
  68.         }
  69.     TRange GetTotalRange(void) const
  70.         {
  71.             return m_TotalRange;
  72.         }
  73.     void Add(const COneSeqRange& range);
  74.     void Add(const TRange& range);
  75.     void Add(TSeqPos start, TSeqPos stop_exclusive);
  76. private:
  77.     TRange m_TotalRange;
  78. };
  79. class CSeqsRange
  80. {
  81. public:
  82.     CSeqsRange(void);
  83.     ~CSeqsRange(void);
  84.     CNcbiOstream& Print(CNcbiOstream& out) const;
  85.     typedef COneSeqRange::TRange TRange;
  86.     typedef map<CSeq_id_Handle, COneSeqRange> TRanges;
  87.     typedef TRanges::const_iterator const_iterator;
  88.     const_iterator begin(void) const
  89.         {
  90.             return m_Ranges.begin();
  91.         }
  92.     const_iterator end(void) const
  93.         {
  94.             return m_Ranges.end();
  95.         }
  96.     size_t size(void) const
  97.         {
  98.             return m_Ranges.size();
  99.         }
  100.     bool empty(void) const
  101.         {
  102.             return m_Ranges.empty();
  103.         }
  104.     void clear(void)
  105.         {
  106.             m_Ranges.clear();
  107.         }
  108.     CSeq_id_Handle GetSingleId(void) const;
  109.     void Add(const CSeq_id_Handle& id, const COneSeqRange& loc);
  110.     void Add(const CSeqsRange& seqs_range);
  111.     void Add(const CSeq_loc& loc);
  112.     void Add(const CSeq_id& id);
  113.     void Add(const CSeq_point& p);
  114.     void Add(const CSeq_interval& i);
  115.     void Add(const CPacked_seqpnt& pp);
  116.     void Add(const CSeq_feat& obj);
  117.     void Add(const CSeq_align& obj);
  118.     void Add(const CSeq_graph& obj);
  119.     void Add(const CDense_seg& denseg);
  120.     void Add(const CDense_diag& diag);
  121.     void Add(const CPacked_seg& packed);
  122. private:
  123.     TRanges m_Ranges;
  124. };
  125. inline
  126. CNcbiOstream& operator<<(CNcbiOstream& out, const CSeqsRange& info)
  127. {
  128.     return info.Print(out);
  129. }
  130. END_SCOPE(objects)
  131. END_NCBI_SCOPE
  132. /*
  133. * ---------------------------------------------------------------------------
  134. * $Log: id_range.hpp,v $
  135. * Revision 1000.0  2004/04/12 17:33:49  gouriano
  136. * PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.3
  137. *
  138. * Revision 1.3  2003/12/01 18:37:10  vasilche
  139. * Separate different annotation types in split info to reduce memory usage.
  140. *
  141. * Revision 1.2  2003/11/26 23:04:59  vasilche
  142. * Removed extra semicolons after BEGIN_SCOPE and END_SCOPE.
  143. *
  144. * Revision 1.1  2003/11/12 16:18:30  vasilche
  145. * First implementation of ID2 blob splitter withing cache.
  146. *
  147. * ===========================================================================
  148. */
  149. #endif//NCBI_OBJMGR_SPLIT_ID_RANGE__HPP