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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seq_map_ext.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 17:27:57  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_OBJMGR___SEQ_MAP_EXT__HPP
  10. #define OBJECTS_OBJMGR___SEQ_MAP_EXT__HPP
  11. /*  $Id: seq_map_ext.hpp,v 1000.2 2004/04/12 17:27:57 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. * Authors:
  37. *           Eugene Vasilchenko
  38. *
  39. * File Description:
  40. *   CSeqMap -- formal sequence map to describe sequence parts in general,
  41. *   i.e. location and type only, without providing real data
  42. *
  43. */
  44. #include <objmgr/seq_map.hpp>
  45. #include <objects/seq/Delta_ext.hpp>
  46. #include <objects/seqloc/Packed_seqint.hpp>
  47. #include <objects/seqloc/Packed_seqpnt.hpp>
  48. BEGIN_NCBI_SCOPE
  49. BEGIN_SCOPE(objects)
  50. class CSeg_ext;
  51. class NCBI_XOBJMGR_EXPORT CSeqMap_Delta_seqs : public CSeqMap
  52. {
  53. public:
  54.     typedef CDelta_ext            TObject;
  55.     typedef TObject::Tdata        TList;
  56.     typedef TList::const_iterator TList_I;
  57.     CSeqMap_Delta_seqs(const TObject& obj);
  58.     CSeqMap_Delta_seqs(const TObject& obj, CSeqMap_Delta_seqs* parent, size_t index);
  59.     ~CSeqMap_Delta_seqs(void);
  60. protected:
  61.     void x_Index(const TList& seq);
  62.     void x_IndexAll(const TList& seq);
  63.     void x_IndexUnloadedSubMap(TSeqPos len);
  64.     TList* x_Splice(size_t index, TList& seq);
  65.     TList_I x_GetSegmentList_I(size_t index) const
  66.         {
  67.             return x_GetSegmentList_I(x_GetSegment(index));
  68.         }
  69.     void x_SetSegmentList_I(size_t index, TList_I iter)
  70.         {
  71.             x_SetSegmentList_I(x_SetSegment(index), iter);
  72.         }
  73.     TList_I x_GetSegmentList_I(const CSegment& seg) const
  74.         {
  75.             return reinterpret_cast<const TList_I&>(seg.m_Iterator);
  76.         }
  77.     void x_SetSegmentList_I(CSegment& seg, TList_I iter)
  78.         {
  79.             reinterpret_cast<TList_I&>(seg.m_Iterator) = iter;
  80.         }
  81.     
  82.     TList_I x_FindInsertList_I(size_t index) const;
  83.     virtual void x_SetSeq_data(size_t index, CSeq_data& data);
  84.     virtual void x_SetSubSeqMap(size_t index, CSeqMap_Delta_seqs* subMap);
  85. private:
  86.     CConstRef<TObject> m_Object;
  87.     const TList*       m_List;
  88. };
  89. class NCBI_XOBJMGR_EXPORT CSeqMap_Seq_locs : public CSeqMap
  90. {
  91. public:
  92.     typedef CObject                 TObject;
  93.     typedef list< CRef<CSeq_loc> >  TList;
  94.     typedef TList::const_iterator   TList_I;
  95.     CSeqMap_Seq_locs(const CSeg_ext& obj, const TList& seq);
  96.     CSeqMap_Seq_locs(const CSeq_loc_mix& obj, const TList& seq);
  97.     CSeqMap_Seq_locs(const CSeq_loc_equiv& obj, const TList& seq);
  98.     ~CSeqMap_Seq_locs(void);
  99. protected:
  100.     void x_IndexAll(void);
  101.     TList_I x_GetSegmentList_I(size_t index) const
  102.         {
  103.             return x_GetSegmentList_I(x_GetSegment(index));
  104.         }
  105.     void x_SetSegmentList_I(size_t index, TList_I iter)
  106.         {
  107.             x_SetSegmentList_I(x_SetSegment(index), iter);
  108.         }
  109.     TList_I x_GetSegmentList_I(const CSegment& seg) const
  110.         {
  111.             return reinterpret_cast<const TList_I&>(seg.m_Iterator);
  112.         }
  113.     void x_SetSegmentList_I(CSegment& seg, TList_I iter)
  114.         {
  115.             reinterpret_cast<TList_I&>(seg.m_Iterator) = iter;
  116.         }
  117.     
  118. private:
  119.     CConstRef<TObject> m_Object;
  120.     const TList*       m_List;
  121. };
  122. class NCBI_XOBJMGR_EXPORT CSeqMap_Seq_intervals : public CSeqMap
  123. {
  124. public:
  125.     typedef CPacked_seqint        TObject;
  126.     typedef TObject::Tdata        TList;
  127.     typedef TList::const_iterator TList_I;
  128.     CSeqMap_Seq_intervals(const TObject& obj);
  129.     CSeqMap_Seq_intervals(const TObject& obj, CSeqMap* parent, size_t index);
  130.     ~CSeqMap_Seq_intervals(void);
  131. protected:
  132.     void x_IndexAll(void);
  133.     TList_I x_GetSegmentList_I(size_t index) const
  134.         {
  135.             return x_GetSegmentList_I(x_GetSegment(index));
  136.         }
  137.     void x_SetSegmentList_I(size_t index, TList_I iter)
  138.         {
  139.             x_SetSegmentList_I(x_SetSegment(index), iter);
  140.         }
  141.     TList_I x_GetSegmentList_I(const CSegment& seg) const
  142.         {
  143.             return reinterpret_cast<const TList_I&>(seg.m_Iterator);
  144.         }
  145.     void x_SetSegmentList_I(CSegment& seg, TList_I iter)
  146.         {
  147.             reinterpret_cast<TList_I&>(seg.m_Iterator) = iter;
  148.         }
  149.     
  150. private:
  151.     CConstRef<TObject> m_Object;
  152.     const TList*       m_List;
  153. };
  154. class NCBI_XOBJMGR_EXPORT CSeqMap_SeqPoss : public CSeqMap
  155. {
  156. public:
  157.     typedef CPacked_seqpnt        TObject;
  158.     typedef TObject::TPoints      TList;
  159.     typedef TList::const_iterator TList_I;
  160.     CSeqMap_SeqPoss(const TObject& obj);
  161.     CSeqMap_SeqPoss(const TObject& obj, CSeqMap* parent, size_t index);
  162.     ~CSeqMap_SeqPoss(void);
  163. protected:
  164.     void x_IndexAll(void);
  165.     CSegment& x_AddPos(const CSeq_id* id, TSeqPos pos, ENa_strand strand);
  166.     TList_I x_GetSegmentList_I(size_t index) const
  167.         {
  168.             return x_GetSegmentList_I(x_GetSegment(index));
  169.         }
  170.     void x_SetSegmentList_I(size_t index, TList_I iter)
  171.         {
  172.             x_SetSegmentList_I(x_SetSegment(index), iter);
  173.         }
  174.     TList_I x_GetSegmentList_I(const CSegment& seg) const
  175.         {
  176.             return reinterpret_cast<const TList_I&>(seg.m_Iterator);
  177.         }
  178.     void x_SetSegmentList_I(CSegment& seg, TList_I iter)
  179.         {
  180.             reinterpret_cast<TList_I&>(seg.m_Iterator) = iter;
  181.         }
  182.     
  183. private:
  184.     // Prohibit copy operator and constructor
  185.     CSeqMap_SeqPoss(const CSeqMap_SeqPoss&);
  186.     CSeqMap_SeqPoss& operator= (const CSeqMap_SeqPoss&);
  187.     
  188.     CConstRef<TObject> m_Object;
  189.     const TList*       m_List;
  190. };
  191. END_SCOPE(objects)
  192. END_NCBI_SCOPE
  193. /*
  194. * ---------------------------------------------------------------------------
  195. * $Log: seq_map_ext.hpp,v $
  196. * Revision 1000.2  2004/04/12 17:27:57  gouriano
  197. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.9
  198. *
  199. * Revision 1.9  2004/03/16 15:47:26  vasilche
  200. * Added CBioseq_set_Handle and set of EditHandles
  201. *
  202. * Revision 1.8  2004/01/22 22:11:59  shomrat
  203. * using typedefs instead of concrete types
  204. *
  205. * Revision 1.7  2003/11/12 16:53:16  grichenk
  206. * Modified CSeqMap to work with const objects (CBioseq, CSeq_loc etc.)
  207. *
  208. * Revision 1.6  2003/09/30 16:21:59  vasilche
  209. * Updated internal object manager classes to be able to load ID2 data.
  210. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  211. * Scope caches results of requests for data to data loaders.
  212. * Optimized CSeq_id_Handle for gis.
  213. * Optimized bioseq lookup in scope.
  214. * Reduced object allocations in annotation iterators.
  215. * CScope is allowed to be destroyed before other objects using this scope are
  216. * deleted (feature iterators, bioseq handles etc).
  217. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  218. * Added 'adaptive' option to objmgr_demo application.
  219. *
  220. * Revision 1.5  2003/06/02 16:01:36  dicuccio
  221. * Rearranged include/objects/ subtree.  This includes the following shifts:
  222. *     - include/objects/alnmgr --> include/objtools/alnmgr
  223. *     - include/objects/cddalignview --> include/objtools/cddalignview
  224. *     - include/objects/flat --> include/objtools/flat
  225. *     - include/objects/objmgr/ --> include/objmgr/
  226. *     - include/objects/util/ --> include/objmgr/util/
  227. *     - include/objects/validator --> include/objtools/validator
  228. *
  229. * Revision 1.4  2003/05/21 16:03:07  vasilche
  230. * Fixed access to uninitialized optional members.
  231. * Added initialization of mandatory members.
  232. *
  233. * Revision 1.3  2003/01/22 20:11:53  vasilche
  234. * Merged functionality of CSeqMapResolved_CI to CSeqMap_CI.
  235. * CSeqMap_CI now supports resolution and iteration over sequence range.
  236. * Added several caches to CScope.
  237. * Optimized CSeqVector().
  238. * Added serveral variants of CBioseqHandle::GetSeqVector().
  239. * Tried to optimize annotations iterator (not much success).
  240. * Rewritten CHandleRange and CHandleRangeMap classes to avoid sorting of list.
  241. *
  242. * Revision 1.2  2002/12/26 20:51:36  dicuccio
  243. * Added Win32 export specifier
  244. *
  245. * Revision 1.1  2002/12/26 16:39:22  vasilche
  246. * Object manager class CSeqMap rewritten.
  247. *
  248. *
  249. * ===========================================================================
  250. */
  251. #endif  // OBJECTS_OBJMGR___SEQ_MAP_EXT__HPP