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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: typeref.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:32:52  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef TYPEREF__HPP
  10. #define TYPEREF__HPP
  11. /*  $Id: typeref.hpp,v 1000.0 2003/10/29 17:32:52 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 <serial/serialdef.hpp>
  42. #include <corelib/ncbicntr.hpp>
  43. /** @addtogroup GenClassSupport
  44.  *
  45.  * @{
  46.  */
  47. BEGIN_NCBI_SCOPE
  48. class CTypeRef;
  49. class NCBI_XSERIAL_EXPORT CTypeInfoSource
  50. {
  51. public:
  52.     CTypeInfoSource(void);
  53.     virtual ~CTypeInfoSource(void);
  54.     
  55.     virtual TTypeInfo GetTypeInfo(void) = 0;
  56. protected:
  57.     CAtomicCounter m_RefCount;
  58.     friend class CTypeRef;
  59. private:
  60.     CTypeInfoSource(const CTypeInfoSource& );
  61.     CTypeInfoSource& operator=(const CTypeInfoSource& );
  62. };
  63. class NCBI_XSERIAL_EXPORT CTypeRef
  64. {
  65. public:
  66.     CTypeRef(void);
  67.     CTypeRef(TTypeInfo typeInfo);
  68.     typedef TTypeInfo (*TGetProc)(void);
  69.     CTypeRef(TGetProc getProc);
  70.     typedef TTypeInfo (*TGet1Proc)(TTypeInfo arg);
  71.     CTypeRef(TGet1Proc getter, const CTypeRef& arg);
  72.     typedef TTypeInfo (*TGet2Proc)(TTypeInfo arg1, TTypeInfo arg2);
  73.     CTypeRef(TGet2Proc getter, const CTypeRef& arg1, const CTypeRef& arg2);
  74.     CTypeRef(TGet2Proc getter,
  75.              const CTypeRef& arg1,
  76.              TGet1Proc getter2, const CTypeRef& arg2);
  77.     CTypeRef(TGet2Proc getter,
  78.              TGet1Proc getter1, const CTypeRef& arg1,
  79.              const CTypeRef& arg2);
  80.     CTypeRef(TGet2Proc getter,
  81.              TGet1Proc getter1, const CTypeRef& arg1,
  82.              TGet1Proc getter2, const CTypeRef& arg2);
  83.     CTypeRef(CTypeInfoSource* source);
  84.     CTypeRef(const CTypeRef& typeRef);
  85.     CTypeRef& operator=(const CTypeRef& typeRef);
  86.     ~CTypeRef(void);
  87.     TTypeInfo Get(void) const;
  88.     operator bool(void) const;
  89.     bool operator!(void) const;
  90. private:
  91.     void Unref(void);
  92.     void Assign(const CTypeRef& typeRef);
  93.     
  94.     static TTypeInfo sx_GetAbort(const CTypeRef& typeRef);
  95.     static TTypeInfo sx_GetReturn(const CTypeRef& typeRef);
  96.     static TTypeInfo sx_GetProc(const CTypeRef& typeRef);
  97.     static TTypeInfo sx_GetResolve(const CTypeRef& typeRef);
  98.     TTypeInfo (*m_Getter)(const CTypeRef& );
  99.     TTypeInfo m_ReturnData;
  100.     union {
  101.         TGetProc m_GetProcData;
  102.         CTypeInfoSource* m_ResolveData;
  103.     };
  104. };
  105. class NCBI_XSERIAL_EXPORT CGet1TypeInfoSource : public CTypeInfoSource
  106. {
  107. public:
  108.     CGet1TypeInfoSource(CTypeRef::TGet1Proc getter, const CTypeRef& arg);
  109.     ~CGet1TypeInfoSource(void);
  110.     virtual TTypeInfo GetTypeInfo(void);
  111. private:
  112.     CTypeRef::TGet1Proc m_Getter;
  113.     CTypeRef m_Argument;
  114. };
  115. class NCBI_XSERIAL_EXPORT CGet2TypeInfoSource : public CTypeInfoSource
  116. {
  117. public:
  118.     CGet2TypeInfoSource(CTypeRef::TGet2Proc getter,
  119.                         const CTypeRef& arg1, const CTypeRef& arg2);
  120.     ~CGet2TypeInfoSource(void);
  121.     virtual TTypeInfo GetTypeInfo(void);
  122. private:
  123.     CTypeRef::TGet2Proc m_Getter;
  124.     CTypeRef m_Argument1;
  125.     CTypeRef m_Argument2;
  126. };
  127. /* @} */
  128. #include <serial/typeref.inl>
  129. END_NCBI_SCOPE
  130. #endif  /* TYPEREF__HPP */
  131. /* ---------------------------------------------------------------------------
  132. * $Log: typeref.hpp,v $
  133. * Revision 1000.0  2003/10/29 17:32:52  gouriano
  134. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.15
  135. *
  136. * Revision 1.15  2003/04/15 16:19:13  siyan
  137. * Added doxygen support
  138. *
  139. * Revision 1.14  2003/02/12 16:43:47  vasilche
  140. * Use CTypeRef instead of TTypeInfo.
  141. *
  142. * Revision 1.13  2003/02/12 15:06:21  vasilche
  143. * Added missing CTypeRef constructors for map/multimap.
  144. *
  145. * Revision 1.12  2002/12/23 18:38:52  dicuccio
  146. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  147. * Moved all CVS logs to the end.
  148. *
  149. * Revision 1.11  2002/08/30 16:18:25  vasilche
  150. * Avoid MT lock in CTypeRef::Get()
  151. *
  152. * Revision 1.10  2002/08/13 13:56:04  grichenk
  153. * Improved MT-safety in CTypeInfo and CTypeRef
  154. *
  155. * Revision 1.9  2000/09/26 17:38:08  vasilche
  156. * Fixed incomplete choiceptr implementation.
  157. * Removed temporary comments.
  158. *
  159. * Revision 1.8  2000/05/24 20:08:16  vasilche
  160. * Implemented XML dump.
  161. *
  162. * Revision 1.7  1999/12/17 19:04:55  vasilche
  163. * Simplified generation of GetTypeInfo methods.
  164. *
  165. * Revision 1.6  1999/09/14 18:54:07  vasilche
  166. * Fixed bugs detected by gcc & egcs.
  167. * Removed unneeded includes.
  168. *
  169. * Revision 1.5  1999/08/13 15:53:46  vasilche
  170. * C++ analog of asntool: datatool
  171. *
  172. * Revision 1.4  1999/07/13 20:18:12  vasilche
  173. * Changed types naming.
  174. *
  175. * Revision 1.3  1999/06/24 14:44:47  vasilche
  176. * Added binary ASN.1 output.
  177. *
  178. * Revision 1.2  1999/06/09 18:39:01  vasilche
  179. * Modified templates to work on Sun.
  180. *
  181. * Revision 1.1  1999/06/04 20:51:41  vasilche
  182. * First compilable version of serialization.
  183. *
  184. * ===========================================================================
  185. */