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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seq_entry_info.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/04/12 17:28:31  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJECTS_OBJMGR_IMPL___SEQ_ENTRY_INFO__HPP
  10. #define OBJECTS_OBJMGR_IMPL___SEQ_ENTRY_INFO__HPP
  11. /*  $Id: seq_entry_info.hpp,v 1000.2 2004/04/12 17:28:31 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. *   Seq_entry info -- entry for data source
  40. *
  41. */
  42. #include <objmgr/impl/tse_info_object.hpp>
  43. #include <objects/seqset/Seq_entry.hpp>
  44. #include <objects/seqset/Bioseq_set.hpp>
  45. #include <vector>
  46. #include <list>
  47. BEGIN_NCBI_SCOPE
  48. BEGIN_SCOPE(objects)
  49. // forward declaration
  50. class CSeq_entry;
  51. class CBioseq;
  52. class CBioseq_set;
  53. class CSeq_annot;
  54. class CDataSource;
  55. class CTSE_Info;
  56. class CSeq_entry_Info;
  57. class CBioseq_Base_Info;
  58. class CBioseq_set_Info;
  59. class CBioseq_Info;
  60. class CSeq_annot_Info;
  61. class CSeq_descr;
  62. class CSeqdesc;
  63. ////////////////////////////////////////////////////////////////////
  64. //
  65. //  CSeq_entry_Info::
  66. //
  67. //    General information and indexes for seq-entries
  68. //
  69. class NCBI_XOBJMGR_EXPORT CSeq_entry_Info : public CTSE_Info_Object
  70. {
  71.     typedef CTSE_Info_Object TParent;
  72. public:
  73.     // 'ctors
  74.     CSeq_entry_Info(void);
  75.     explicit CSeq_entry_Info(const CSeq_entry_Info& info);
  76.     explicit CSeq_entry_Info(CSeq_entry& entry);
  77.     virtual ~CSeq_entry_Info(void);
  78.     const CBioseq_set_Info& GetParentBioseq_set_Info(void) const;
  79.     CBioseq_set_Info& GetParentBioseq_set_Info(void);
  80.     const CSeq_entry_Info& GetParentSeq_entry_Info(void) const;
  81.     CSeq_entry_Info& GetParentSeq_entry_Info(void);
  82.     typedef CSeq_entry TObject;
  83.     CConstRef<TObject> GetCompleteSeq_entry(void) const;
  84.     CConstRef<TObject> GetSeq_entryCore(void) const;
  85.     // Seq-entry access
  86.     typedef TObject::E_Choice E_Choice;
  87.     E_Choice Which(void) const;
  88.     void x_CheckWhich(E_Choice which) const;
  89.     void Reset(void);
  90.     typedef CBioseq_set_Info TSet;
  91.     bool IsSet(void) const;
  92.     const TSet& GetSet(void) const;
  93.     TSet& SetSet(void);
  94.     // SelectSet switches Seq-entry to e_Set variant
  95.     TSet& SelectSet(void);
  96.     TSet& SelectSet(TSet& seqset);
  97.     TSet& SelectSet(CBioseq_set& seqset);
  98.     typedef CBioseq_Info TSeq;
  99.     bool IsSeq(void) const;
  100.     const TSeq& GetSeq(void) const;
  101.     TSeq& SetSeq(void);
  102.     // SelectSeq switches Seq-entry to e_Seq variant
  103.     TSeq& SelectSeq(TSeq& seq);
  104.     TSeq& SelectSeq(CBioseq& seq);
  105.     typedef CSeq_descr TDescr;
  106.     // Bioseq-set access
  107.     bool IsSetDescr(void) const;
  108.     const TDescr& GetDescr(void) const;
  109.     void ResetDescr(void);
  110.     void SetDescr(TDescr& v);
  111.     bool AddSeqdesc(CSeqdesc& d);
  112.     bool RemoveSeqdesc(const CSeqdesc& d);
  113.     void AddDescr(CSeq_entry_Info& src);
  114.     CRef<CSeq_annot_Info> AddAnnot(const CSeq_annot& annot);
  115.     void AddAnnot(CRef<CSeq_annot_Info> annot);
  116.     void RemoveAnnot(CRef<CSeq_annot_Info> annot);
  117.     CRef<CSeq_entry_Info> AddEntry(CSeq_entry& entry, int index = -1);
  118.     void AddEntry(CRef<CSeq_entry_Info> entry, int index = -1);
  119.     void RemoveEntry(CRef<CSeq_entry_Info> entry);
  120.     // tree initialization
  121.     void x_Attach(CRef<CSeq_entry_Info> sub_entry, int index = -1);
  122.     void x_Attach(CRef<CBioseq_Info> bioseq);
  123.     void x_ParentAttach(CBioseq_set_Info& parent);
  124.     void x_ParentDetach(CBioseq_set_Info& parent);
  125.     // attaching/detaching to CDataSource (it's in CTSE_Info)
  126.     virtual void x_DSAttachContents(CDataSource& ds);
  127.     virtual void x_DSDetachContents(CDataSource& ds);
  128.     // attaching/detaching to CTSE_Info
  129.     virtual void x_TSEAttachContents(CTSE_Info& tse_info);
  130.     virtual void x_TSEDetachContents(CTSE_Info& tse_info);
  131.     void UpdateAnnotIndex(void) const;
  132. protected:
  133.     friend class CScope_Impl;
  134.     friend class CDataSource;
  135.     friend class CAnnot_Collector;
  136.     friend class CSeq_annot_CI;
  137.     friend class CTSE_Info;
  138.     friend class CBioseq_Info;
  139.     friend class CBioseq_set_Info;
  140.     friend class CSeq_annot_Info;
  141.     void x_AttachContents(void);
  142.     void x_DetachContents(void);
  143.     TObject& x_GetObject(void);
  144.     const TObject& x_GetObject(void) const;
  145.     void x_SetObject(TObject& obj);
  146.     void x_SetObject(const CSeq_entry_Info& info);
  147.     void x_DetachObjectVariant(void);
  148.     void x_AttachObjectVariant(CBioseq& seq);
  149.     void x_AttachObjectVariant(CBioseq_set& seqset);
  150.     void x_Select(CSeq_entry::E_Choice which,
  151.                   CBioseq_Base_Info* contents);
  152.     void x_Select(CSeq_entry::E_Choice which,
  153.                   CRef<CBioseq_Base_Info> contents);
  154.     virtual void x_DSMapObject(CConstRef<TObject> obj, CDataSource& ds);
  155.     virtual void x_DSUnmapObject(CConstRef<TObject> obj, CDataSource& ds);
  156.     void x_UpdateAnnotIndexContents(CTSE_Info& tse);
  157.     void x_DoUpdateObject(void);
  158.     static CRef<TObject> sx_ShallowCopy(TObject& obj);
  159.     // Seq-entry pointer
  160.     CRef<TObject>           m_Object;
  161.     // Bioseq/Bioseq_set info
  162.     E_Choice                m_Which;
  163.     CRef<CBioseq_Base_Info> m_Contents;
  164.     // Hide copy methods
  165.     CSeq_entry_Info& operator= (const CSeq_entry_Info&);
  166. };
  167. /////////////////////////////////////////////////////////////////////
  168. //
  169. //  Inline methods
  170. //
  171. /////////////////////////////////////////////////////////////////////
  172. inline
  173. CSeq_entry::E_Choice CSeq_entry_Info::Which(void) const
  174. {
  175.     return m_Which;
  176. }
  177. inline
  178. CSeq_entry& CSeq_entry_Info::x_GetObject(void)
  179. {
  180.     return *m_Object;
  181. }
  182. inline
  183. const CSeq_entry& CSeq_entry_Info::x_GetObject(void) const
  184. {
  185.     return *m_Object;
  186. }
  187. inline
  188. bool CSeq_entry_Info::IsSet(void) const
  189. {
  190.     return Which() == CSeq_entry::e_Set;
  191. }
  192. inline
  193. bool CSeq_entry_Info::IsSeq(void) const
  194. {
  195.     return Which() == CSeq_entry::e_Seq;
  196. }
  197. END_SCOPE(objects)
  198. END_NCBI_SCOPE
  199. /*
  200. * ---------------------------------------------------------------------------
  201. * $Log: seq_entry_info.hpp,v $
  202. * Revision 1000.2  2004/04/12 17:28:31  gouriano
  203. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.13
  204. *
  205. * Revision 1.13  2004/04/05 15:56:13  grichenk
  206. * Redesigned CAnnotTypes_CI: moved all data and data collecting
  207. * functions to CAnnotDataCollector. CAnnotTypes_CI is no more
  208. * inherited from SAnnotSelector.
  209. *
  210. * Revision 1.12  2004/03/31 17:08:06  vasilche
  211. * Implemented ConvertSeqToSet and ConvertSetToSeq.
  212. *
  213. * Revision 1.11  2004/03/25 19:27:44  vasilche
  214. * Implemented MoveTo and CopyTo methods of handles.
  215. *
  216. * Revision 1.10  2004/03/24 18:30:29  vasilche
  217. * Fixed edit API.
  218. * Every *_Info object has its own shallow copy of original object.
  219. *
  220. * Revision 1.9  2004/03/16 15:47:27  vasilche
  221. * Added CBioseq_set_Handle and set of EditHandles
  222. *
  223. * Revision 1.8  2004/02/03 19:02:16  vasilche
  224. * Fixed broken 'dirty annot index' state after RemoveEntry().
  225. *
  226. * Revision 1.7  2003/12/18 16:38:06  grichenk
  227. * Added CScope::RemoveEntry()
  228. *
  229. * Revision 1.6  2003/11/28 15:13:25  grichenk
  230. * Added CSeq_entry_Handle
  231. *
  232. * Revision 1.5  2003/09/30 16:22:01  vasilche
  233. * Updated internal object manager classes to be able to load ID2 data.
  234. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  235. * Scope caches results of requests for data to data loaders.
  236. * Optimized CSeq_id_Handle for gis.
  237. * Optimized bioseq lookup in scope.
  238. * Reduced object allocations in annotation iterators.
  239. * CScope is allowed to be destroyed before other objects using this scope are
  240. * deleted (feature iterators, bioseq handles etc).
  241. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  242. * Added 'adaptive' option to objmgr_demo application.
  243. *
  244. * Revision 1.4  2003/08/04 17:02:59  grichenk
  245. * Added constructors to iterate all annotations from a
  246. * seq-entry or seq-annot.
  247. *
  248. * Revision 1.3  2003/07/25 21:41:29  grichenk
  249. * Implemented non-recursive mode for CSeq_annot_CI,
  250. * fixed friend declaration in CSeq_entry_Info.
  251. *
  252. * Revision 1.2  2003/07/25 15:25:24  grichenk
  253. * Added CSeq_annot_CI class
  254. *
  255. * Revision 1.1  2003/04/24 16:12:37  vasilche
  256. * Object manager internal structures are splitted more straightforward.
  257. * Removed excessive header dependencies.
  258. *
  259. *
  260. * ===========================================================================
  261. */
  262. #endif  /* OBJECTS_OBJMGR_IMPL___SEQ_ENTRY_INFO__HPP */