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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: prefetch.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:21:29  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef PREFETCH__HPP
  10. #define PREFETCH__HPP
  11. /*  $Id: prefetch.hpp,v 1000.2 2004/06/01 19:21:29 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. *   Prefetch token
  40. *
  41. */
  42. #include <corelib/ncbistd.hpp>
  43. #include <corelib/ncbiobj.hpp>
  44. #include <objmgr/impl/prefetch_impl.hpp>
  45. #include <objmgr/bioseq_handle.hpp>
  46. #include <objmgr/scope.hpp>
  47. #include <objmgr/seq_id_handle.hpp>
  48. #include <objects/seqloc/Seq_id.hpp>
  49. BEGIN_NCBI_SCOPE
  50. BEGIN_SCOPE(objects)
  51. class CPrefetchToken
  52. {
  53. public:
  54.     typedef CPrefetchToken_Impl::TIds TIds;
  55.     enum ENon_locking_prefetch {
  56.         eNon_locking_prefetch,
  57.     };
  58.     CPrefetchToken(void);
  59.     // Find the first loader in the scope, request prefetching from
  60.     // this loader. Scope may be destroyed after creating token, but
  61.     // the scope used in NextBioseqHandle() should contain the same
  62.     // loader. Depth limits number of TSEs to be prefetched.
  63.     CPrefetchToken(CScope& scope, const TIds& ids, unsigned int depth = 2);
  64.     // Do not lock prefetched TSEs, prefetch depth is ignored.
  65.     CPrefetchToken(CScope& scope, const TIds& ids, ENon_locking_prefetch);
  66.     ~CPrefetchToken(void);
  67.     CPrefetchToken(const CPrefetchToken& token);
  68.     CPrefetchToken& operator =(const CPrefetchToken& token);
  69.     operator bool(void) const;
  70.     // Get bioseq handle and move to the next requested id
  71.     CBioseq_Handle NextBioseqHandle(CScope& scope);
  72. private:
  73.     CRef<CPrefetchToken_Impl> m_Impl;
  74. };
  75. inline
  76. CPrefetchToken::CPrefetchToken(void)
  77. {
  78.     return;
  79. }
  80. inline
  81. CPrefetchToken::~CPrefetchToken(void)
  82. {
  83.     if (m_Impl) {
  84.         m_Impl->RemoveTokenReference();
  85.     }
  86.     return;
  87. }
  88. inline
  89. CPrefetchToken::CPrefetchToken(CScope& scope,
  90.                                const TIds& ids,
  91.                                unsigned int depth)
  92.     : m_Impl(new CPrefetchToken_Impl(ids, depth))
  93. {
  94.     m_Impl->AddTokenReference();
  95.     m_Impl->x_InitPrefetch(scope);
  96.     return;
  97. }
  98. inline
  99. CPrefetchToken::CPrefetchToken(CScope& scope,
  100.                                const TIds& ids,
  101.                                ENon_locking_prefetch)
  102.     : m_Impl(new CPrefetchToken_Impl(ids, 2))
  103. {
  104.     m_Impl->AddTokenReference();
  105.     m_Impl->x_SetNon_locking();
  106.     m_Impl->x_InitPrefetch(scope);
  107.     return;
  108. }
  109. inline
  110. CPrefetchToken::CPrefetchToken(const CPrefetchToken& token)
  111. {
  112.     *this = token;
  113. }
  114. inline
  115. CPrefetchToken& CPrefetchToken::operator =(const CPrefetchToken& token)
  116. {
  117.     if (this != &token) {
  118.         if (m_Impl) {
  119.             m_Impl->RemoveTokenReference();
  120.         }
  121.         m_Impl = token.m_Impl;
  122.         if (m_Impl) {
  123.             m_Impl->AddTokenReference();
  124.         }
  125.     }
  126.     return *this;
  127. }
  128. inline
  129. CBioseq_Handle CPrefetchToken::NextBioseqHandle(CScope& scope)
  130. {
  131.     _ASSERT(bool(*this));
  132.     return m_Impl->NextBioseqHandle(scope);
  133. }
  134. inline
  135. CPrefetchToken::operator bool(void) const
  136. {
  137.     return bool(m_Impl)  &&  bool(*m_Impl);
  138. }
  139. END_SCOPE(objects)
  140. END_NCBI_SCOPE
  141. /*
  142. * ---------------------------------------------------------------------------
  143. * $Log: prefetch.hpp,v $
  144. * Revision 1000.2  2004/06/01 19:21:29  gouriano
  145. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4
  146. *
  147. * Revision 1.4  2004/05/07 13:47:34  grichenk
  148. * Removed single-id constructors.
  149. * Added non-locking prefetch mode.
  150. *
  151. * Revision 1.3  2004/04/21 15:34:28  gorelenk
  152. * Removed export prefix from inline class CPrefetchToken.
  153. *
  154. * Revision 1.2  2004/04/19 14:52:29  grichenk
  155. * Added prefetch depth limit, redesigned prefetch queue.
  156. *
  157. * Revision 1.1  2004/04/16 13:30:34  grichenk
  158. * Initial revision
  159. *
  160. *
  161. * ===========================================================================
  162. */
  163. #endif  // PREFETCH__HPP