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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: stdtypes.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:15:50  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.31
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef STDTYPES__HPP
  10. #define STDTYPES__HPP
  11. /*  $Id: stdtypes.hpp,v 1000.1 2004/04/12 17:15:50 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/serialbase.hpp>
  43. #include <serial/typeinfo.hpp>
  44. #include <vector>
  45. /** @addtogroup TypeInfoCPP
  46.  *
  47.  * @{
  48.  */
  49. BEGIN_NCBI_SCOPE
  50. class NCBI_XSERIAL_EXPORT CPrimitiveTypeInfo : public CTypeInfo
  51. {
  52.     typedef CTypeInfo CParent;
  53. public:
  54.     typedef bool (*TIsDefaultFunction)(TConstObjectPtr objectPtr);
  55.     typedef void (*TSetDefaultFunction)(TObjectPtr objectPtr);
  56.     typedef bool (*TEqualsFunction)(TConstObjectPtr o1, TConstObjectPtr o2,
  57.                                     ESerialRecursionMode how);
  58.     typedef void (*TAssignFunction)(TObjectPtr dst, TConstObjectPtr src,
  59.                                     ESerialRecursionMode how);
  60.     CPrimitiveTypeInfo(size_t size,
  61.                        EPrimitiveValueType valueType, bool isSigned = true);
  62.     CPrimitiveTypeInfo(size_t size, const char* name,
  63.                        EPrimitiveValueType valueType, bool isSigned = true);
  64.     CPrimitiveTypeInfo(size_t size, const string& name,
  65.                        EPrimitiveValueType valueType, bool isSigned = true);
  66.     virtual bool IsDefault(TConstObjectPtr object) const;
  67.     virtual bool Equals(TConstObjectPtr , TConstObjectPtr,
  68.                         ESerialRecursionMode how = eRecursive) const;
  69.     virtual void SetDefault(TObjectPtr dst) const;
  70.     virtual void Assign(TObjectPtr dst, TConstObjectPtr src,
  71.                         ESerialRecursionMode how = eRecursive) const;
  72.     EPrimitiveValueType GetPrimitiveValueType(void) const;
  73.     bool IsSigned(void) const;
  74.     virtual bool GetValueBool(TConstObjectPtr objectPtr) const;
  75.     virtual void SetValueBool(TObjectPtr objectPtr, bool value) const;
  76.     virtual char GetValueChar(TConstObjectPtr objectPtr) const;
  77.     virtual void SetValueChar(TObjectPtr objectPtr, char value) const;
  78.     virtual Int4 GetValueInt4(TConstObjectPtr objectPtr) const;
  79.     virtual void SetValueInt4(TObjectPtr objectPtr, Int4 value) const;
  80.     virtual Uint4 GetValueUint4(TConstObjectPtr objectPtr) const;
  81.     virtual void SetValueUint4(TObjectPtr objectPtr, Uint4 value) const;
  82.     virtual Int8 GetValueInt8(TConstObjectPtr objectPtr) const;
  83.     virtual void SetValueInt8(TObjectPtr objectPtr, Int8 value) const;
  84.     virtual Uint8 GetValueUint8(TConstObjectPtr objectPtr) const;
  85.     virtual void SetValueUint8(TObjectPtr objectPtr, Uint8 value) const;
  86.     int GetValueInt(TConstObjectPtr objectPtr) const;
  87.     void SetValueInt(TObjectPtr objectPtr, int value) const;
  88.     unsigned GetValueUInt(TConstObjectPtr objectPtr) const;
  89.     void SetValueUInt(TObjectPtr objectPtr, unsigned value) const;
  90.     long GetValueLong(TConstObjectPtr objectPtr) const;
  91.     void SetValueLong(TObjectPtr objectPtr, long value) const;
  92.     unsigned long GetValueULong(TConstObjectPtr objectPtr) const;
  93.     void SetValueULong(TObjectPtr objectPtr, unsigned long value) const;
  94.     virtual double GetValueDouble(TConstObjectPtr objectPtr) const;
  95.     virtual void SetValueDouble(TObjectPtr objectPtr, double value) const;
  96. #if SIZEOF_LONG_DOUBLE != 0
  97.     virtual long double GetValueLDouble(TConstObjectPtr objectPtr) const;
  98.     virtual void SetValueLDouble(TObjectPtr objectPtr,
  99.                                  long double value) const;
  100. #endif
  101.     virtual void GetValueString(TConstObjectPtr objectPtr,
  102.                                 string& value) const;
  103.     virtual void SetValueString(TObjectPtr objectPtr,
  104.                                 const string& value) const;
  105.     virtual void GetValueOctetString(TConstObjectPtr objectPtr,
  106.                                      vector<char>& value) const;
  107.     virtual void SetValueOctetString(TObjectPtr objectPtr,
  108.                                      const vector<char>& value) const;
  109.     static const CPrimitiveTypeInfo* GetIntegerTypeInfo(size_t size,
  110.                                                         bool sign = true);
  111.     void SetMemFunctions(TTypeCreate,
  112.                          TIsDefaultFunction, TSetDefaultFunction,
  113.                          TEqualsFunction, TAssignFunction);
  114.     void SetIOFunctions(TTypeReadFunction, TTypeWriteFunction,
  115.                         TTypeCopyFunction, TTypeSkipFunction);
  116. protected:
  117.     friend class CObjectInfo;
  118.     friend class CConstObjectInfo;
  119.     EPrimitiveValueType m_ValueType;
  120.     bool m_Signed;
  121.     TIsDefaultFunction m_IsDefault;
  122.     TSetDefaultFunction m_SetDefault;
  123.     TEqualsFunction m_Equals;
  124.     TAssignFunction m_Assign;
  125. };
  126. class NCBI_XSERIAL_EXPORT CVoidTypeInfo : public CPrimitiveTypeInfo
  127. {
  128.     typedef CPrimitiveTypeInfo CParent;
  129. public:
  130.     CVoidTypeInfo(void);
  131. };
  132. // template for getting type info of standard types
  133. template<typename T>
  134. class CStdTypeInfo
  135. {
  136. };
  137. EMPTY_TEMPLATE
  138. class NCBI_XSERIAL_EXPORT CStdTypeInfo<bool>
  139. {
  140. public:
  141.     static TTypeInfo GetTypeInfo(void);
  142.     static CTypeInfo* CreateTypeInfo(void);
  143.     static TTypeInfo GetTypeInfoNullBool(void);
  144.     static CTypeInfo* CreateTypeInfoNullBool(void);
  145. };
  146. EMPTY_TEMPLATE
  147. class NCBI_XSERIAL_EXPORT CStdTypeInfo<char>
  148. {
  149. public:
  150.     static TTypeInfo GetTypeInfo(void);
  151.     static CTypeInfo* CreateTypeInfo(void);
  152. };
  153. EMPTY_TEMPLATE
  154. class NCBI_XSERIAL_EXPORT CStdTypeInfo<signed char>
  155. {
  156. public:
  157.     static TTypeInfo GetTypeInfo(void);
  158.     static CTypeInfo* CreateTypeInfo(void);
  159. };
  160. EMPTY_TEMPLATE
  161. class NCBI_XSERIAL_EXPORT CStdTypeInfo<unsigned char>
  162. {
  163. public:
  164.     static TTypeInfo GetTypeInfo(void);
  165.     static CTypeInfo* CreateTypeInfo(void);
  166. };
  167. EMPTY_TEMPLATE
  168. class NCBI_XSERIAL_EXPORT CStdTypeInfo<short>
  169. {
  170. public:
  171.     static TTypeInfo GetTypeInfo(void);
  172.     static CTypeInfo* CreateTypeInfo(void);
  173. };
  174. EMPTY_TEMPLATE
  175. class NCBI_XSERIAL_EXPORT CStdTypeInfo<unsigned short>
  176. {
  177. public:
  178.     static TTypeInfo GetTypeInfo(void);
  179.     static CTypeInfo* CreateTypeInfo(void);
  180. };
  181. EMPTY_TEMPLATE
  182. class NCBI_XSERIAL_EXPORT CStdTypeInfo<int>
  183. {
  184. public:
  185.     static TTypeInfo GetTypeInfo(void);
  186.     static CTypeInfo* CreateTypeInfo(void);
  187. };
  188. EMPTY_TEMPLATE
  189. class NCBI_XSERIAL_EXPORT CStdTypeInfo<unsigned>
  190. {
  191. public:
  192.     static TTypeInfo GetTypeInfo(void);
  193.     static CTypeInfo* CreateTypeInfo(void);
  194. };
  195. #if SIZEOF_LONG == 4
  196. EMPTY_TEMPLATE
  197. class NCBI_XSERIAL_EXPORT CStdTypeInfo<long>
  198. {
  199. public:
  200.     static TTypeInfo GetTypeInfo(void);
  201.     static CTypeInfo* CreateTypeInfo(void);
  202. };
  203. EMPTY_TEMPLATE
  204. class NCBI_XSERIAL_EXPORT CStdTypeInfo<unsigned long>
  205. {
  206. public:
  207.     static TTypeInfo GetTypeInfo(void);
  208.     static CTypeInfo* CreateTypeInfo(void);
  209. };
  210. #endif
  211. EMPTY_TEMPLATE
  212. class NCBI_XSERIAL_EXPORT CStdTypeInfo<Int8>
  213. {
  214. public:
  215.     static TTypeInfo GetTypeInfo(void);
  216.     static CTypeInfo* CreateTypeInfo(void);
  217. };
  218. EMPTY_TEMPLATE
  219. class NCBI_XSERIAL_EXPORT CStdTypeInfo<Uint8>
  220. {
  221. public:
  222.     static TTypeInfo GetTypeInfo(void);
  223.     static CTypeInfo* CreateTypeInfo(void);
  224. };
  225. EMPTY_TEMPLATE
  226. class NCBI_XSERIAL_EXPORT CStdTypeInfo<float>
  227. {
  228. public:
  229.     static TTypeInfo GetTypeInfo(void);
  230.     static CTypeInfo* CreateTypeInfo(void);
  231. };
  232. EMPTY_TEMPLATE
  233. class NCBI_XSERIAL_EXPORT CStdTypeInfo<double>
  234. {
  235. public:
  236.     static TTypeInfo GetTypeInfo(void);
  237.     static CTypeInfo* CreateTypeInfo(void);
  238. };
  239. #if SIZEOF_LONG_DOUBLE != 0
  240. EMPTY_TEMPLATE
  241. class NCBI_XSERIAL_EXPORT CStdTypeInfo<long double>
  242. {
  243. public:
  244.     static TTypeInfo GetTypeInfo(void);
  245.     static CTypeInfo* CreateTypeInfo(void);
  246. };
  247. #endif
  248. EMPTY_TEMPLATE
  249. class NCBI_XSERIAL_EXPORT CStdTypeInfo<string>
  250. {
  251. public:
  252.     static TTypeInfo GetTypeInfo(void);
  253.     static CTypeInfo* CreateTypeInfo(void);
  254.     static TTypeInfo GetTypeInfoStringStore(void);
  255.     static CTypeInfo* CreateTypeInfoStringStore(void);
  256. };
  257. EMPTY_TEMPLATE
  258. class NCBI_XSERIAL_EXPORT CStdTypeInfo<ncbi::CStringUTF8>
  259. {
  260. public:
  261.     static TTypeInfo GetTypeInfo(void);
  262.     static CTypeInfo* CreateTypeInfo(void);
  263.     static TTypeInfo GetTypeInfoStringStore(void);
  264.     static CTypeInfo* CreateTypeInfoStringStore(void);
  265. };
  266. EMPTY_TEMPLATE
  267. class NCBI_XSERIAL_EXPORT CStdTypeInfo<char*>
  268. {
  269. public:
  270.     static TTypeInfo GetTypeInfo(void);
  271.     static CTypeInfo* CreateTypeInfo(void);
  272. };
  273. EMPTY_TEMPLATE
  274. class NCBI_XSERIAL_EXPORT CStdTypeInfo<const char*>
  275. {
  276. public:
  277.     static TTypeInfo GetTypeInfo(void);
  278.     static CTypeInfo* CreateTypeInfo(void);
  279. };
  280. EMPTY_TEMPLATE
  281. class NCBI_XSERIAL_EXPORT CStdTypeInfo< vector<char> >
  282. {
  283. public:
  284.     static TTypeInfo GetTypeInfo(void);
  285.     static CTypeInfo* CreateTypeInfo(void);
  286. };
  287. EMPTY_TEMPLATE
  288. class NCBI_XSERIAL_EXPORT CStdTypeInfo< vector<signed char> >
  289. {
  290. public:
  291.     static TTypeInfo GetTypeInfo(void);
  292.     static CTypeInfo* CreateTypeInfo(void);
  293. };
  294. EMPTY_TEMPLATE
  295. class NCBI_XSERIAL_EXPORT CStdTypeInfo< vector<unsigned char> >
  296. {
  297. public:
  298.     static TTypeInfo GetTypeInfo(void);
  299.     static CTypeInfo* CreateTypeInfo(void);
  300. };
  301. EMPTY_TEMPLATE
  302. class NCBI_XSERIAL_EXPORT CStdTypeInfo<ncbi::CAnyContentObject>
  303. {
  304. public:
  305.     static TTypeInfo GetTypeInfo(void);
  306.     static CTypeInfo* CreateTypeInfo(void);
  307. };
  308. /* @} */
  309. #include <serial/stdtypes.inl>
  310. END_NCBI_SCOPE
  311. #endif  /* STDTYPES__HPP */
  312. /* ---------------------------------------------------------------------------
  313. * $Log: stdtypes.hpp,v $
  314. * Revision 1000.1  2004/04/12 17:15:50  gouriano
  315. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.31
  316. *
  317. * Revision 1.31  2004/03/25 15:57:55  gouriano
  318. * Added possibility to copy and compare serial object non-recursively
  319. *
  320. * Revision 1.30  2003/08/13 15:47:02  gouriano
  321. * implemented serialization of AnyContent objects
  322. *
  323. * Revision 1.29  2003/05/22 20:08:42  gouriano
  324. * added UTF8 strings
  325. *
  326. * Revision 1.28  2003/04/15 16:18:57  siyan
  327. * Added doxygen support
  328. *
  329. * Revision 1.27  2002/12/23 18:38:51  dicuccio
  330. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  331. * Moved all CVS logs to the end.
  332. *
  333. * Revision 1.26  2001/08/31 20:05:43  ucko
  334. * Fix ICC build.
  335. *
  336. * Revision 1.25  2001/01/30 21:40:58  vasilche
  337. * Fixed dealing with unsigned enums.
  338. *
  339. * Revision 1.24  2000/12/15 15:38:01  vasilche
  340. * Added support of Int8 and long double.
  341. * Enum values now have type Int4 instead of long.
  342. *
  343. * Revision 1.23  2000/11/07 17:25:13  vasilche
  344. * Fixed encoding of XML:
  345. *     removed unnecessary apostrophes in OCTET STRING
  346. *     removed unnecessary content in NULL
  347. * Added module names to CTypeInfo and CEnumeratedTypeValues
  348. *
  349. * Revision 1.22  2000/10/13 16:28:32  vasilche
  350. * Reduced header dependency.
  351. * Avoid use of templates with virtual methods.
  352. * Reduced amount of different maps used.
  353. * All this lead to smaller compiled code size (libraries and programs).
  354. *
  355. * Revision 1.21  2000/09/18 20:00:10  vasilche
  356. * Separated CVariantInfo and CMemberInfo.
  357. * Implemented copy hooks.
  358. * All hooks now are stored in CTypeInfo/CMemberInfo/CVariantInfo.
  359. * Most type specific functions now are implemented via function pointers instead of virtual functions.
  360. *
  361. * Revision 1.20  2000/09/01 13:16:03  vasilche
  362. * Implemented class/container/choice iterators.
  363. * Implemented CObjectStreamCopier for copying data without loading into memory.
  364. *
  365. * Revision 1.19  2000/07/03 18:42:37  vasilche
  366. * Added interface to typeinfo via CObjectInfo and CConstObjectInfo.
  367. * Reduced header dependency.
  368. *
  369. * Revision 1.18  2000/05/24 20:08:15  vasilche
  370. * Implemented XML dump.
  371. *
  372. * Revision 1.17  2000/03/07 14:05:32  vasilche
  373. * Added stream buffering to ASN.1 binary input.
  374. * Optimized class loading/storing.
  375. * Fixed bugs in processing OPTIONAL fields.
  376. *
  377. * Revision 1.16  2000/01/10 19:46:34  vasilche
  378. * Fixed encoding/decoding of REAL type.
  379. * Fixed encoding/decoding of StringStore.
  380. * Fixed encoding/decoding of NULL type.
  381. * Fixed error reporting.
  382. * Reduced object map (only classes).
  383. *
  384. * Revision 1.15  2000/01/05 19:43:47  vasilche
  385. * Fixed error messages when reading from ASN.1 binary file.
  386. * Fixed storing of integers with enumerated values in ASN.1 binary file.
  387. * Added TAG support to key/value of map.
  388. * Added support of NULL variant in CHOICE.
  389. *
  390. * Revision 1.14  1999/12/28 18:55:40  vasilche
  391. * Reduced size of compiled object files:
  392. * 1. avoid inline or implicit virtual methods (especially destructors).
  393. * 2. avoid std::string's methods usage in inline methods.
  394. * 3. avoid string literals ("xxx") in inline methods.
  395. *
  396. * Revision 1.13  1999/12/17 19:04:54  vasilche
  397. * Simplified generation of GetTypeInfo methods.
  398. *
  399. * Revision 1.12  1999/09/22 20:11:51  vasilche
  400. * Modified for compilation on IRIX native c++ compiler.
  401. *
  402. * Revision 1.11  1999/09/14 18:54:06  vasilche
  403. * Fixed bugs detected by gcc & egcs.
  404. * Removed unneeded includes.
  405. *
  406. * Revision 1.10  1999/08/13 15:53:45  vasilche
  407. * C++ analog of asntool: datatool
  408. *
  409. * Revision 1.9  1999/07/13 20:18:08  vasilche
  410. * Changed types naming.
  411. *
  412. * Revision 1.8  1999/07/07 21:56:33  vasilche
  413. * Fixed problem with static variables in templates on SunPro
  414. *
  415. * Revision 1.7  1999/07/07 21:15:03  vasilche
  416. * Cleaned processing of string types (string, char*, const char*).
  417. *
  418. * Revision 1.6  1999/07/07 19:58:46  vasilche
  419. * Reduced amount of data allocated on heap
  420. * Cleaned ASN.1 structures info
  421. *
  422. * Revision 1.5  1999/06/30 16:04:37  vasilche
  423. * Added support for old ASN.1 structures.
  424. *
  425. * Revision 1.4  1999/06/24 14:44:45  vasilche
  426. * Added binary ASN.1 output.
  427. *
  428. * Revision 1.3  1999/06/09 18:39:00  vasilche
  429. * Modified templates to work on Sun.
  430. *
  431. * Revision 1.2  1999/06/04 20:51:38  vasilche
  432. * First compilable version of serialization.
  433. *
  434. * Revision 1.1  1999/05/19 19:56:29  vasilche
  435. * Commit just in case.
  436. *
  437. * ===========================================================================
  438. */