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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: hookdatakey.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:22:31  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.5
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef HOOKDATAKEY__HPP
  10. #define HOOKDATAKEY__HPP
  11. /*  $Id: hookdatakey.hpp,v 1000.0 2003/10/29 17:22: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. *   !!! PUT YOUR DESCRIPTION HERE !!!
  40. */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbiobj.hpp>
  43. #include <vector>
  44. /** @addtogroup HookSupport
  45.  *
  46.  * @{
  47.  */
  48. BEGIN_NCBI_SCOPE
  49. class CHookDataBase;
  50. class NCBI_XSERIAL_EXPORT CLocalHookSetBase
  51. {
  52. public:
  53.     typedef CHookDataBase THookData;
  54.     typedef CObject THook;
  55.     CLocalHookSetBase(void);
  56.     ~CLocalHookSetBase(void);
  57.     void Clear(void);
  58.     typedef pair<THookData*, CRef<THook> > TValue;
  59.     typedef vector<TValue> THooks;
  60. protected:
  61.     void ResetHook(THookData* key);
  62.     void SetHook(THookData* key, THook* hook);
  63.     const THook* GetHook(const THookData* key) const;
  64. private:
  65.     CLocalHookSetBase(const CLocalHookSetBase&);
  66.     CLocalHookSetBase& operator=(const CLocalHookSetBase&);
  67.     friend class CHookDataBase;
  68.     struct Compare
  69.     {
  70.         bool operator()(const TValue& value, const THookData* key) const
  71.             {
  72.                 return value.first < key;
  73.             }
  74.     };
  75.     THooks::iterator x_Find(const THookData* key);
  76.     THooks::const_iterator x_Find(const THookData* key) const;
  77.     bool x_Found(THooks::const_iterator it, const THookData* key) const;
  78.     THooks m_Hooks;
  79. };
  80. template<class Hook>
  81. class CLocalHookSet : public CLocalHookSetBase
  82. {
  83.     typedef CLocalHookSetBase CParent;
  84. public:
  85.     typedef CParent::THookData THookData;
  86.     typedef Hook THook;
  87. protected:
  88.     friend class CHookDataBase;
  89.     void SetHook(THookData* key, THook* hook)
  90.         {
  91.             CParent::SetHook(key, hook);
  92.         }
  93.     THook* GetHook(THookData* key) const
  94.         {
  95.             return static_cast<THook*>(CParent::GetHook(key));
  96.         }
  97. };
  98. END_NCBI_SCOPE
  99. #endif  /* HOOKDATAKEY__HPP */
  100. /* @} */
  101. /* ---------------------------------------------------------------------------
  102. * $Log: hookdatakey.hpp,v $
  103. * Revision 1000.0  2003/10/29 17:22:31  gouriano
  104. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.5
  105. *
  106. * Revision 1.5  2003/07/29 18:59:21  vasilche
  107. * Fixed compilation errors.
  108. *
  109. * Revision 1.4  2003/07/29 18:47:46  vasilche
  110. * Fixed thread safeness of object stream hooks.
  111. *
  112. * Revision 1.3  2003/04/15 14:15:16  siyan
  113. * Added doxygen support
  114. *
  115. * Revision 1.2  2002/12/23 18:38:51  dicuccio
  116. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  117. * Moved all CVS logs to the end.
  118. *
  119. * Revision 1.1  2000/10/13 16:28:30  vasilche
  120. * Reduced header dependency.
  121. * Avoid use of templates with virtual methods.
  122. * Reduced amount of different maps used.
  123. * All this lead to smaller compiled code size (libraries and programs).
  124. *
  125. * ===========================================================================
  126. */