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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: choiceptr.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:20:38  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.25
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CHOICEPTR__HPP
  10. #define CHOICEPTR__HPP
  11. /*  $Id: choiceptr.hpp,v 1000.0 2003/10/29 17:20:38 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 <serial/choice.hpp>
  43. #include <serial/stdtypes.hpp>
  44. #include <serial/stdtypeinfo.hpp>
  45. #include <map>
  46. /** @addtogroup TypeInfoCPP
  47.  *
  48.  * @{
  49.  */
  50. BEGIN_NCBI_SCOPE
  51. class CPointerTypeInfo;
  52. // CTypeInfo for pointers which behave like CHOICE
  53. // (select one of limited choices)
  54. class NCBI_XSERIAL_EXPORT CChoicePointerTypeInfo : public CChoiceTypeInfo
  55. {
  56.     typedef CChoiceTypeInfo CParent;
  57. public:
  58.     typedef map<const type_info*, TMemberIndex, CLessTypeInfo> TVariantsByType;
  59.     CChoicePointerTypeInfo(TTypeInfo pointerType);
  60.     const CPointerTypeInfo* GetPointerTypeInfo(void) const
  61.         {
  62.             return m_PointerTypeInfo;
  63.         }
  64.     static TTypeInfo GetTypeInfo(TTypeInfo base);
  65.     static CTypeInfo* CreateTypeInfo(TTypeInfo base);
  66. protected:
  67.     static TMemberIndex GetPtrIndex(const CChoiceTypeInfo* choiceType,
  68.                                     TConstObjectPtr choicePtr);
  69.     static void SetPtrIndex(const CChoiceTypeInfo* choiceType,
  70.                             TObjectPtr choicePtr,
  71.                             TMemberIndex index);
  72.     static void ResetPtrIndex(const CChoiceTypeInfo* choiceType,
  73.                               TObjectPtr choicePtr);
  74. private:
  75.     void SetPointerType(TTypeInfo pointerType);
  76.     const CPointerTypeInfo* m_PointerTypeInfo;
  77.     TVariantsByType m_VariantsByType;
  78.     TMemberIndex m_NullPointerIndex;
  79. };
  80. class NCBI_XSERIAL_EXPORT CNullTypeInfo : public CVoidTypeInfo
  81. {
  82.     typedef CVoidTypeInfo CParent;
  83. public:
  84.     CNullTypeInfo(void);
  85.     static TTypeInfo GetTypeInfo(void);
  86. };
  87. //#include <serial/choiceptr.inl>
  88. END_NCBI_SCOPE
  89. #endif  /* CHOICEPTR__HPP */
  90. /* @} */
  91. /* ---------------------------------------------------------------------------
  92. * $Log: choiceptr.hpp,v $
  93. * Revision 1000.0  2003/10/29 17:20:38  gouriano
  94. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.25
  95. *
  96. * Revision 1.25  2003/04/15 14:14:55  siyan
  97. * Added doxygen support
  98. *
  99. * Revision 1.24  2002/12/23 18:38:50  dicuccio
  100. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  101. * Moved all CVS logs to the end.
  102. *
  103. * Revision 1.23  2000/11/07 17:25:11  vasilche
  104. * Fixed encoding of XML:
  105. *     removed unnecessary apostrophes in OCTET STRING
  106. *     removed unnecessary content in NULL
  107. * Added module names to CTypeInfo and CEnumeratedTypeValues
  108. *
  109. * Revision 1.22  2000/10/13 16:28:29  vasilche
  110. * Reduced header dependency.
  111. * Avoid use of templates with virtual methods.
  112. * Reduced amount of different maps used.
  113. * All this lead to smaller compiled code size (libraries and programs).
  114. *
  115. * Revision 1.21  2000/09/26 17:38:07  vasilche
  116. * Fixed incomplete choiceptr implementation.
  117. * Removed temporary comments.
  118. *
  119. * Revision 1.20  2000/09/18 19:59:59  vasilche
  120. * Separated CVariantInfo and CMemberInfo.
  121. * Implemented copy hooks.
  122. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  123. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  124. *
  125. * Revision 1.19  2000/09/01 13:15:57  vasilche
  126. * Implemented class/container/choice iterators.
  127. * Implemented CObjectStreamCopier for copying data without loading into memory.
  128. *
  129. * Revision 1.18  2000/08/15 19:44:38  vasilche
  130. * Added Read/Write hooks:
  131. * CReadObjectHook/CWriteObjectHook for objects of specified type.
  132. * CReadClassMemberHook/CWriteClassMemberHook for specified members.
  133. * CReadChoiceVariantHook/CWriteChoiceVariant for specified choice variants.
  134. * CReadContainerElementHook/CWriteContainerElementsHook for containers.
  135. *
  136. * Revision 1.17  2000/07/03 18:42:32  vasilche
  137. * Added interface to typeinfo via CObjectInfo and CConstObjectInfo.
  138. * Reduced header dependency.
  139. *
  140. * Revision 1.16  2000/06/16 16:31:03  vasilche
  141. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  142. *
  143. * Revision 1.15  2000/06/01 19:06:55  vasilche
  144. * Added parsing of XML data.
  145. *
  146. * Revision 1.14  2000/05/24 20:08:11  vasilche
  147. * Implemented XML dump.
  148. *
  149. * Revision 1.13  2000/03/29 15:55:18  vasilche
  150. * Added two versions of object info - CObjectInfo and CConstObjectInfo.
  151. * Added generic iterators by class -
  152. *  CTypeIterator<class>, CTypeConstIterator<class>,
  153. *  CStdTypeIterator<type>, CStdTypeConstIterator<type>,
  154. *  CObjectsIterator and CObjectsConstIterator.
  155. *
  156. * Revision 1.12  2000/03/07 14:05:28  vasilche
  157. * Added stream buffering to ASN.1 binary input.
  158. * Optimized class loading/storing.
  159. * Fixed bugs in processing OPTIONAL fields.
  160. *
  161. * Revision 1.11  2000/02/17 20:02:27  vasilche
  162. * Added some standard serialization exceptions.
  163. * Optimized text/binary ASN.1 reading.
  164. * Fixed wrong encoding of StringStore in ASN.1 binary format.
  165. * Optimized logic of object collection.
  166. *
  167. * Revision 1.10  2000/01/05 19:43:43  vasilche
  168. * Fixed error messages when reading from ASN.1 binary file.
  169. * Fixed storing of integers with enumerated values in ASN.1 binary file.
  170. * Added TAG support to key/value of map.
  171. * Added support of NULL variant in CHOICE.
  172. *
  173. * Revision 1.9  1999/12/17 19:04:52  vasilche
  174. * Simplified generation of GetTypeInfo methods.
  175. *
  176. * Revision 1.8  1999/12/01 17:36:20  vasilche
  177. * Fixed CHOICE processing.
  178. *
  179. * Revision 1.7  1999/11/18 20:16:12  vakatov
  180. * Included <serial/typeref.hpp> to fix for the CodeWarrior(MAC) C++ compiler
  181. *
  182. * Revision 1.6  1999/11/16 15:40:13  vasilche
  183. * Added plain pointer choice.
  184. *
  185. * Revision 1.5  1999/10/28 15:37:37  vasilche
  186. * Fixed null choice pointers handling.
  187. * Cleaned enumertion interface.
  188. *
  189. * Revision 1.4  1999/10/25 19:07:12  vasilche
  190. * Fixed coredump on non initialized choices.
  191. * Fixed compilation warning.
  192. *
  193. * Revision 1.3  1999/09/22 20:11:48  vasilche
  194. * Modified for compilation on IRIX native c++ compiler.
  195. *
  196. * Revision 1.2  1999/09/14 18:54:02  vasilche
  197. * Fixed bugs detected by gcc & egcs.
  198. * Removed unneeded includes.
  199. *
  200. * Revision 1.1  1999/09/07 20:57:43  vasilche
  201. * Forgot to add some files.
  202. *
  203. * ===========================================================================
  204. */