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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: handle_range_map.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:24:49  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_OBJMGR_IMPL___HANDLE_RANGE_MAP__HPP
  10. #define OBJECTS_OBJMGR_IMPL___HANDLE_RANGE_MAP__HPP
  11. /*  $Id: handle_range_map.hpp,v 1000.0 2003/10/29 20:24: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: Aleksey Grichenko, Michael Kimelman, Eugene Vasilchenko
  37.  *
  38.  * File Description:
  39.  *
  40.  */
  41. #include <objmgr/impl/handle_range.hpp>
  42. #include <objmgr/seq_id_handle.hpp>
  43. #include <corelib/ncbiobj.hpp>
  44. #include <map>
  45. BEGIN_NCBI_SCOPE
  46. BEGIN_SCOPE(objects)
  47. class CSeq_loc;
  48. // Seq_loc substitution for internal use by iterators and data sources
  49. class NCBI_XOBJMGR_EXPORT CHandleRangeMap
  50. {
  51. public:
  52.     typedef map<CSeq_id_Handle, CHandleRange> TLocMap;
  53.     typedef TLocMap::const_iterator const_iterator;
  54.     CHandleRangeMap(void);
  55.     CHandleRangeMap(const CHandleRangeMap& rmap);
  56.     ~CHandleRangeMap(void);
  57.     CHandleRangeMap& operator= (const CHandleRangeMap& rmap);
  58.     // Add all ranges for each seq-id from a seq-loc
  59.     void AddLocation(const CSeq_loc& loc);
  60.     // Add range substituting with handle "h"
  61.     void AddRange(const CSeq_id_Handle& h,
  62.                   CHandleRange::TRange range, ENa_strand strand);
  63.     // Add ranges from "range" with handle "h"
  64.     void AddRanges(const CSeq_id_Handle& h, const CHandleRange& hr);
  65.     CHandleRange& AddRanges(const CSeq_id_Handle& h);
  66.     // Get the ranges map
  67.     const TLocMap& GetMap(void) const { return m_LocMap; }
  68.     bool empty(void) const { return m_LocMap.empty(); }
  69.     void clear(void);
  70.     // iterate
  71.     const_iterator begin(void) const { return m_LocMap.begin(); }
  72.     const_iterator end(void) const { return m_LocMap.end(); }
  73.     bool IntersectingWithLoc(const CSeq_loc& loc) const;
  74.     bool IntersectingWithMap(const CHandleRangeMap& rmap) const;
  75.     bool TotalRangeIntersectingWith(const CHandleRangeMap& rmap) const;
  76.     void AddRange(const CSeq_id& id, TSeqPos from, TSeqPos to,
  77.                   ENa_strand strand = eNa_strand_unknown);
  78.     void AddRange(const CSeq_id& id, CHandleRange::TRange range,
  79.                   ENa_strand strand = eNa_strand_unknown);
  80. private:
  81.     // Split the location and add range lists to the locmap
  82.     void x_ProcessLocation(const CSeq_loc& loc);
  83.     TLocMap m_LocMap;
  84. };
  85. inline
  86. void CHandleRangeMap::AddRange(const CSeq_id& id,
  87.                                TSeqPos from, TSeqPos to,
  88.                                ENa_strand strand)
  89. {
  90.     AddRange(id, CHandleRange::TRange(from, to), strand);
  91. }
  92. END_SCOPE(objects)
  93. END_NCBI_SCOPE
  94. /*
  95.  * ---------------------------------------------------------------------------
  96.  * $Log: handle_range_map.hpp,v $
  97.  * Revision 1000.0  2003/10/29 20:24:49  gouriano
  98.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.15
  99.  *
  100.  * Revision 1.15  2003/07/17 20:07:55  vasilche
  101.  * Reduced memory usage by feature indexes.
  102.  * SNP data is loaded separately through PUBSEQ_OS.
  103.  * String compression for SNP data.
  104.  *
  105.  * Revision 1.14  2003/06/02 16:01:37  dicuccio
  106.  * Rearranged include/objects/ subtree.  This includes the following shifts:
  107.  *     - include/objects/alnmgr --> include/objtools/alnmgr
  108.  *     - include/objects/cddalignview --> include/objtools/cddalignview
  109.  *     - include/objects/flat --> include/objtools/flat
  110.  *     - include/objects/objmgr/ --> include/objmgr/
  111.  *     - include/objects/util/ --> include/objmgr/util/
  112.  *     - include/objects/validator --> include/objtools/validator
  113.  *
  114.  * Revision 1.13  2003/04/24 16:12:37  vasilche
  115.  * Object manager internal structures are splitted more straightforward.
  116.  * Removed excessive header dependencies.
  117.  *
  118.  * Revision 1.12  2003/02/25 14:48:07  vasilche
  119.  * Added Win32 export modifier to object manager classes.
  120.  *
  121.  * Revision 1.11  2003/02/24 18:57:21  vasilche
  122.  * Make feature gathering in one linear pass using CSeqMap iterator.
  123.  * Do not use feture index by sub locations.
  124.  * Sort features at the end of gathering in one vector.
  125.  * Extracted some internal structures and classes in separate header.
  126.  * Delay creation of mapped features.
  127.  *
  128.  * Revision 1.10  2003/02/05 17:57:41  dicuccio
  129.  * Moved into include/objects/objmgr/impl to permit data loaders to be defined
  130.  * outside of xobjmgr.
  131.  *
  132.  * Revision 1.9  2003/01/29 22:03:46  grichenk
  133.  * Use single static CSeq_id_Mapper instead of per-OM model.
  134.  *
  135.  * Revision 1.8  2003/01/22 20:11:54  vasilche
  136.  * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  137.  * CSeqMap_CI now supports resolution and iteration over sequence range.
  138.  * Added several caches to CScope.
  139.  * Optimized CSeqVector().
  140.  * Added serveral variants of CBioseqHandle::GetSeqVector().
  141.  * Tried to optimize annotations iterator (not much success).
  142.  * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  143.  *
  144.  * Revision 1.7  2002/12/06 15:36:00  grichenk
  145.  * Added overlap type for annot-iterators
  146.  *
  147.  * Revision 1.6  2002/07/08 20:51:01  grichenk
  148.  * Moved log to the end of file
  149.  * Replaced static mutex (in CScope, CDataSource) with the mutex
  150.  * pool. Redesigned CDataSource data locking.
  151.  *
  152.  * Revision 1.5  2002/06/12 14:40:47  grichenk
  153.  * Made some methods inline
  154.  *
  155.  * Revision 1.4  2002/02/21 19:27:06  grichenk
  156.  * Rearranged includes. Added scope history. Added searching for the
  157.  * best seq-id match in data sources and scopes. Updated tests.
  158.  *
  159.  * Revision 1.3  2002/02/15 20:35:38  gouriano
  160.  * changed implementation of HandleRangeMap
  161.  *
  162.  * Revision 1.2  2002/01/23 21:59:31  grichenk
  163.  * Redesigned seq-id handles and mapper
  164.  *
  165.  * Revision 1.1  2002/01/11 19:06:20  gouriano
  166.  * restructured objmgr
  167.  *
  168.  *
  169.  * ===========================================================================
  170.  */
  171. #endif  // OBJECTS_OBJMGR_IMPL___HANDLE_RANGE_MAP__HPP