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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: tse_ci.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 20:24:10  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef TSE_CI__HPP
  10. #define TSE_CI__HPP
  11. /*  $Id: tse_ci.hpp,v 1000.0 2003/10/29 20:24:10 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
  37. *
  38. * File Description:
  39. *   Iterates over TSEs from a given scope. To be used together with
  40. *   CBioseq_CI and CFeat_CI to get all objects from a scope.
  41. *
  42. */
  43. #include <objmgr/scope.hpp>
  44. #include <corelib/ncbistd.hpp>
  45. BEGIN_NCBI_SCOPE
  46. BEGIN_SCOPE(objects)
  47. class NCBI_XOBJMGR_EXPORT CTSE_CI
  48. {
  49. public:
  50.     // 'ctors
  51.     CTSE_CI(void);
  52.     // Iterate over TSEs taken from the scope.
  53.     CTSE_CI(CScope& scope);
  54.     CTSE_CI(const CTSE_CI& tse_ci);
  55.     ~CTSE_CI(void);
  56.     CTSE_CI& operator= (const CTSE_CI& tse_ci);
  57.     CTSE_CI& operator++ (void);
  58.     operator bool (void) const;
  59.     const CSeq_entry& operator* (void) const;
  60.     const CSeq_entry* operator-> (void) const;
  61. private:
  62.     typedef set<TTSE_Lock>          TTSE_LockSet;
  63.     typedef TTSE_LockSet::const_iterator TTSEIterator;
  64.     CHeapScope    m_Scope;
  65.     TTSE_LockSet  m_Entries;
  66.     TTSEIterator  m_Current;
  67. };
  68. inline
  69. CTSE_CI::CTSE_CI(void)
  70. {
  71.     m_Current = m_Entries.end();
  72. }
  73. inline
  74. CTSE_CI::CTSE_CI(CScope& scope)
  75.     : m_Scope(&scope)
  76. {
  77.     ITERATE (CScope::TRequestHistory, it, m_Scope->x_GetHistory()) {
  78.         m_Entries.insert(*it);
  79.     }
  80.     m_Current = m_Entries.begin();
  81. }
  82. inline
  83. CTSE_CI::CTSE_CI(const CTSE_CI& tse_ci)
  84. {
  85.     *this = tse_ci;
  86. }
  87. inline
  88. CTSE_CI::~CTSE_CI(void)
  89. {
  90. }
  91. inline
  92. CTSE_CI& CTSE_CI::operator= (const CTSE_CI& tse_ci)
  93. {
  94.     if (this != &tse_ci) {
  95.         m_Scope = tse_ci.m_Scope;
  96.         ITERATE (TTSE_LockSet, it, tse_ci.m_Entries) {
  97.             m_Entries.insert(*it);
  98.         }
  99.         if (tse_ci) {
  100.             m_Current = m_Entries.find(*tse_ci.m_Current);
  101.         }
  102.         else {
  103.             m_Current = m_Entries.end();
  104.         }
  105.     }
  106.     return *this;
  107. }
  108. inline
  109. CTSE_CI& CTSE_CI::operator++ (void)
  110. {
  111.     if ( m_Scope  &&  m_Current != m_Entries.end() ) {
  112.         m_Current++;
  113.     }
  114.     return *this;
  115. }
  116. inline
  117. CTSE_CI::operator bool (void) const
  118. {
  119.     return m_Scope  &&  m_Current != m_Entries.end();
  120. }
  121. inline
  122. const CSeq_entry& CTSE_CI::operator* (void) const
  123. {
  124.     return m_Scope->x_GetTSEFromInfo(*m_Current);
  125. }
  126. inline
  127. const CSeq_entry* CTSE_CI::operator-> (void) const
  128. {
  129.     return &m_Scope->x_GetTSEFromInfo(*m_Current);
  130. }
  131. END_SCOPE(objects)
  132. END_NCBI_SCOPE
  133. /*
  134. * ---------------------------------------------------------------------------
  135. * $Log: tse_ci.hpp,v $
  136. * Revision 1000.0  2003/10/29 20:24:10  gouriano
  137. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.5
  138. *
  139. * Revision 1.5  2003/10/08 17:55:53  vasilche
  140. * Fixed null initialization of CHeapScope.
  141. *
  142. * Revision 1.4  2003/09/30 16:21:59  vasilche
  143. * Updated internal object manager classes to be able to load ID2 data.
  144. * SNP blobs are loaded as ID2 split blobs - readers convert them automatically.
  145. * Scope caches results of requests for data to data loaders.
  146. * Optimized CSeq_id_Handle for gis.
  147. * Optimized bioseq lookup in scope.
  148. * Reduced object allocations in annotation iterators.
  149. * CScope is allowed to be destroyed before other objects using this scope are
  150. * deleted (feature iterators, bioseq handles etc).
  151. * Optimized lookup for matching Seq-ids in CSeq_id_Mapper.
  152. * Added 'adaptive' option to objmgr_demo application.
  153. *
  154. * Revision 1.3  2003/06/02 16:01:36  dicuccio
  155. * Rearranged include/objects/ subtree.  This includes the following shifts:
  156. *     - include/objects/alnmgr --> include/objtools/alnmgr
  157. *     - include/objects/cddalignview --> include/objtools/cddalignview
  158. *     - include/objects/flat --> include/objtools/flat
  159. *     - include/objects/objmgr/ --> include/objmgr/
  160. *     - include/objects/util/ --> include/objmgr/util/
  161. *     - include/objects/validator --> include/objtools/validator
  162. *
  163. * Revision 1.2  2003/04/29 19:51:12  vasilche
  164. * Fixed interaction of Data Loader garbage collector and TSE locking mechanism.
  165. * Made some typedefs more consistent.
  166. *
  167. * Revision 1.1  2003/03/24 21:26:02  grichenk
  168. * Initial revision
  169. *
  170. *
  171. * ===========================================================================
  172. */
  173. #endif  // TSE_CI__HPP