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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: stlstr.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:38:00  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef STLSTR_HPP
  10. #define STLSTR_HPP
  11. /*  $Id: stlstr.hpp,v 1000.0 2003/10/29 17:38:00 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: stlstr.hpp,v $
  43. * Revision 1000.0  2003/10/29 17:38:00  gouriano
  44. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.10
  45. *
  46. * Revision 1.10  2003/04/29 18:29:34  gouriano
  47. * object data member initialization verification
  48. *
  49. * Revision 1.9  2000/08/25 15:58:48  vasilche
  50. * Renamed directory tool -> datatool.
  51. *
  52. * Revision 1.8  2000/07/11 20:36:02  vasilche
  53. * Removed unnecessary generation of namespace references for enum members.
  54. * Removed obsolete methods.
  55. *
  56. * Revision 1.7  2000/06/16 16:31:13  vasilche
  57. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  58. *
  59. * Revision 1.6  2000/04/17 19:11:05  vasilche
  60. * Fixed failed assertion.
  61. * Removed redundant namespace specifications.
  62. *
  63. * Revision 1.5  2000/04/07 19:26:13  vasilche
  64. * Added namespace support to datatool.
  65. * By default with argument -oR datatool will generate objects in namespace
  66. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  67. * Datatool's classes also moved to NCBI namespace.
  68. *
  69. * Revision 1.4  2000/03/07 14:06:06  vasilche
  70. * Added generation of reference counted objects.
  71. *
  72. * Revision 1.3  2000/02/03 20:16:20  vasilche
  73. * Fixed bug in type info generation for templates.
  74. *
  75. * Revision 1.2  2000/02/02 16:23:41  vasilche
  76. * Added missing namespace macros to generated files.
  77. *
  78. * Revision 1.1  2000/02/01 21:46:23  vasilche
  79. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  80. * Removed CMemberInfo subclasses.
  81. * Added support for DEFAULT/OPTIONAL members.
  82. * Changed class generation.
  83. * Moved datatool headers to include/internal/serial/tool.
  84. *
  85. * Revision 1.5  2000/01/10 19:46:47  vasilche
  86. * Fixed encoding/decoding of REAL type.
  87. * Fixed encoding/decoding of StringStore.
  88. * Fixed encoding/decoding of NULL type.
  89. * Fixed error reporting.
  90. * Reduced object map (only classes).
  91. *
  92. * Revision 1.4  1999/12/01 17:36:28  vasilche
  93. * Fixed CHOICE processing.
  94. *
  95. * Revision 1.3  1999/11/16 15:41:17  vasilche
  96. * Added plain pointer choice.
  97. * By default we use C pointer instead of auto_ptr.
  98. * Start adding initializers.
  99. *
  100. * Revision 1.2  1999/11/15 19:36:21  vasilche
  101. * Fixed warnings on GCC
  102. *
  103. * ===========================================================================
  104. */
  105. #include <serial/datatool/typestr.hpp>
  106. #include <corelib/ncbiutil.hpp>
  107. #include <serial/datatool/classctx.hpp>
  108. BEGIN_NCBI_SCOPE
  109. class CNamespace;
  110. class CTemplate1TypeStrings : public CTypeStrings
  111. {
  112.     typedef CTypeStrings CParent;
  113. public:
  114.     CTemplate1TypeStrings(const string& templateName,
  115.                           CTypeStrings* type);
  116.     CTemplate1TypeStrings(const string& templateName,
  117.                           AutoPtr<CTypeStrings> type);
  118.     ~CTemplate1TypeStrings(void);
  119.     EKind GetKind(void) const;
  120.     const string& GetTemplateName(void) const
  121.         {
  122.             return m_TemplateName;
  123.         }
  124.     const CTypeStrings* GetArg1Type(void) const
  125.         {
  126.             return m_Arg1Type.get();
  127.         }
  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 GetIsSetCode(const string& var) const;
  133.     void GenerateTypeCode(CClassContext& ctx) const;
  134. protected:
  135.     void AddTemplateInclude(CClassContext::TIncludes& hpp) const;
  136.     virtual string GetRefTemplate(void) const;
  137.     virtual const CNamespace& GetTemplateNamespace(void) const;
  138. private:
  139.     string m_TemplateName;
  140.     AutoPtr<CTypeStrings> m_Arg1Type;
  141. };
  142. class CSetTypeStrings : public CTemplate1TypeStrings
  143. {
  144.     typedef CTemplate1TypeStrings CParent;
  145. public:
  146.     CSetTypeStrings(const string& templateName,
  147.                     AutoPtr<CTypeStrings> type);
  148.     ~CSetTypeStrings(void);
  149.     string GetDestructionCode(const string& expr) const;
  150.     string GetResetCode(const string& var) const;
  151. };
  152. class CListTypeStrings : public CTemplate1TypeStrings
  153. {
  154.     typedef CTemplate1TypeStrings CParent;
  155. public:
  156.     CListTypeStrings(const string& templateName,
  157.                      AutoPtr<CTypeStrings> type,
  158.                      bool externalSet = false);
  159.     ~CListTypeStrings(void);
  160.     string GetDestructionCode(const string& expr) const;
  161.     string GetResetCode(const string& var) const;
  162. protected:
  163.     string GetRefTemplate(void) const;
  164. private:
  165.     bool m_ExternalSet;
  166. };
  167. class CTemplate2TypeStrings : public CTemplate1TypeStrings
  168. {
  169.     typedef CTemplate1TypeStrings CParent;
  170. public:
  171.     CTemplate2TypeStrings(const string& templateName,
  172.                           AutoPtr<CTypeStrings> type1,
  173.                           AutoPtr<CTypeStrings> type2);
  174.     ~CTemplate2TypeStrings(void);
  175.     const CTypeStrings* GetArg2Type(void) const
  176.         {
  177.             return m_Arg2Type.get();
  178.         }
  179.     string GetCType(const CNamespace& ns) const;
  180.     string GetPrefixedCType(const CNamespace& ns,
  181.                             const string& methodPrefix) const;
  182.     string GetRef(const CNamespace& ns) const;
  183.     void GenerateTypeCode(CClassContext& ctx) const;
  184. private:
  185.     AutoPtr<CTypeStrings> m_Arg2Type;
  186. };
  187. class CMapTypeStrings : public CTemplate2TypeStrings
  188. {
  189.     typedef CTemplate2TypeStrings CParent;
  190. public:
  191.     CMapTypeStrings(const string& templateName,
  192.                     AutoPtr<CTypeStrings> keyType,
  193.                     AutoPtr<CTypeStrings> valueType);
  194.     ~CMapTypeStrings(void);
  195.     string GetDestructionCode(const string& expr) const;
  196.     string GetResetCode(const string& var) const;
  197. };
  198. class CVectorTypeStrings : public CTypeStrings
  199. {
  200.     typedef CTypeStrings CParent;
  201. public:
  202.     CVectorTypeStrings(const string& charType);
  203.     ~CVectorTypeStrings(void);
  204.     EKind GetKind(void) const;
  205.     string GetCType(const CNamespace& ns) const;
  206.     string GetPrefixedCType(const CNamespace& ns,
  207.                             const string& methodPrefix) const;
  208.     string GetRef(const CNamespace& ns) const;
  209.     void GenerateTypeCode(CClassContext& ctx) const;
  210.     string GetResetCode(const string& var) const;
  211. private:
  212.     string m_CharType;
  213. };
  214. END_NCBI_SCOPE
  215. #endif