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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: serial.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:29:30  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.46
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef SERIAL__HPP
  10. #define SERIAL__HPP
  11. /*  $Id: serial.hpp,v 1000.0 2003/10/29 17:29:30 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. *   Serialization classes.
  40. */
  41. #include <serial/typeref.hpp>
  42. /** @addtogroup UserCodeSupport
  43.  *
  44.  * @{
  45.  */
  46. BEGIN_NCBI_SCOPE
  47. class CObjectOStream;
  48. class CObjectIStream;
  49. TTypeInfo CPointerTypeInfoGetTypeInfo(TTypeInfo type);
  50. // define type info getter for classes
  51. template<class Class>
  52. inline TTypeInfoGetter GetTypeInfoGetter(const Class* object);
  53. // define type info getter for pointers
  54. template<typename T>
  55. inline
  56. CTypeRef GetPtrTypeRef(const T* const* object)
  57. {
  58.     const T* p = 0;
  59.     return CTypeRef(&CPointerTypeInfoGetTypeInfo, GetTypeInfoGetter(p));
  60. }
  61. // define type info getter for user classes
  62. template<class Class>
  63. inline
  64. TTypeInfoGetter GetTypeInfoGetter(const Class* )
  65. {
  66.     return &Class::GetTypeInfo;
  67. }
  68. template<typename T>
  69. inline
  70. TTypeInfoGetter GetTypeRef(const T* object)
  71. {
  72.     return GetTypeInfoGetter(object);
  73. }
  74. NCBI_XSERIAL_EXPORT
  75. void Write(CObjectOStream& out, TConstObjectPtr object, const CTypeRef& type);
  76. NCBI_XSERIAL_EXPORT
  77. void Read(CObjectIStream& in, TObjectPtr object, const CTypeRef& type);
  78. // reader/writer
  79. template<typename T>
  80. inline
  81. CObjectOStream& Write(CObjectOStream& out, const T& object)
  82. {
  83.     Write(out, &object, GetTypeRef(&object));
  84.     return out;
  85. }
  86. template<typename T>
  87. inline
  88. CObjectIStream& Read(CObjectIStream& in, T& object)
  89. {
  90.     Read(in, &object, GetTypeRef(&object));
  91.     return in;
  92. }
  93. template<typename T>
  94. inline
  95. CObjectOStream& operator<<(CObjectOStream& out, const T& object)
  96. {
  97.     return Write(out, object);
  98. }
  99. template<typename T>
  100. inline
  101. CObjectIStream& operator>>(CObjectIStream& in, T& object)
  102. {
  103.     return Read(in, object);
  104. }
  105. /* @} */
  106. //#include <serial/serial.inl>
  107. END_NCBI_SCOPE
  108. #endif  /* SERIAL__HPP */
  109. /* ---------------------------------------------------------------------------
  110. * $Log: serial.hpp,v $
  111. * Revision 1000.0  2003/10/29 17:29:30  gouriano
  112. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.46
  113. *
  114. * Revision 1.46  2003/04/15 16:18:44  siyan
  115. * Added doxygen support
  116. *
  117. * Revision 1.45  2002/12/23 18:38:51  dicuccio
  118. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  119. * Moved all CVS logs to the end.
  120. *
  121. * Revision 1.44  2002/08/26 18:32:28  grichenk
  122. * Added Get/SetAutoSeparator() to CObjectOStream to control
  123. * output of separators.
  124. *
  125. * Revision 1.43  2002/08/23 16:50:39  grichenk
  126. * Write separator after every object
  127. *
  128. * Revision 1.42  2001/05/17 14:59:47  lavr
  129. * Typos corrected
  130. *
  131. * Revision 1.41  1999/12/17 19:04:53  vasilche
  132. * Simplified generation of GetTypeInfo methods.
  133. *
  134. * Revision 1.40  1999/11/22 21:04:33  vasilche
  135. * Cleaned main interface headers. Now generated files should include serial/serialimpl.hpp and user code should include serial/serial.hpp which became might lighter.
  136. *
  137. * Revision 1.39  1999/11/19 15:47:20  vasilche
  138. * Added specification of several templates with <char*> and <const char*> to
  139. * avoid warnings on MAC
  140. *
  141. * Revision 1.38  1999/11/16 15:40:14  vasilche
  142. * Added plain pointer choice.
  143. *
  144. * Revision 1.37  1999/10/25 19:07:13  vasilche
  145. * Fixed coredump on non initialized choices.
  146. * Fixed compilation warning.
  147. *
  148. * Revision 1.36  1999/10/19 13:21:59  vasilche
  149. * Avoid macros names conflict.
  150. *
  151. * Revision 1.35  1999/10/18 20:11:16  vasilche
  152. * Enum values now have long type.
  153. * Fixed template generation for enums.
  154. *
  155. * Revision 1.34  1999/10/15 16:37:47  vasilche
  156. * Added namespace specifiers.
  157. *
  158. * Revision 1.33  1999/10/15 13:58:43  vasilche
  159. * Added namespace specifiers in definition of all macros.
  160. *
  161. * Revision 1.32  1999/10/04 19:39:45  vasilche
  162. * Fixed bug in CObjectOStreamBinary.
  163. * Start using of BSRead/BSWrite.
  164. * Added ASNCALL macro for prototypes of old ASN.1 functions.
  165. *
  166. * Revision 1.31  1999/10/04 16:22:10  vasilche
  167. * Fixed bug with old ASN.1 structures.
  168. *
  169. * Revision 1.30  1999/09/24 19:01:17  vasilche
  170. * Removed dependency on NCBI toolkit.
  171. *
  172. * Revision 1.29  1999/09/14 18:54:05  vasilche
  173. * Fixed bugs detected by gcc & egcs.
  174. * Removed unneeded includes.
  175. *
  176. * Revision 1.28  1999/09/08 20:31:18  vasilche
  177. * Added BEGIN_CLASS_INFO3 macro
  178. *
  179. * Revision 1.27  1999/09/07 20:57:44  vasilche
  180. * Forgot to add some files.
  181. *
  182. * Revision 1.26  1999/09/01 17:38:02  vasilche
  183. * Fixed vector<char> implementation.
  184. * Added explicit naming of class info.
  185. * Moved IMPLICIT attribute from member info to class info.
  186. *
  187. * Revision 1.25  1999/08/31 17:50:04  vasilche
  188. * Implemented several macros for specific data types.
  189. * Added implicit members.
  190. * Added multimap and set.
  191. *
  192. * Revision 1.24  1999/08/13 15:53:45  vasilche
  193. * C++ analog of asntool: datatool
  194. *
  195. * Revision 1.23  1999/07/21 14:20:01  vasilche
  196. * Added serialization of bool.
  197. *
  198. * Revision 1.22  1999/07/20 18:22:56  vasilche
  199. * Added interface to old ASN.1 routines.
  200. * Added fixed choice of subclasses to use for pointers.
  201. *
  202. * Revision 1.21  1999/07/19 15:50:19  vasilche
  203. * Added interface to old ASN.1 routines.
  204. * Added naming of key/value in STL map.
  205. *
  206. * Revision 1.20  1999/07/15 16:54:43  vasilche
  207. * Implemented vector<X> & vector<char> as special case.
  208. *
  209. * Revision 1.19  1999/07/14 18:58:04  vasilche
  210. * Fixed ASN.1 types/field naming.
  211. *
  212. * Revision 1.18  1999/07/13 20:54:05  vasilche
  213. * Fixed minor bugs.
  214. *
  215. * Revision 1.17  1999/07/13 20:18:07  vasilche
  216. * Changed types naming.
  217. *
  218. * Revision 1.16  1999/07/09 16:32:54  vasilche
  219. * Added OCTET STRING write/read.
  220. *
  221. * Revision 1.15  1999/07/07 18:18:32  vasilche
  222. * Fixed some bugs found by MS VC++
  223. *
  224. * Revision 1.14  1999/06/30 18:54:54  vasilche
  225. * Fixed some errors under MSVS
  226. *
  227. * Revision 1.13  1999/06/30 16:04:35  vasilche
  228. * Added support for old ASN.1 structures.
  229. *
  230. * Revision 1.12  1999/06/24 14:44:43  vasilche
  231. * Added binary ASN.1 output.
  232. *
  233. * Revision 1.11  1999/06/17 18:38:49  vasilche
  234. * Fixed order of members in class.
  235. * Added checks for overlapped members.
  236. *
  237. * Revision 1.10  1999/06/16 20:58:04  vasilche
  238. * Added GetPtrTypeRef to avoid conflict in MSVS.
  239. *
  240. * Revision 1.9  1999/06/15 16:20:06  vasilche
  241. * Added ASN.1 object output stream.
  242. *
  243. * Revision 1.8  1999/06/11 19:15:49  vasilche
  244. * Working binary serialization and deserialization of first test object.
  245. *
  246. * Revision 1.7  1999/06/09 19:58:31  vasilche
  247. * Added specialized templates for compilation in MS VS
  248. *
  249. * Revision 1.6  1999/06/09 18:38:58  vasilche
  250. * Modified templates to work on Sun.
  251. *
  252. * Revision 1.5  1999/06/07 20:42:58  vasilche
  253. * Fixed compilation under MS VS
  254. *
  255. * Revision 1.4  1999/06/07 19:30:20  vasilche
  256. * More bug fixes
  257. *
  258. * Revision 1.3  1999/06/04 20:51:37  vasilche
  259. * First compilable version of serialization.
  260. *
  261. * Revision 1.2  1999/05/19 19:56:28  vasilche
  262. * Commit just in case.
  263. *
  264. * Revision 1.1  1999/03/25 19:11:58  vasilche
  265. * Beginning of serialization library.
  266. *
  267. * ===========================================================================
  268. */