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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: typestr.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:38:25  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.11
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef TYPESTR_HPP
  10. #define TYPESTR_HPP
  11. /*  $Id: typestr.hpp,v 1000.0 2003/10/29 17:38:25 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: typestr.hpp,v $
  43. * Revision 1000.0  2003/10/29 17:38:25  gouriano
  44. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.11
  45. *
  46. * Revision 1.11  2003/10/21 13:48:48  grichenk
  47. * Redesigned type aliases in serialization library.
  48. * Fixed the code (removed CRef-s, added explicit
  49. * initializers etc.)
  50. *
  51. * Revision 1.10  2003/04/29 18:29:34  gouriano
  52. * object data member initialization verification
  53. *
  54. * Revision 1.9  2000/11/07 17:25:31  vasilche
  55. * Added module names to CTypeInfo and CEnumeratedTypeValues
  56. *
  57. * Revision 1.8  2000/07/11 20:36:02  vasilche
  58. * Removed unnecessary generation of namespace references for enum members.
  59. * Removed obsolete methods.
  60. *
  61. * Revision 1.7  2000/06/16 16:31:13  vasilche
  62. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  63. *
  64. * Revision 1.6  2000/04/17 19:11:05  vasilche
  65. * Fixed failed assertion.
  66. * Removed redundant namespace specifications.
  67. *
  68. * Revision 1.5  2000/04/12 15:36:41  vasilche
  69. * Added -on <namespace> argument to datatool.
  70. * Removed unnecessary namespace specifications in generated files.
  71. *
  72. * Revision 1.4  2000/04/07 19:26:14  vasilche
  73. * Added namespace support to datatool.
  74. * By default with argument -oR datatool will generate objects in namespace
  75. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  76. * Datatool's classes also moved to NCBI namespace.
  77. *
  78. * Revision 1.3  2000/03/07 20:04:57  vasilche
  79. * Added NewInstance method to generated classes.
  80. *
  81. * Revision 1.2  2000/03/07 14:06:06  vasilche
  82. * Added generation of reference counted objects.
  83. *
  84. * Revision 1.1  2000/02/01 21:46:24  vasilche
  85. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  86. * Removed CMemberInfo subclasses.
  87. * Added support for DEFAULT/OPTIONAL members.
  88. * Changed class generation.
  89. * Moved datatool headers to include/internal/serial/tool.
  90. *
  91. * Revision 1.5  2000/01/10 19:46:47  vasilche
  92. * Fixed encoding/decoding of REAL type.
  93. * Fixed encoding/decoding of StringStore.
  94. * Fixed encoding/decoding of NULL type.
  95. * Fixed error reporting.
  96. * Reduced object map (only classes).
  97. *
  98. * Revision 1.4  1999/12/01 17:36:28  vasilche
  99. * Fixed CHOICE processing.
  100. *
  101. * Revision 1.3  1999/11/16 15:41:17  vasilche
  102. * Added plain pointer choice.
  103. * By default we use C pointer instead of auto_ptr.
  104. * Start adding initializers.
  105. *
  106. * Revision 1.2  1999/11/15 19:36:21  vasilche
  107. * Fixed warnings on GCC
  108. *
  109. * ===========================================================================
  110. */
  111. #include <corelib/ncbistd.hpp>
  112. #include <corelib/ncbiutil.hpp>
  113. BEGIN_NCBI_SCOPE
  114. class CClassContext;
  115. class CNamespace;
  116. class CTypeStrings {
  117. public:
  118.     CTypeStrings(void);
  119.     virtual ~CTypeStrings(void);
  120.     const string& GetModuleName(void) const
  121.         {
  122.             return m_ModuleName;
  123.         }
  124.     void SetModuleName(const string& name);
  125.     // kind of C++ representation
  126.     enum EKind {
  127.         eKindStd, // standard type
  128.         eKindEnum, // enum
  129.         eKindString, // std::string
  130.         eKindPointer, // plain pointer
  131.         eKindRef, // CRef<>
  132.         eKindObject, // class (CHOICE, SET, SEQUENCE) inherited from CObject
  133.         eKindClass, // any other class (CHOICE, SET, SEQUENCE)
  134.         eKindContainer, // stl container
  135.         eKindOther
  136.     };
  137.     virtual EKind GetKind(void) const = 0;
  138.     virtual string GetCType(const CNamespace& ns) const = 0;
  139.     virtual string GetPrefixedCType(const CNamespace& ns,
  140.                                     const string& methodPrefix) const = 0;
  141.     virtual bool HaveSpecialRef(void) const;
  142.     virtual string GetRef(const CNamespace& ns) const = 0;
  143.     // for external types
  144.     virtual const CNamespace& GetNamespace(void) const;
  145.     // for enum types
  146.     virtual const string& GetEnumName(void) const;
  147.     virtual bool CanBeKey(void) const;
  148.     virtual bool CanBeCopied(void) const;
  149.     virtual bool NeedSetFlag(void) const;
  150.     static void AdaptForSTL(AutoPtr<CTypeStrings>& type);
  151.     virtual string NewInstance(const string& init) const;
  152.     virtual string GetInitializer(void) const;
  153.     virtual string GetDestructionCode(const string& expr) const;
  154.     virtual string GetIsSetCode(const string& var) const;
  155.     virtual string GetResetCode(const string& var) const;
  156.     virtual void GenerateCode(CClassContext& ctx) const;
  157.     virtual void GenerateUserHPPCode(CNcbiOstream& out) const;
  158.     virtual void GenerateUserCPPCode(CNcbiOstream& out) const;
  159.     virtual void GenerateTypeCode(CClassContext& ctx) const;
  160.     virtual void GeneratePointerTypeCode(CClassContext& ctx) const;
  161. private:
  162.     string m_ModuleName;
  163. };
  164. END_NCBI_SCOPE
  165. #endif