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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: serialdef.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/04/12 17:15:42  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.29
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef SERIALDEF__HPP
  10. #define SERIALDEF__HPP
  11. /*  $Id: serialdef.hpp,v 1000.3 2004/04/12 17:15:42 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. /** @addtogroup SerialDef
  43.  *
  44.  * @{
  45.  */
  46. BEGIN_NCBI_SCOPE
  47. // forward declaration of two main classes
  48. class CTypeRef;
  49. class CTypeInfo;
  50. class CEnumeratedTypeValues;
  51. class CObjectIStream;
  52. class CObjectOStream;
  53. class CObjectStreamCopier;
  54. // typedef for object references (constant and nonconstant)
  55. typedef void* TObjectPtr;
  56. typedef const void* TConstObjectPtr;
  57. // shortcut typedef: almost everywhere in code we have pointer to const CTypeInfo
  58. typedef const CTypeInfo* TTypeInfo;
  59. typedef TTypeInfo (*TTypeInfoGetter)(void);
  60. typedef TTypeInfo (*TTypeInfoGetter1)(TTypeInfo);
  61. typedef TTypeInfo (*TTypeInfoGetter2)(TTypeInfo, TTypeInfo);
  62. typedef CTypeInfo* (*TTypeInfoCreator)(void);
  63. typedef CTypeInfo* (*TTypeInfoCreator1)(TTypeInfo);
  64. typedef CTypeInfo* (*TTypeInfoCreator2)(TTypeInfo, TTypeInfo);
  65. enum ESerialDataFormat {
  66.     eSerial_None         = 0,
  67.     eSerial_AsnText      = 1,      // open ASN.1 text format
  68.     eSerial_AsnBinary    = 2,      // open ASN.1 binary format
  69.     eSerial_Xml          = 3       // open XML format
  70. };
  71. #define SERIAL_VERIFY_DATA_GET    "SERIAL_VERIFY_DATA_GET"
  72. #define SERIAL_VERIFY_DATA_WRITE  "SERIAL_VERIFY_DATA_WRITE"
  73. #define SERIAL_VERIFY_DATA_READ   "SERIAL_VERIFY_DATA_READ"
  74. enum ESerialVerifyData {
  75.     eSerialVerifyData_Default = 0, // use current default
  76.     eSerialVerifyData_No,          // do not verify
  77.     eSerialVerifyData_Never,       // never verify (even if set to verify later on)
  78.     eSerialVerifyData_Yes,         // do verify
  79.     eSerialVerifyData_Always,      // always verify (even if set not to later on)
  80.     eSerialVerifyData_DefValue,    // initialize field with default
  81.     eSerialVerifyData_DefValueAlways // initialize field with default
  82. };
  83. #define SERIAL_SKIP_UNKNOWN_MEMBERS    "SERIAL_SKIP_UNKNOWN_MEMBERS"
  84. enum ESerialSkipUnknown {
  85.     eSerialSkipUnknown_Default = 0, // use current default
  86.     eSerialSkipUnknown_No,          // do not skip (throw exception)
  87.     eSerialSkipUnknown_Never,       // never skip (even if set to skip later on)
  88.     eSerialSkipUnknown_Yes,         // do skip
  89.     eSerialSkipUnknown_Always       // always skip (even if set not to later on)
  90. };
  91. enum ESerialOpenFlags {
  92.     eSerial_StdWhenEmpty = 1 << 0, // use std stream when filename is empty
  93.     eSerial_StdWhenDash  = 1 << 1, // use std stream when filename is "-"
  94.     eSerial_StdWhenStd   = 1 << 2, // use std when filename is "stdin"/"stdout"
  95.     eSerial_StdWhenMask  = 15,
  96.     eSerial_StdWhenAny   = eSerial_StdWhenMask,
  97.     eSerial_UseFileForReread = 1 << 4
  98. };
  99. typedef int TSerialOpenFlags;
  100. // type family
  101. enum ETypeFamily {
  102.     eTypeFamilyPrimitive,
  103.     eTypeFamilyClass,
  104.     eTypeFamilyChoice,
  105.     eTypeFamilyContainer,
  106.     eTypeFamilyPointer
  107. };
  108. enum EPrimitiveValueType {
  109.     ePrimitiveValueSpecial,        // null, void
  110.     ePrimitiveValueBool,           // bool
  111.     ePrimitiveValueChar,           // char
  112.     ePrimitiveValueInteger,        // (signed|unsigned) (char|short|int|long)
  113.     ePrimitiveValueReal,           // float|double
  114.     ePrimitiveValueString,         // string|char*|const char*
  115.     ePrimitiveValueEnum,           // enum
  116.     ePrimitiveValueOctetString,    // vector<(signed|unsigned)? char>
  117.     ePrimitiveValueOther
  118. };
  119. enum EContainerType {
  120.     eContainerVector,              // allows indexing & access to size
  121.     eContainerList,                // only sequential access
  122.     eContainerSet,
  123.     eContainerMap
  124. };
  125. // How to process non-printing character in the ASN VisibleString
  126. //
  127. enum EFixNonPrint {
  128.     eFNP_Allow,            // pass through unchanged, post no error message
  129.     eFNP_Replace,          // replace with '#' silently
  130.     eFNP_ReplaceAndWarn,   // replace with '#', post an error of severity ERROR
  131.     eFNP_Throw,            // replace with '#', throw an exception
  132.     eFNP_Abort,            // replace with '#', post an error of severity FATAL
  133.     eFNP_Default = eFNP_ReplaceAndWarn
  134. };
  135. enum EStringType {
  136.     eStringTypeVisible,
  137.     eStringTypeUTF8
  138. };
  139. // How to assign and compare child sub-objects of serial objects
  140. enum ESerialRecursionMode {
  141.     eRecursive,            // Recursively
  142.     eShallow,              // Assign/Compare pointers only
  143.     eShallowChildless      // Set sub-object pointers to 0
  144. };
  145. //type used for indexing class members and choice variants
  146. typedef size_t TMemberIndex;
  147. typedef int TEnumValueType;
  148. // start if member indexing
  149. const TMemberIndex kFirstMemberIndex = 1;
  150. // special value returned from FindMember
  151. const TMemberIndex kInvalidMember = kFirstMemberIndex - 1;
  152. // special value for marking empty choice
  153. const TMemberIndex kEmptyChoice = kInvalidMember;
  154. typedef ssize_t TPointerOffsetType;
  155. /* @} */
  156. //#include <serial/serialdef.inl>
  157. END_NCBI_SCOPE
  158. #endif  /* SERIALDEF__HPP */
  159. /* ---------------------------------------------------------------------------
  160. * $Log: serialdef.hpp,v $
  161. * Revision 1000.3  2004/04/12 17:15:42  gouriano
  162. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.29
  163. *
  164. * Revision 1.29  2004/03/25 15:56:28  gouriano
  165. * Added possibility to copy and compare serial object non-recursively
  166. *
  167. * Revision 1.28  2004/03/23 15:39:52  gouriano
  168. * Added setup options for skipping unknown data members
  169. *
  170. * Revision 1.27  2003/12/01 19:04:22  grichenk
  171. * Moved Add and Sub from serialutil to ncbimisc, made them methods
  172. * of CRawPointer class.
  173. *
  174. * Revision 1.26  2003/11/13 14:06:44  gouriano
  175. * Elaborated data verification on read/write/get to enable skipping mandatory class data members
  176. *
  177. * Revision 1.25  2003/09/10 20:57:23  gouriano
  178. * added possibility to ignore missing mandatory members on reading
  179. *
  180. * Revision 1.24  2003/08/19 18:32:38  vasilche
  181. * Optimized reading and writing strings.
  182. * Avoid string reallocation when checking char values.
  183. * Try to reuse old string data when string reference counting is not working.
  184. *
  185. * Revision 1.23  2003/08/13 15:47:02  gouriano
  186. * implemented serialization of AnyContent objects
  187. *
  188. * Revision 1.22  2003/04/29 18:29:06  gouriano
  189. * object data member initialization verification
  190. *
  191. * Revision 1.21  2003/04/15 16:18:51  siyan
  192. * Added doxygen support
  193. *
  194. * Revision 1.20  2002/12/23 18:38:51  dicuccio
  195. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  196. * Moved all CVS logs to the end.
  197. *
  198. * Revision 1.19  2002/10/25 14:49:29  vasilche
  199. * NCBI C Toolkit compatibility code extracted to libxcser library.
  200. * Serial streams flags names were renamed to fXxx.
  201. *
  202. * Names of flags
  203. *
  204. * Revision 1.18  2001/06/07 17:12:46  grichenk
  205. * Redesigned checking and substitution of non-printable characters
  206. * in VisibleString
  207. *
  208. * Revision 1.17  2000/12/15 21:28:49  vasilche
  209. * Moved some typedefs/enums from corelib/ncbistd.hpp.
  210. * Added flags to CObjectIStream/CObjectOStream: eFlagAllowNonAsciiChars.
  211. * TByte typedef replaced by Uint1.
  212. *
  213. * Revision 1.16  2000/12/15 15:38:01  vasilche
  214. * Added support of Int8 and long double.
  215. * Enum values now have type Int4 instead of long.
  216. *
  217. * Revision 1.15  2000/11/07 17:25:12  vasilche
  218. * Fixed encoding of XML:
  219. *     removed unnecessary apostrophes in OCTET STRING
  220. *     removed unnecessary content in NULL
  221. * Added module names to CTypeInfo and CEnumeratedTypeValues
  222. *
  223. * Revision 1.14  2000/10/17 18:45:26  vasilche
  224. * Added possibility to turn off object cross reference detection in
  225. * CObjectIStream and CObjectOStream.
  226. *
  227. * Revision 1.13  2000/10/13 20:22:46  vasilche
  228. * Fixed warnings on 64 bit compilers.
  229. * Fixed missing typename in templates.
  230. *
  231. * Revision 1.12  2000/09/18 20:00:09  vasilche
  232. * Separated CVariantInfo and CMemberInfo.
  233. * Implemented copy hooks.
  234. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  235. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  236. *
  237. * Revision 1.11  2000/08/15 19:44:42  vasilche
  238. * Added Read/Write hooks:
  239. * CReadObjectHook/CWriteObjectHook for objects of specified type.
  240. * CReadClassMemberHook/CWriteClassMemberHook for specified members.
  241. * CReadChoiceVariantHook/CWriteChoiceVariant for specified choice variants.
  242. * CReadContainerElementHook/CWriteContainerElementsHook for containers.
  243. *
  244. * Revision 1.10  2000/07/03 18:42:37  vasilche
  245. * Added interface to typeinfo via CObjectInfo and CConstObjectInfo.
  246. * Reduced header dependency.
  247. *
  248. * Revision 1.9  2000/06/01 19:06:58  vasilche
  249. * Added parsing of XML data.
  250. *
  251. * Revision 1.8  2000/04/28 16:58:03  vasilche
  252. * Added classes CByteSource and CByteSourceReader for generic reading.
  253. * Added delayed reading of choice variants.
  254. *
  255. * Revision 1.7  2000/04/13 14:50:18  vasilche
  256. * Added CObjectIStream::Open() and CObjectOStream::Open() for easier use.
  257. *
  258. * Revision 1.6  2000/04/06 16:10:52  vasilche
  259. * Fixed bug with iterators in choices.
  260. * Removed unneeded calls to ReadExternalObject/WriteExternalObject.
  261. * Added output buffering to text ASN.1 data.
  262. *
  263. * Revision 1.5  2000/04/03 18:47:10  vasilche
  264. * Added main include file for generated headers.
  265. * serialimpl.hpp is included in generated sources with GetTypeInfo methods
  266. *
  267. * Revision 1.4  2000/01/10 19:46:33  vasilche
  268. * Fixed encoding/decoding of REAL type.
  269. * Fixed encoding/decoding of StringStore.
  270. * Fixed encoding/decoding of NULL type.
  271. * Fixed error reporting.
  272. * Reduced object map (only classes).
  273. *
  274. * Revision 1.3  1999/12/17 19:04:54  vasilche
  275. * Simplified generation of GetTypeInfo methods.
  276. *
  277. * Revision 1.2  1999/09/22 20:11:51  vasilche
  278. * Modified for compilation on IRIX native c++ compiler.
  279. *
  280. * Revision 1.1  1999/06/24 14:44:44  vasilche
  281. * Added binary ASN.1 output.
  282. *
  283. * ===========================================================================
  284. */