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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: seq_annot_handle.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:21:35  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef SEQ_ANNOT_HANDLE__HPP
  10. #define SEQ_ANNOT_HANDLE__HPP
  11. /*  $Id: seq_annot_handle.hpp,v 1000.2 2004/06/01 19:21:35 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-annot object
  40. *
  41. */
  42. #include <corelib/ncbiobj.hpp>
  43. #include <objmgr/impl/heap_scope.hpp>
  44. BEGIN_NCBI_SCOPE
  45. BEGIN_SCOPE(objects)
  46. class CSeq_annot;
  47. class CScope;
  48. class CSeq_annot_CI;
  49. class CAnnotTypes_CI;
  50. class CAnnot_CI;
  51. class CSeq_annot_Handle;
  52. class CSeq_annot_EditHandle;
  53. class CSeq_entry_Handle;
  54. class CSeq_entry_EditHandle;
  55. class CSeq_annot_Info;
  56. /////////////////////////////////////////////////////////////////////////////
  57. // CSeq_annot_Handle
  58. /////////////////////////////////////////////////////////////////////////////
  59. class NCBI_XOBJMGR_EXPORT CSeq_annot_Handle
  60. {
  61. public:
  62.     CSeq_annot_Handle(void);
  63.     CSeq_annot_Handle(CScope& scope, const CSeq_annot_Info& annot);
  64.     //
  65.     operator bool(void) const;
  66.     bool operator!(void) const;
  67.     void Reset(void);
  68.     bool operator==(const CSeq_annot_Handle& annot) const;
  69.     bool operator!=(const CSeq_annot_Handle& annot) const;
  70.     bool operator<(const CSeq_annot_Handle& annot) const;
  71.     //
  72.     CScope& GetScope(void) const;
  73.     const CSeq_annot& GetSeq_annot(void) const;
  74.     CConstRef<CSeq_annot> GetCompleteSeq_annot(void) const;
  75.     //
  76.     CSeq_entry_Handle GetParentEntry(void) const;
  77.     CSeq_entry_Handle GetTopLevelEntry(void) const;
  78.     // Get 'edit' version of handle
  79.     CSeq_annot_EditHandle GetEditHandle(void) const;
  80.     // Seq-annot accessors
  81.     bool IsNamed(void) const;
  82.     const string& GetName(void) const;
  83.     const CSeq_annot_Info& x_GetInfo(void) const;
  84. protected:
  85.     void x_Set(CScope& scope, const CSeq_annot_Info& annot);
  86.     CHeapScope          m_Scope;
  87.     CConstRef<CObject>  m_Info;
  88. };
  89. class NCBI_XOBJMGR_EXPORT CSeq_annot_EditHandle : public CSeq_annot_Handle
  90. {
  91. public:
  92.     CSeq_annot_EditHandle(void);
  93.     CSeq_entry_EditHandle GetParentEntry(void) const;
  94.     // remove current annot
  95.     void Remove(void) const;
  96. protected:
  97.     friend class CScope_Impl;
  98.     friend class CBioseq_EditHandle;
  99.     friend class CBioseq_set_EditHandle;
  100.     friend class CSeq_entry_EditHandle;
  101.     CSeq_annot_EditHandle(const CSeq_annot_Handle& h);
  102.     CSeq_annot_EditHandle(CScope& scope, CSeq_annot_Info& info);
  103. public: // non-public section
  104.     CSeq_annot_Info& x_GetInfo(void) const;
  105. };
  106. /////////////////////////////////////////////////////////////////////////////
  107. // CSeq_annot_Handle inline methods
  108. /////////////////////////////////////////////////////////////////////////////
  109. inline
  110. CSeq_annot_Handle::CSeq_annot_Handle(void)
  111. {
  112. }
  113. inline
  114. CSeq_annot_Handle::operator bool(void) const
  115. {
  116.     return m_Info;
  117. }
  118. inline
  119. bool CSeq_annot_Handle::operator!(void) const
  120. {
  121.     return !m_Info;
  122. }
  123. inline
  124. CScope& CSeq_annot_Handle::GetScope(void) const
  125. {
  126.     return *m_Scope;
  127. }
  128. inline
  129. void CSeq_annot_Handle::Reset(void)
  130. {
  131.     m_Scope.Reset();
  132.     m_Info.Reset();
  133. }
  134. inline
  135. const CSeq_annot_Info& CSeq_annot_Handle::x_GetInfo(void) const
  136. {
  137.     return reinterpret_cast<const CSeq_annot_Info&>(*m_Info);
  138. }
  139. inline
  140. bool CSeq_annot_Handle::operator==(const CSeq_annot_Handle& handle) const
  141. {
  142.     return m_Scope == handle.m_Scope  &&  m_Info == handle.m_Info;
  143. }
  144. inline
  145. bool CSeq_annot_Handle::operator!=(const CSeq_annot_Handle& handle) const
  146. {
  147.     return m_Scope != handle.m_Scope  ||  m_Info != handle.m_Info;
  148. }
  149. inline
  150. bool CSeq_annot_Handle::operator<(const CSeq_annot_Handle& handle) const
  151. {
  152.     if ( m_Scope != handle.m_Scope ) {
  153.         return m_Scope < handle.m_Scope;
  154.     }
  155.     return m_Info < handle.m_Info;
  156. }
  157. inline
  158. CSeq_annot_EditHandle::CSeq_annot_EditHandle(void)
  159. {
  160. }
  161. inline
  162. CSeq_annot_EditHandle::CSeq_annot_EditHandle(const CSeq_annot_Handle& h)
  163.     : CSeq_annot_Handle(h)
  164. {
  165. }
  166. inline
  167. CSeq_annot_EditHandle::CSeq_annot_EditHandle(CScope& scope,
  168.                                              CSeq_annot_Info& info)
  169.     : CSeq_annot_Handle(scope, info)
  170. {
  171. }
  172. END_SCOPE(objects)
  173. END_NCBI_SCOPE
  174. /*
  175. * ---------------------------------------------------------------------------
  176. * $Log: seq_annot_handle.hpp,v $
  177. * Revision 1000.2  2004/06/01 19:21:35  gouriano
  178. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.8
  179. *
  180. * Revision 1.8  2004/04/29 15:44:30  grichenk
  181. * Added GetTopLevelEntry()
  182. *
  183. * Revision 1.7  2004/03/31 19:54:07  vasilche
  184. * Fixed removal of bioseqs and bioseq-sets.
  185. *
  186. * Revision 1.6  2004/03/24 18:30:28  vasilche
  187. * Fixed edit API.
  188. * Every *_Info object has its own shallow copy of original object.
  189. *
  190. * Revision 1.5  2004/03/16 21:01:32  vasilche
  191. * Added methods to move Bioseq withing Seq-entry
  192. *
  193. * Revision 1.4  2004/03/16 15:47:26  vasilche
  194. * Added CBioseq_set_Handle and set of EditHandles
  195. *
  196. * Revision 1.3  2003/10/08 14:14:54  vasilche
  197. * Use CHeapScope instead of CRef<CScope> internally.
  198. *
  199. * Revision 1.2  2003/10/07 13:43:22  vasilche
  200. * Added proper handling of named Seq-annots.
  201. * Added feature search from named Seq-annots.
  202. * Added configurable adaptive annotation search (default: gene, cds, mrna).
  203. * Fixed selection of blobs for loading from GenBank.
  204. * Added debug checks to CSeq_id_Mapper for easier finding lost CSeq_id_Handles.
  205. * Fixed leaked split chunks annotation stubs.
  206. * Moved some classes definitions in separate *.cpp files.
  207. *
  208. * Revision 1.1  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. * ===========================================================================
  221. */
  222. #endif//SEQ_ANNOT_HANDLE__HPP