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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: variant.inl,v $
  4.  * PRODUCTION Revision 1000.1  2003/12/02 20:34:09  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #if defined(VARIANT__HPP)  &&  !defined(VARIANT__INL)
  10. #define VARIANT__INL
  11. /*  $Id: variant.inl,v 1000.1 2003/12/02 20:34:09 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. inline
  42. const CChoiceTypeInfo* CVariantInfo::GetChoiceType(void) const
  43. {
  44.     return m_ChoiceType;
  45. }
  46. inline
  47. CVariantInfo::EVariantType CVariantInfo::GetVariantType(void) const
  48. {
  49.     return m_VariantType;
  50. }
  51. inline
  52. CVariantInfo* CVariantInfo::SetNoPrefix(void)
  53. {
  54.     GetId().SetNoPrefix();
  55.     return this;
  56. }
  57. inline
  58. CVariantInfo* CVariantInfo::SetNotag(void)
  59. {
  60.     GetId().SetNotag();
  61.     return this;
  62. }
  63. inline
  64. bool CVariantInfo::IsInline(void) const
  65. {
  66.     return GetVariantType() == eInlineVariant;
  67. }
  68. inline
  69. bool CVariantInfo::IsNonObjectPointer(void) const
  70. {
  71.     return GetVariantType() == eNonObjectPointerVariant;
  72. }
  73. inline
  74. bool CVariantInfo::IsObjectPointer(void) const
  75. {
  76.     return GetVariantType() == eObjectPointerVariant;
  77. }
  78. inline
  79. bool CVariantInfo::IsSubClass(void) const
  80. {
  81.     return GetVariantType() == eSubClassVariant;
  82. }
  83. inline
  84. bool CVariantInfo::IsNotPointer(void) const
  85. {
  86.     return (GetVariantType() & ePointerFlag) == 0;
  87. }
  88. inline
  89. bool CVariantInfo::IsPointer(void) const
  90. {
  91.     return (GetVariantType() & ePointerFlag) != 0;
  92. }
  93. inline
  94. bool CVariantInfo::IsNotObject(void) const
  95. {
  96.     return (GetVariantType() & eObjectFlag) == 0;
  97. }
  98. inline
  99. bool CVariantInfo::IsObject(void) const
  100. {
  101.     return (GetVariantType() & eObjectFlag) != 0;
  102. }
  103. inline
  104. bool CVariantInfo::CanBeDelayed(void) const
  105. {
  106.     return m_DelayOffset != eNoOffset;
  107. }
  108. inline
  109. CDelayBuffer& CVariantInfo::GetDelayBuffer(TObjectPtr object) const
  110. {
  111.     return CTypeConverter<CDelayBuffer>::Get(CRawPointer::Add(object, m_DelayOffset));
  112. }
  113. inline
  114. const CDelayBuffer& CVariantInfo::GetDelayBuffer(TConstObjectPtr object) const
  115. {
  116.     return CTypeConverter<const CDelayBuffer>::Get(CRawPointer::Add(object, m_DelayOffset));
  117. }
  118. inline
  119. TConstObjectPtr CVariantInfo::GetVariantPtr(TConstObjectPtr choicePtr) const
  120. {
  121.     return m_GetConstFunction(this, choicePtr);
  122. }
  123. inline
  124. TObjectPtr CVariantInfo::GetVariantPtr(TObjectPtr choicePtr) const
  125. {
  126.     return m_GetFunction(this, choicePtr);
  127. }
  128. inline
  129. void CVariantInfo::ReadVariant(CObjectIStream& stream,
  130.                                TObjectPtr choicePtr) const
  131. {
  132.     m_ReadHookData.GetCurrentFunction()(stream, this, choicePtr);
  133. }
  134. inline
  135. void CVariantInfo::WriteVariant(CObjectOStream& stream,
  136.                                 TConstObjectPtr choicePtr) const
  137. {
  138.     m_WriteHookData.GetCurrentFunction()(stream, this, choicePtr);
  139. }
  140. inline
  141. void CVariantInfo::SkipVariant(CObjectIStream& stream) const
  142. {
  143.     m_SkipHookData.GetCurrentFunction()(stream, this);
  144. }
  145. inline
  146. void CVariantInfo::CopyVariant(CObjectStreamCopier& stream) const
  147. {
  148.     m_CopyHookData.GetCurrentFunction()(stream, this);
  149. }
  150. inline
  151. void CVariantInfo::DefaultReadVariant(CObjectIStream& stream,
  152.                                       TObjectPtr choicePtr) const
  153. {
  154.     m_ReadHookData.GetDefaultFunction()(stream, this, choicePtr);
  155. }
  156. inline
  157. void CVariantInfo::DefaultWriteVariant(CObjectOStream& stream,
  158.                                 TConstObjectPtr choicePtr) const
  159. {
  160.     m_WriteHookData.GetDefaultFunction()(stream, this, choicePtr);
  161. }
  162. inline
  163. void CVariantInfo::DefaultSkipVariant(CObjectIStream& stream) const
  164. {
  165.     m_SkipHookData.GetDefaultFunction()(stream, this);
  166. }
  167. inline
  168. void CVariantInfo::DefaultCopyVariant(CObjectStreamCopier& stream) const
  169. {
  170.     m_CopyHookData.GetDefaultFunction()(stream, this);
  171. }
  172. #endif /* def VARIANT__HPP  &&  ndef VARIANT__INL */
  173. /* ---------------------------------------------------------------------------
  174. * $Log: variant.inl,v $
  175. * Revision 1000.1  2003/12/02 20:34:09  gouriano
  176. * PRODUCTION: UPGRADED [ORIGINAL] Dev-tree R1.12
  177. *
  178. * Revision 1.12  2003/12/01 19:04:23  grichenk
  179. * Moved Add and Sub from serialutil to ncbimisc, made them methods
  180. * of CRawPointer class.
  181. *
  182. * Revision 1.11  2003/07/29 18:47:47  vasilche
  183. * Fixed thread safeness of object stream hooks.
  184. *
  185. * Revision 1.10  2002/12/23 18:38:52  dicuccio
  186. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  187. * Moved all CVS logs to the end.
  188. *
  189. * Revision 1.9  2002/11/20 21:18:21  gouriano
  190. * corrected SetNotag method
  191. *
  192. * Revision 1.8  2002/11/19 19:45:55  gouriano
  193. * added SetNotag method
  194. *
  195. * Revision 1.7  2002/10/15 13:39:06  gouriano
  196. * added "noprefix" flag
  197. *
  198. * Revision 1.6  2002/09/09 18:14:00  grichenk
  199. * Added CObjectHookGuard class.
  200. * Added methods to be used by hooks for data
  201. * reading and skipping.
  202. *
  203. * Revision 1.5  2000/10/13 20:22:47  vasilche
  204. * Fixed warnings on 64 bit compilers.
  205. * Fixed missing typename in templates.
  206. *
  207. * Revision 1.4  2000/09/29 16:18:15  vasilche
  208. * Fixed binary format encoding/decoding on 64 bit compulers.
  209. * Implemented CWeakMap<> for automatic cleaning map entries.
  210. * Added cleaning local hooks via CWeakMap<>.
  211. * Renamed ReadTypeName -> ReadFileHeader, ENoTypeName -> ENoFileHeader.
  212. * Added some user interface methods to CObjectIStream, CObjectOStream and
  213. * CObjectStreamCopier.
  214. *
  215. * Revision 1.3  2000/09/26 19:24:54  vasilche
  216. * Added user interface for setting read/write/copy hooks.
  217. *
  218. * Revision 1.2  2000/09/26 17:38:08  vasilche
  219. * Fixed incomplete choiceptr implementation.
  220. * Removed temporary comments.
  221. *
  222. * Revision 1.1  2000/09/18 20:00:12  vasilche
  223. * Separated CVariantInfo and CMemberInfo.
  224. * Implemented copy hooks.
  225. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  226. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  227. *
  228. * ===========================================================================
  229. */