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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: enumstr.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:35:34  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef ENUMSTR_HPP
  10. #define ENUMSTR_HPP
  11. /*  $Id: enumstr.hpp,v 1000.0 2003/10/29 17:35:34 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. *   C++ class info: includes, used classes, C++ code etc.
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: enumstr.hpp,v $
  43. * Revision 1000.0  2003/10/29 17:35:34  gouriano
  44. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.10
  45. *
  46. * Revision 1.10  2003/04/29 18:29:33  gouriano
  47. * object data member initialization verification
  48. *
  49. * Revision 1.9  2000/11/15 20:34:41  vasilche
  50. * Added user comments to ENUMERATED types.
  51. * Added storing of user comments to ASN.1 module definition.
  52. *
  53. * Revision 1.8  2000/08/25 15:58:46  vasilche
  54. * Renamed directory tool -> datatool.
  55. *
  56. * Revision 1.7  2000/07/11 20:36:01  vasilche
  57. * Removed unnecessary generation of namespace references for enum members.
  58. * Removed obsolete methods.
  59. *
  60. * Revision 1.6  2000/06/16 16:31:13  vasilche
  61. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  62. *
  63. * Revision 1.5  2000/05/24 20:08:31  vasilche
  64. * Implemented DTD generation.
  65. *
  66. * Revision 1.4  2000/04/17 19:11:04  vasilche
  67. * Fixed failed assertion.
  68. * Removed redundant namespace specifications.
  69. *
  70. * Revision 1.3  2000/04/12 15:36:40  vasilche
  71. * Added -on <namespace> argument to datatool.
  72. * Removed unnecessary namespace specifications in generated files.
  73. *
  74. * Revision 1.2  2000/04/07 19:26:08  vasilche
  75. * Added namespace support to datatool.
  76. * By default with argument -oR datatool will generate objects in namespace
  77. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  78. * Datatool's classes also moved to NCBI namespace.
  79. *
  80. * Revision 1.1  2000/02/01 21:46:17  vasilche
  81. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  82. * Removed CMemberInfo subclasses.
  83. * Added support for DEFAULT/OPTIONAL members.
  84. * Changed class generation.
  85. * Moved datatool headers to include/internal/serial/tool.
  86. *
  87. * Revision 1.5  2000/01/10 19:46:47  vasilche
  88. * Fixed encoding/decoding of REAL type.
  89. * Fixed encoding/decoding of StringStore.
  90. * Fixed encoding/decoding of NULL type.
  91. * Fixed error reporting.
  92. * Reduced object map (only classes).
  93. *
  94. * Revision 1.4  1999/12/01 17:36:28  vasilche
  95. * Fixed CHOICE processing.
  96. *
  97. * Revision 1.3  1999/11/16 15:41:17  vasilche
  98. * Added plain pointer choice.
  99. * By default we use C pointer instead of auto_ptr.
  100. * Start adding initializers.
  101. *
  102. * Revision 1.2  1999/11/15 19:36:21  vasilche
  103. * Fixed warnings on GCC
  104. *
  105. * ===========================================================================
  106. */
  107. #include <serial/datatool/typestr.hpp>
  108. #include <serial/datatool/namespace.hpp>
  109. #include <memory>
  110. #include <list>
  111. BEGIN_NCBI_SCOPE
  112. class CEnumDataTypeValue;
  113. class CEnumTypeStrings : public CTypeStrings
  114. {
  115.     typedef CTypeStrings CParent;
  116. public:
  117.     typedef list<CEnumDataTypeValue> TValues;
  118.     CEnumTypeStrings(const string& externalName, const string& enumName,
  119.                      const string& cType, bool isInteger,
  120.                      const TValues& values, const string& valuesPrefix);
  121.     const string& GetExternalName(void) const
  122.         {
  123.             return m_ExternalName;
  124.         }
  125.     void SetEnumNamespace(const CNamespace& ns);
  126.     EKind GetKind(void) const;
  127.     const string& GetEnumName(void) const;
  128.     string GetCType(const CNamespace& ns) const;
  129.     string GetPrefixedCType(const CNamespace& ns,
  130.                             const string& methodPrefix) const;
  131.     string GetRef(const CNamespace& ns) const;
  132.     string GetInitializer(void) const;
  133.     void GenerateTypeCode(CClassContext& ctx) const;
  134. private:
  135.     string m_ExternalName;
  136.     string m_EnumName;
  137.     string m_CType;
  138.     bool m_IsInteger;
  139.     const TValues& m_Values;
  140.     string m_ValuesPrefix;
  141. };
  142. class CEnumRefTypeStrings : public CTypeStrings
  143. {
  144.     typedef CTypeStrings CParent;
  145. public:
  146.     CEnumRefTypeStrings(const string& enumName,
  147.                         const string& cName,
  148.                         const CNamespace& ns,
  149.                         const string& fileName);
  150.     EKind GetKind(void) const;
  151.     const CNamespace& GetNamespace(void) const;
  152.     const string& GetEnumName(void) const;
  153.     string GetCType(const CNamespace& ns) const;
  154.     string GetPrefixedCType(const CNamespace& ns,
  155.                             const string& methodPrefix) const;
  156.     string GetRef(const CNamespace& ns) const;
  157.     string GetInitializer(void) const;
  158.     void GenerateTypeCode(CClassContext& ctx) const;
  159. private:
  160.     string m_EnumName;
  161.     string m_CType;
  162.     CNamespace m_Namespace;
  163.     string m_FileName;
  164. };
  165. END_NCBI_SCOPE
  166. #endif