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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bioseq_set_handle.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:21:19  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef OBJMGR__BIOSEQ_SET_HANDLE__HPP
  10. #define OBJMGR__BIOSEQ_SET_HANDLE__HPP
  11. /*  $Id: bioseq_set_handle.hpp,v 1000.1 2004/06/01 19:21:19 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, Eugene Vasilchenko
  37. *
  38. * File Description:
  39. *    Handle to Seq-entry object
  40. *
  41. */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <objects/seqset/Bioseq_set.hpp>
  44. #include <objmgr/impl/heap_scope.hpp>
  45. BEGIN_NCBI_SCOPE
  46. BEGIN_SCOPE(objects)
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CSeq_entry_Handle
  49. /////////////////////////////////////////////////////////////////////////////
  50. class CSeq_annot;
  51. class CSeq_entry;
  52. class CBioseq;
  53. class CBioseq_set;
  54. class CSeqdesc;
  55. class CScope;
  56. class CSeq_entry_Handle;
  57. class CBioseq_set_Handle;
  58. class CBioseq_Handle;
  59. class CSeq_annot_Handle;
  60. class CSeq_entry_EditHandle;
  61. class CBioseq_set_EditHandle;
  62. class CBioseq_EditHandle;
  63. class CSeq_annot_EditHandle;
  64. class CBioseq_set_Info;
  65. class NCBI_XOBJMGR_EXPORT CBioseq_set_Handle
  66. {
  67. public:
  68.     // Default constructor
  69.     CBioseq_set_Handle(void);
  70.     // Get scope this handle belongs to
  71.     CScope& GetScope(void) const;
  72.     // owner Seq-entry
  73.     CSeq_entry_Handle GetParentEntry(void) const;
  74.     CSeq_entry_Handle GetTopLevelEntry(void) const;
  75.     // Get 'edit' version of handle
  76.     CBioseq_set_EditHandle GetEditHandle(void) const;
  77.     // Get controlled object
  78.     CConstRef<CBioseq_set> GetCompleteBioseq_set(void) const;
  79.     CConstRef<CBioseq_set> GetBioseq_setCore(void) const;
  80.     // member access
  81.     typedef CBioseq_set::TId TId;
  82.     bool IsSetId(void) const;
  83.     bool CanGetId(void) const;
  84.     const TId& GetId(void) const;
  85.     typedef CBioseq_set::TColl TColl;
  86.     bool IsSetColl(void) const;
  87.     bool CanGetColl(void) const;
  88.     const TColl& GetColl(void) const;
  89.     typedef CBioseq_set::TLevel TLevel;
  90.     bool IsSetLevel(void) const;
  91.     bool CanGetLevel(void) const;
  92.     TLevel GetLevel(void) const;
  93.     typedef CBioseq_set::TClass TClass;
  94.     bool IsSetClass(void) const;
  95.     bool CanGetClass(void) const;
  96.     TClass GetClass(void) const;
  97.     typedef CBioseq_set::TRelease TRelease;
  98.     bool IsSetRelease(void) const;
  99.     bool CanGetRelease(void) const;
  100.     const TRelease& GetRelease(void) const;
  101.     typedef CBioseq_set::TDate TDate;
  102.     bool IsSetDate(void) const;
  103.     bool CanGetDate(void) const;
  104.     const TDate& GetDate(void) const;
  105.     typedef CBioseq_set::TDescr TDescr;
  106.     bool IsSetDescr(void) const;
  107.     bool CanGetDescr(void) const;
  108.     const TDescr& GetDescr(void) const;
  109.     // Utility methods/operators
  110.     operator bool(void) const;
  111.     bool operator!(void) const;
  112.     void Reset(void);
  113.     bool operator ==(const CBioseq_set_Handle& handle) const;
  114.     bool operator !=(const CBioseq_set_Handle& handle) const;
  115.     bool operator <(const CBioseq_set_Handle& handle) const;
  116. protected:
  117.     friend class CScope_Impl;
  118.     friend class CBioseq_Handle;
  119.     friend class CSeq_entry_Handle;
  120.     friend class CSeqMap_CI;
  121.     friend class CSeq_entry_CI;
  122.     friend class CSeq_annot_CI;
  123.     friend class CAnnotTypes_CI;
  124.     CBioseq_set_Handle(CScope& scope, const CBioseq_set_Info& info);
  125.     CHeapScope          m_Scope;
  126.     CConstRef<CObject>  m_Info;
  127. public: // non-public section
  128.     const CBioseq_set_Info& x_GetInfo(void) const;
  129. };
  130. class NCBI_XOBJMGR_EXPORT CBioseq_set_EditHandle : public CBioseq_set_Handle
  131. {
  132. public:
  133.     // Default constructor
  134.     CBioseq_set_EditHandle(void);
  135.     // Navigate object tree
  136.     CSeq_entry_EditHandle GetParentEntry(void) const;
  137.     // Member modification
  138.     void ResetId(void) const;
  139.     void SetId(TId& id) const;
  140.     void ResetColl(void) const;
  141.     void SetColl(TColl& v) const;
  142.     void ResetLevel(void) const;
  143.     void SetLevel(TLevel v) const;
  144.     void ResetClass(void) const;
  145.     void SetClass(TClass v) const;
  146.     void ResetRelease(void) const;
  147.     void SetRelease(TRelease& v) const;
  148.     void ResetDate(void) const;
  149.     void SetDate(TDate& v) const;
  150.     void ResetDescr(void) const;
  151.     void SetDescr(TDescr& v) const;
  152.     bool AddDesc(CSeqdesc& v) const;
  153.     bool RemoveDesc(CSeqdesc& v) const;
  154.     void AddAllDescr(CSeq_descr& v) const;
  155.     // Modify object tree
  156.     CSeq_entry_EditHandle AddNewEntry(int index) const;
  157.     CSeq_annot_EditHandle AttachAnnot(const CSeq_annot& annot) const;
  158.     CSeq_annot_EditHandle CopyAnnot(const CSeq_annot_Handle&annot) const;
  159.     CSeq_annot_EditHandle TakeAnnot(const CSeq_annot_EditHandle& annot) const;
  160.     CBioseq_EditHandle AttachBioseq(CBioseq& seq,
  161.                                     int index = -1) const;
  162.     CBioseq_EditHandle CopyBioseq(const CBioseq_Handle& seq,
  163.                                   int index = -1) const;
  164.     CBioseq_EditHandle TakeBioseq(const CBioseq_EditHandle& seq,
  165.                                   int index = -1) const;
  166.     CSeq_entry_EditHandle AttachEntry(CSeq_entry& entry,
  167.                                       int index = -1) const;
  168.     CSeq_entry_EditHandle CopyEntry(const CSeq_entry_Handle& entry,
  169.                                     int index = -1) const;
  170.     CSeq_entry_EditHandle TakeEntry(const CSeq_entry_EditHandle& entry,
  171.                                     int index = -1) const;
  172.     void Remove(void) const;
  173. protected:
  174.     friend class CScope_Impl;
  175.     friend class CBioseq_EditHandle;
  176.     friend class CSeq_entry_EditHandle;
  177.     CBioseq_set_EditHandle(const CBioseq_set_Handle& h);
  178.     CBioseq_set_EditHandle(CScope& scope, CBioseq_set_Info& info);
  179. public: // non-public section
  180.     CBioseq_set_Info& x_GetInfo(void) const;
  181. };
  182. /////////////////////////////////////////////////////////////////////////////
  183. // CBioseq_set_Handle inline methods
  184. /////////////////////////////////////////////////////////////////////////////
  185. inline
  186. CBioseq_set_Handle::CBioseq_set_Handle(void)
  187. {
  188. }
  189. inline
  190. CScope& CBioseq_set_Handle::GetScope(void) const
  191. {
  192.     return m_Scope;
  193. }
  194. inline
  195. void CBioseq_set_Handle::Reset(void)
  196. {
  197.     m_Scope.Reset();
  198.     m_Info.Reset();
  199. }
  200. inline
  201. const CBioseq_set_Info& CBioseq_set_Handle::x_GetInfo(void) const
  202. {
  203.     return reinterpret_cast<const CBioseq_set_Info&>(*m_Info);
  204. }
  205. inline
  206. CBioseq_set_Handle::operator bool(void) const
  207. {
  208.     return m_Info;
  209. }
  210. inline
  211. bool CBioseq_set_Handle::operator!(void) const
  212. {
  213.     return !m_Info;
  214. }
  215. inline
  216. bool CBioseq_set_Handle::operator ==(const CBioseq_set_Handle& handle) const
  217. {
  218.     return m_Scope == handle.m_Scope  &&  m_Info == handle.m_Info;
  219. }
  220. inline
  221. bool CBioseq_set_Handle::operator !=(const CBioseq_set_Handle& handle) const
  222. {
  223.     return m_Scope != handle.m_Scope  ||  m_Info != handle.m_Info;
  224. }
  225. inline
  226. bool CBioseq_set_Handle::operator <(const CBioseq_set_Handle& handle) const
  227. {
  228.     if ( m_Scope != handle.m_Scope ) {
  229.         return m_Scope < handle.m_Scope;
  230.     }
  231.     return m_Info < handle.m_Info;
  232. }
  233. /////////////////////////////////////////////////////////////////////////////
  234. // CBioseq_set_EditHandle
  235. /////////////////////////////////////////////////////////////////////////////
  236. inline
  237. CBioseq_set_EditHandle::CBioseq_set_EditHandle(void)
  238. {
  239. }
  240. inline
  241. CBioseq_set_EditHandle::CBioseq_set_EditHandle(const CBioseq_set_Handle& h)
  242.     : CBioseq_set_Handle(h)
  243. {
  244. }
  245. inline
  246. CBioseq_set_EditHandle::CBioseq_set_EditHandle(CScope& scope,
  247.                                                CBioseq_set_Info& info)
  248.     : CBioseq_set_Handle(scope, info)
  249. {
  250. }
  251. inline
  252. CBioseq_set_Info& CBioseq_set_EditHandle::x_GetInfo(void) const
  253. {
  254.     return const_cast<CBioseq_set_Info&>(CBioseq_set_Handle::x_GetInfo());
  255. }
  256. END_SCOPE(objects)
  257. END_NCBI_SCOPE
  258. /*
  259. * ---------------------------------------------------------------------------
  260. * $Log: bioseq_set_handle.hpp,v $
  261. * Revision 1000.1  2004/06/01 19:21:19  gouriano
  262. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  263. *
  264. * Revision 1.7  2004/05/06 17:32:37  grichenk
  265. * Added CanGetXXXX() methods
  266. *
  267. * Revision 1.6  2004/04/29 15:44:30  grichenk
  268. * Added GetTopLevelEntry()
  269. *
  270. * Revision 1.5  2004/03/31 19:54:07  vasilche
  271. * Fixed removal of bioseqs and bioseq-sets.
  272. *
  273. * Revision 1.4  2004/03/31 17:08:06  vasilche
  274. * Implemented ConvertSeqToSet and ConvertSetToSeq.
  275. *
  276. * Revision 1.3  2004/03/29 20:13:05  vasilche
  277. * Implemented whole set of methods to modify Seq-entry object tree.
  278. * Added CBioseq_Handle::GetExactComplexityLevel().
  279. *
  280. * Revision 1.2  2004/03/24 18:30:28  vasilche
  281. * Fixed edit API.
  282. * Every *_Info object has its own shallow copy of original object.
  283. *
  284. * Revision 1.1  2004/03/16 15:47:26  vasilche
  285. * Added CBioseq_set_Handle and set of EditHandles
  286. *
  287. * Revision 1.3  2004/02/09 19:18:50  grichenk
  288. * Renamed CDesc_CI to CSeq_descr_CI. Redesigned CSeq_descr_CI
  289. * and CSeqdesc_CI to avoid using data directly.
  290. *
  291. * Revision 1.2  2003/12/03 16:40:03  grichenk
  292. * Added GetParentEntry()
  293. *
  294. * Revision 1.1  2003/11/28 15:12:30  grichenk
  295. * Initial revision
  296. *
  297. *
  298. * ===========================================================================
  299. */
  300. #endif//OBJMGR__BIOSEQ_SET_HANDLE__HPP