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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: enumtype.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:39:20  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ENUMTYPE_HPP
  10. #define ENUMTYPE_HPP
  11. /*  $Id: enumtype.hpp,v 1000.1 2004/06/01 19:39:20 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. *   Enumerated type definition
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: enumtype.hpp,v $
  43. * Revision 1000.1  2004/06/01 19:39:20  gouriano
  44. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  45. *
  46. * Revision 1.12  2004/05/12 18:33:23  gouriano
  47. * Added type conversion check (when using _type DEF file directive)
  48. *
  49. * Revision 1.11  2003/05/14 14:42:55  gouriano
  50. * added generation of XML schema
  51. *
  52. * Revision 1.10  2001/05/17 15:00:42  lavr
  53. * Typos corrected
  54. *
  55. * Revision 1.9  2000/12/15 15:38:35  vasilche
  56. * Added support of Int8 and long double.
  57. * Added support of BigInt ASN.1 extension - mapped to Int8.
  58. * Enum values now have type Int4 instead of long.
  59. *
  60. * Revision 1.8  2000/11/29 17:42:30  vasilche
  61. * Added CComment class for storing/printing ASN.1/XML module comments.
  62. * Added srcutil.hpp file to reduce file dependency.
  63. *
  64. * Revision 1.7  2000/11/20 17:26:11  vasilche
  65. * Fixed warnings on 64 bit platforms.
  66. *
  67. * Revision 1.6  2000/11/15 20:34:42  vasilche
  68. * Added user comments to ENUMERATED types.
  69. * Added storing of user comments to ASN.1 module definition.
  70. *
  71. * Revision 1.5  2000/11/14 21:41:12  vasilche
  72. * Added preserving of ASN.1 definition comments.
  73. *
  74. * Revision 1.4  2000/08/25 15:58:46  vasilche
  75. * Renamed directory tool -> datatool.
  76. *
  77. * Revision 1.3  2000/05/24 20:08:31  vasilche
  78. * Implemented DTD generation.
  79. *
  80. * Revision 1.2  2000/04/07 19:26:08  vasilche
  81. * Added namespace support to datatool.
  82. * By default with argument -oR datatool will generate objects in namespace
  83. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  84. * Datatool's classes also moved to NCBI namespace.
  85. *
  86. * Revision 1.1  2000/02/01 21:46:17  vasilche
  87. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  88. * Removed CMemberInfo subclasses.
  89. * Added support for DEFAULT/OPTIONAL members.
  90. * Changed class generation.
  91. * Moved datatool headers to include/internal/serial/tool.
  92. *
  93. * Revision 1.3  1999/12/03 21:42:12  vasilche
  94. * Fixed conflict of enums in choices.
  95. *
  96. * Revision 1.2  1999/11/15 19:36:14  vasilche
  97. * Fixed warnings on GCC
  98. *
  99. * ===========================================================================
  100. */
  101. #include <serial/datatool/type.hpp>
  102. #include <list>
  103. BEGIN_NCBI_SCOPE
  104. class CEnumDataTypeValue
  105. {
  106. public:
  107.     CEnumDataTypeValue(const string& name, TEnumValueType value)
  108.         : m_Name(name), m_Value(value)
  109.         {
  110.         }
  111.     
  112.     const string& GetName(void) const
  113.         {
  114.             return m_Name;
  115.         }
  116.     TEnumValueType GetValue(void) const
  117.         {
  118.             return m_Value;
  119.         }
  120.     CComments& GetComments(void)
  121.         {
  122.             return m_Comments;
  123.         }
  124.     const CComments& GetComments(void) const
  125.         {
  126.             return m_Comments;
  127.         }
  128. private:
  129.     string m_Name;
  130.     TEnumValueType m_Value;
  131.     CComments m_Comments;
  132. };
  133. class CEnumDataType : public CDataType
  134. {
  135.     typedef CDataType CParent;
  136. public:
  137.     typedef CEnumDataTypeValue TValue;
  138.     typedef list<TValue> TValues;
  139.     CEnumDataType(void);
  140.     virtual bool IsInteger(void) const;
  141.     virtual const char* GetASNKeyword(void) const;
  142.     TValue& AddValue(const string& name, TEnumValueType value);
  143.     void PrintASN(CNcbiOstream& out, int indent) const;
  144.     void PrintDTDElement(CNcbiOstream& out) const;
  145.     void PrintDTDExtra(CNcbiOstream& out) const;
  146.     void PrintXMLSchemaElement(CNcbiOstream& out) const;
  147.     bool CheckValue(const CDataValue& value) const;
  148.     TObjectPtr CreateDefault(const CDataValue& value) const;
  149.     virtual string GetDefaultString(const CDataValue& value) const;
  150.     struct SEnumCInfo {
  151.         string enumName;
  152.         string cType;
  153.         string valuePrefix;
  154.         
  155.         SEnumCInfo(const string& name, const string& type,
  156.                    const string& prefix)
  157.             : enumName(name), cType(type), valuePrefix(prefix)
  158.             {
  159.             }
  160.     };
  161.     
  162.     string DefaultEnumName(void) const;
  163.     SEnumCInfo GetEnumCInfo(void) const;
  164.     CComments& LastComments(void)
  165.         {
  166.             return m_LastComments;
  167.         }
  168. public:
  169.     CTypeInfo* CreateTypeInfo(void);
  170.     AutoPtr<CTypeStrings> GetRefCType(void) const;
  171.     AutoPtr<CTypeStrings> GetFullCType(void) const;
  172.     AutoPtr<CTypeStrings> GenerateCode(void) const;
  173. private:
  174.     TValues m_Values;
  175.     CComments m_LastComments;
  176. };
  177. class CIntEnumDataType : public CEnumDataType {
  178.     typedef CEnumDataType CParent;
  179. public:
  180.     virtual bool IsInteger(void) const;
  181.     virtual const char* GetASNKeyword(void) const;
  182. };
  183. class CBigIntEnumDataType : public CIntEnumDataType {
  184.     typedef CIntEnumDataType CParent;
  185. public:
  186.     virtual const char* GetASNKeyword(void) const;
  187. };
  188. END_NCBI_SCOPE
  189. #endif