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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: handle_range.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:24:43  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.18
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_OBJMGR_IMPL___HANDLE_RANGE__HPP
  10. #define OBJECTS_OBJMGR_IMPL___HANDLE_RANGE__HPP
  11. /*  $Id: handle_range.hpp,v 1000.0 2003/10/29 20:24:43 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.  *
  40.  */
  41. #include <objects/seqloc/Na_strand.hpp>
  42. #include <util/range.hpp>
  43. #include <vector>
  44. #include <utility>
  45. BEGIN_NCBI_SCOPE
  46. BEGIN_SCOPE(objects)
  47. // Locations list for a particular bioseq handle
  48. class NCBI_XOBJMGR_EXPORT CHandleRange
  49. {
  50. public:
  51.     typedef CRange<TSeqPos> TRange;
  52.     typedef COpenRange<TSeqPos> TOpenRange;
  53.     typedef pair<TRange, ENa_strand> TRangeWithStrand;
  54.     typedef vector<TRangeWithStrand> TRanges;
  55.     typedef TRanges::const_iterator const_iterator;
  56.     CHandleRange(void);
  57.     CHandleRange(const CHandleRange& hr);
  58.     ~CHandleRange(void);
  59.     CHandleRange& operator=(const CHandleRange& hr);
  60.     bool Empty(void) const;
  61.     const_iterator begin(void) const;
  62.     const_iterator end(void) const;
  63.     // Add a new range
  64.     void AddRange(TRange range, ENa_strand strand/* = eNa_strand_unknown*/);
  65.     // Merge a new range with the existing ranges
  66.     void MergeRange(TRange range, ENa_strand strand);
  67.     void AddRanges(const CHandleRange& hr);
  68.     // return true if there is a gap between some intervals
  69.     bool HasGaps(void) const;
  70.     // Get the range including all ranges in the list (with any strand)
  71.     TRange GetOverlappingRange(void) const;
  72.     
  73.     // Get the range including all ranges in the list which (with any strand)
  74.     // filter the list through 'range' argument
  75.     TRange GetOverlappingRange(const TRange& range) const;
  76.     // Check if the two sets of ranges do intersect
  77.     bool IntersectingWith(const CHandleRange& hr) const;
  78.     // Check if the two sets of ranges do intersect
  79.     bool IntersectingWith(const TRange& range,
  80.                           ENa_strand strand = eNa_strand_unknown) const;
  81. private:
  82.     static bool x_IntersectingStrands(ENa_strand str1, ENa_strand str2);
  83.     TRanges        m_Ranges;
  84.     // friend class CDataSource;
  85.     friend class CHandleRangeMap;
  86. };
  87. inline
  88. bool CHandleRange::Empty(void) const
  89. {
  90.     return m_Ranges.empty();
  91. }
  92. inline
  93. CHandleRange::const_iterator CHandleRange::begin(void) const
  94. {
  95.     return m_Ranges.begin();
  96. }
  97. inline
  98. CHandleRange::const_iterator CHandleRange::end(void) const
  99. {
  100.     return m_Ranges.end();
  101. }
  102. END_SCOPE(objects)
  103. END_NCBI_SCOPE
  104. /*
  105.  * ---------------------------------------------------------------------------
  106.  * $Log: handle_range.hpp,v $
  107.  * Revision 1000.0  2003/10/29 20:24:43  gouriano
  108.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.18
  109.  *
  110.  * Revision 1.18  2003/07/17 20:07:55  vasilche
  111.  * Reduced memory usage by feature indexes.
  112.  * SNP data is loaded separately through PUBSEQ_OS.
  113.  * String compression for SNP data.
  114.  *
  115.  * Revision 1.17  2003/04/24 16:12:37  vasilche
  116.  * Object manager internal structures are splitted more straightforward.
  117.  * Removed excessive header dependencies.
  118.  *
  119.  * Revision 1.16  2003/02/25 14:48:07  vasilche
  120.  * Added Win32 export modifier to object manager classes.
  121.  *
  122.  * Revision 1.15  2003/02/05 17:57:41  dicuccio
  123.  * Moved into include/objects/objmgr/impl to permit data loaders to be defined
  124.  * outside of xobjmgr.
  125.  *
  126.  * Revision 1.14  2003/02/04 21:45:43  grichenk
  127.  * Removed CDataSource from friends
  128.  *
  129.  * Revision 1.13  2003/01/22 20:11:54  vasilche
  130.  * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  131.  * CSeqMap_CI now supports resolution and iteration over sequence range.
  132.  * Added several caches to CScope.
  133.  * Optimized CSeqVector().
  134.  * Added serveral variants of CBioseqHandle::GetSeqVector().
  135.  * Tried to optimize annotations iterator (not much success).
  136.  * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  137.  *
  138.  * Revision 1.12  2002/08/07 17:51:54  grichenk
  139.  * Removed debug message
  140.  *
  141.  * Revision 1.11  2002/07/31 16:52:36  grichenk
  142.  * Fixed bug in IntersectingWith()
  143.  *
  144.  * Revision 1.10  2002/07/08 20:51:01  grichenk
  145.  * Moved log to the end of file
  146.  * Replaced static mutex (in CScope, CDataSource) with the mutex
  147.  * pool. Redesigned CDataSource data locking.
  148.  *
  149.  * Revision 1.9  2002/06/12 14:40:47  grichenk
  150.  * Made some methods inline
  151.  *
  152.  * Revision 1.8  2002/05/06 03:28:47  vakatov
  153.  * OM/OM1 renaming
  154.  *
  155.  * Revision 1.7  2002/05/03 21:28:10  ucko
  156.  * Introduce T(Signed)SeqPos.
  157.  *
  158.  * Revision 1.6  2002/04/22 20:05:35  grichenk
  159.  * +MergeRange()
  160.  *
  161.  * Revision 1.5  2002/02/21 19:27:05  grichenk
  162.  * Rearranged includes. Added scope history. Added searching for the
  163.  * best seq-id match in data sources and scopes. Updated tests.
  164.  *
  165.  * Revision 1.4  2002/02/15 20:35:38  gouriano
  166.  * changed implementation of HandleRangeMap
  167.  *
  168.  * Revision 1.3  2002/01/23 21:59:31  grichenk
  169.  * Redesigned seq-id handles and mapper
  170.  *
  171.  * Revision 1.2  2002/01/16 16:25:58  gouriano
  172.  * restructured objmgr
  173.  *
  174.  * Revision 1.1  2002/01/11 19:06:20  gouriano
  175.  * restructured objmgr
  176.  *
  177.  *
  178.  * ===========================================================================
  179.  */
  180. #endif  // OBJECTS_OBJMGR_IMPL___HANDLE_RANGE__HPP