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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: statictype.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:39:32  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.15
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef STATICTYPE_HPP
  10. #define STATICTYPE_HPP
  11. /*  $Id: statictype.hpp,v 1000.2 2004/06/01 19:39:32 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. *   Predefined types: INTEGER, BOOLEAN, VisibleString etc.
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: statictype.hpp,v $
  43. * Revision 1000.2  2004/06/01 19:39:32  gouriano
  44. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.15
  45. *
  46. * Revision 1.15  2004/05/12 18:33:23  gouriano
  47. * Added type conversion check (when using _type DEF file directive)
  48. *
  49. * Revision 1.14  2004/04/02 16:55:02  gouriano
  50. * Added CRealDataType::CreateDefault method
  51. *
  52. * Revision 1.13  2004/02/25 19:45:48  gouriano
  53. * Made it possible to define DEFAULT for data members of type REAL
  54. *
  55. * Revision 1.12  2003/08/13 15:45:00  gouriano
  56. * implemented generation of code, which uses AnyContent objects
  57. *
  58. * Revision 1.11  2003/06/16 14:40:15  gouriano
  59. * added possibility to convert DTD to XML schema
  60. *
  61. * Revision 1.10  2003/05/22 20:09:04  gouriano
  62. * added UTF8 strings
  63. *
  64. * Revision 1.9  2003/05/14 14:42:55  gouriano
  65. * added generation of XML schema
  66. *
  67. * Revision 1.8  2000/12/15 15:38:35  vasilche
  68. * Added support of Int8 and long double.
  69. * Added support of BigInt ASN.1 extension - mapped to Int8.
  70. * Enum values now have type Int4 instead of long.
  71. *
  72. * Revision 1.7  2000/11/15 20:34:43  vasilche
  73. * Added user comments to ENUMERATED types.
  74. * Added storing of user comments to ASN.1 module definition.
  75. *
  76. * Revision 1.6  2000/11/14 21:41:14  vasilche
  77. * Added preserving of ASN.1 definition comments.
  78. *
  79. * Revision 1.5  2000/08/25 15:58:48  vasilche
  80. * Renamed directory tool -> datatool.
  81. *
  82. * Revision 1.4  2000/05/24 20:08:31  vasilche
  83. * Implemented DTD generation.
  84. *
  85. * Revision 1.3  2000/04/07 19:26:12  vasilche
  86. * Added namespace support to datatool.
  87. * By default with argument -oR datatool will generate objects in namespace
  88. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  89. * Datatool's classes also moved to NCBI namespace.
  90. *
  91. * Revision 1.2  2000/03/10 15:01:45  vasilche
  92. * Fixed OPTIONAL members reading.
  93. *
  94. * Revision 1.1  2000/02/01 21:46:22  vasilche
  95. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  96. * Removed CMemberInfo subclasses.
  97. * Added support for DEFAULT/OPTIONAL members.
  98. * Changed class generation.
  99. * Moved datatool headers to include/internal/serial/tool.
  100. *
  101. * Revision 1.6  2000/01/10 19:46:46  vasilche
  102. * Fixed encoding/decoding of REAL type.
  103. * Fixed encoding/decoding of StringStore.
  104. * Fixed encoding/decoding of NULL type.
  105. * Fixed error reporting.
  106. * Reduced object map (only classes).
  107. *
  108. * Revision 1.5  1999/12/03 21:42:13  vasilche
  109. * Fixed conflict of enums in choices.
  110. *
  111. * Revision 1.4  1999/12/01 17:36:27  vasilche
  112. * Fixed CHOICE processing.
  113. *
  114. * Revision 1.3  1999/11/18 17:13:07  vasilche
  115. * Fixed generation of ENUMERATED CHOICE and VisibleString.
  116. * Added generation of initializers to zero for primitive types and pointers.
  117. *
  118. * Revision 1.2  1999/11/15 19:36:19  vasilche
  119. * Fixed warnings on GCC
  120. *
  121. * ===========================================================================
  122. */
  123. #include <serial/datatool/type.hpp>
  124. BEGIN_NCBI_SCOPE
  125. class CStaticDataType : public CDataType {
  126.     typedef CDataType CParent;
  127. public:
  128.     void PrintASN(CNcbiOstream& out, int indent) const;
  129.     void PrintDTDElement(CNcbiOstream& out) const;
  130.     void PrintXMLSchemaElement(CNcbiOstream& out) const;
  131.     void PrintXMLSchemaElementWithTag(CNcbiOstream& out,const string& tag) const;
  132.     TObjectPtr CreateDefault(const CDataValue& value) const;
  133.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  134.     //virtual string GetDefaultCType(void) const;
  135.     virtual const char* GetDefaultCType(void) const = 0;
  136.     virtual const char* GetASNKeyword(void) const = 0;
  137.     virtual const char* GetXMLContents(void) const = 0;
  138.     virtual void GetXMLSchemaContents(string& type, string& contents) const = 0;
  139. };
  140. class CNullDataType : public CStaticDataType {
  141.     typedef CStaticDataType CParent;
  142. public:
  143.     bool CheckValue(const CDataValue& value) const;
  144.     TObjectPtr CreateDefault(const CDataValue& value) const;
  145.     CTypeRef GetTypeInfo(void);
  146.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  147.     virtual const char* GetDefaultCType(void) const;
  148.     virtual const char* GetASNKeyword(void) const;
  149.     virtual const char* GetXMLContents(void) const;
  150.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  151. };
  152. class CBoolDataType : public CStaticDataType {
  153.     typedef CStaticDataType CParent;
  154. public:
  155.     bool CheckValue(const CDataValue& value) const;
  156.     TObjectPtr CreateDefault(const CDataValue& value) const;
  157.     virtual string GetDefaultString(const CDataValue& value) const;
  158.     CTypeRef GetTypeInfo(void);
  159.     virtual const char* GetDefaultCType(void) const;
  160.     virtual const char* GetASNKeyword(void) const;
  161.     virtual const char* GetXMLContents(void) const;
  162.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  163.     void PrintDTDExtra(CNcbiOstream& out) const;
  164. };
  165. class CRealDataType : public CStaticDataType {
  166.     typedef CStaticDataType CParent;
  167. public:
  168.     CRealDataType(void);
  169.     bool CheckValue(const CDataValue& value) const;
  170.     TObjectPtr CreateDefault(const CDataValue& value) const;
  171.     virtual string GetDefaultString(const CDataValue& value) const;
  172.     const CTypeInfo* GetRealTypeInfo(void);
  173.     virtual const char* GetDefaultCType(void) const;
  174.     virtual const char* GetASNKeyword(void) const;
  175.     virtual const char* GetXMLContents(void) const;
  176.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  177. };
  178. class CStringDataType : public CStaticDataType {
  179.     typedef CStaticDataType CParent;
  180. public:
  181.     enum EType {
  182.         eStringTypeVisible,
  183.         eStringTypeUTF8
  184.     };
  185.     CStringDataType(EType type = eStringTypeVisible);
  186.     bool CheckValue(const CDataValue& value) const;
  187.     TObjectPtr CreateDefault(const CDataValue& value) const;
  188.     virtual string GetDefaultString(const CDataValue& value) const;
  189.     const CTypeInfo* GetRealTypeInfo(void);
  190.     bool NeedAutoPointer(const CTypeInfo* typeInfo) const;
  191.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  192.     virtual const char* GetDefaultCType(void) const;
  193.     virtual const char* GetASNKeyword(void) const;
  194.     virtual const char* GetXMLContents(void) const;
  195.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  196. protected:
  197.     EType m_Type;
  198. };
  199. class CStringStoreDataType : public CStringDataType {
  200.     typedef CStringDataType CParent;
  201. public:
  202.     CStringStoreDataType(void);
  203.     const CTypeInfo* GetRealTypeInfo(void);
  204.     bool NeedAutoPointer(const CTypeInfo* typeInfo) const;
  205.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  206.     virtual const char* GetASNKeyword(void) const;
  207. };
  208. class COctetStringDataType : public CStaticDataType {
  209.     typedef CStaticDataType CParent;
  210. public:
  211.     bool CheckValue(const CDataValue& value) const;
  212.     const CTypeInfo* GetRealTypeInfo(void);
  213.     bool NeedAutoPointer(const CTypeInfo* typeInfo) const;
  214.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  215.     virtual const char* GetDefaultCType(void) const;
  216.     virtual const char* GetASNKeyword(void) const;
  217.     virtual const char* GetXMLContents(void) const;
  218.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  219. };
  220. class CBitStringDataType : public COctetStringDataType {
  221.     typedef COctetStringDataType CParent;
  222. public:
  223.     bool CheckValue(const CDataValue& value) const;
  224.     virtual const char* GetASNKeyword(void) const;
  225.     virtual const char* GetXMLContents(void) const;
  226.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  227. };
  228. class CIntDataType : public CStaticDataType {
  229.     typedef CStaticDataType CParent;
  230. public:
  231.     CIntDataType(void);
  232.     bool CheckValue(const CDataValue& value) const;
  233.     TObjectPtr CreateDefault(const CDataValue& value) const;
  234.     virtual string GetDefaultString(const CDataValue& value) const;
  235.     CTypeRef GetTypeInfo(void);
  236.     virtual const char* GetDefaultCType(void) const;
  237.     virtual const char* GetASNKeyword(void) const;
  238.     virtual const char* GetXMLContents(void) const;
  239.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  240. };
  241. class CBigIntDataType : public CIntDataType {
  242.     typedef CIntDataType CParent;
  243. public:
  244.     bool CheckValue(const CDataValue& value) const;
  245.     TObjectPtr CreateDefault(const CDataValue& value) const;
  246.     virtual string GetDefaultString(const CDataValue& value) const;
  247.     CTypeRef GetTypeInfo(void);
  248.     virtual const char* GetDefaultCType(void) const;
  249.     virtual const char* GetASNKeyword(void) const;
  250.     virtual const char* GetXMLContents(void) const;
  251.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  252. };
  253. class CAnyContentDataType : public CStaticDataType {
  254. public:
  255.     bool CheckValue(const CDataValue& value) const;
  256.     void PrintASN(CNcbiOstream& out, int indent) const;
  257.     void PrintDTDElement(CNcbiOstream& out) const;
  258.     void PrintXMLSchemaElement(CNcbiOstream& out) const;
  259.     TObjectPtr CreateDefault(const CDataValue& value) const;
  260.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  261.     virtual const char* GetDefaultCType(void) const;
  262.     virtual const char* GetASNKeyword(void) const;
  263.     virtual const char* GetXMLContents(void) const;
  264.     virtual void GetXMLSchemaContents(string& type, string& contents) const;
  265. };
  266. END_NCBI_SCOPE
  267. #endif