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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: code.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:39:17  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef CODE_HPP
  10. #define CODE_HPP
  11. /*  $Id: code.hpp,v 1000.1 2004/06/01 19:39:17 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. *   Class code generator
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: code.hpp,v $
  43. * Revision 1000.1  2004/06/01 19:39:17  gouriano
  44. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  45. *
  46. * Revision 1.12  2004/05/03 19:31:21  gouriano
  47. * Made generation of DOXYGEN-style comments optional
  48. *
  49. * Revision 1.11  2004/04/29 20:09:44  gouriano
  50. * Generate DOXYGEN-style comments in C++ headers
  51. *
  52. * Revision 1.10  2002/12/23 18:38:52  dicuccio
  53. * Added WIn32 export specifier: NCBI_XSERIAL_EXPORT.
  54. * Moved all CVS logs to the end.
  55. *
  56. * Revision 1.9  2002/08/14 17:14:22  grichenk
  57. * Fixed function name conflict on Win32: renamed
  58. * GetClassName() -> GetClassNameDT()
  59. *
  60. * Revision 1.8  2000/08/25 15:58:46  vasilche
  61. * Renamed directory tool -> datatool.
  62. *
  63. * Revision 1.7  2000/04/17 19:11:04  vasilche
  64. * Fixed failed assertion.
  65. * Removed redundant namespace specifications.
  66. *
  67. * Revision 1.6  2000/04/12 15:36:40  vasilche
  68. * Added -on <namespace> argument to datatool.
  69. * Removed unnecessary namespace specifications in generated files.
  70. *
  71. * Revision 1.5  2000/04/07 19:26:08  vasilche
  72. * Added namespace support to datatool.
  73. * By default with argument -oR datatool will generate objects in namespace
  74. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  75. * Datatool's classes also moved to NCBI namespace.
  76. *
  77. * Revision 1.4  2000/03/07 20:04:57  vasilche
  78. * Added NewInstance method to generated classes.
  79. *
  80. * Revision 1.3  2000/02/18 14:03:30  vasilche
  81. * Fixed ?: error.
  82. *
  83. * Revision 1.2  2000/02/17 20:05:02  vasilche
  84. * Inline methods now will be generated in *_Base.inl files.
  85. * Fixed processing of StringStore.
  86. * Renamed in choices: Selected() -> Which(), E_choice -> E_Choice.
  87. * Enumerated values now will preserve case as in ASN.1 definition.
  88. *
  89. * Revision 1.1  2000/02/01 21:46:16  vasilche
  90. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  91. * Removed CMemberInfo subclasses.
  92. * Added support for DEFAULT/OPTIONAL members.
  93. * Changed class generation.
  94. * Moved datatool headers to include/internal/serial/tool.
  95. *
  96. * Revision 1.15  1999/12/29 16:01:50  vasilche
  97. * Added explicit virtual destructors.
  98. * Resolved overloading of InternalResolve.
  99. *
  100. * Revision 1.14  1999/11/19 15:48:09  vasilche
  101. * Modified AutoPtr template to allow its use in STL containers (map, vector etc.)
  102. *
  103. * Revision 1.13  1999/11/18 17:13:06  vasilche
  104. * Fixed generation of ENUMERATED CHOICE and VisibleString.
  105. * Added generation of initializers to zero for primitive types and pointers.
  106. *
  107. * Revision 1.12  1999/11/15 19:36:14  vasilche
  108. * Fixed warnings on GCC
  109. *
  110. * ===========================================================================
  111. */
  112. #include <corelib/ncbistd.hpp>
  113. #include <serial/datatool/classctx.hpp>
  114. #include <serial/datatool/namespace.hpp>
  115. #include <list>
  116. BEGIN_NCBI_SCOPE
  117. class CDataType;
  118. class CFileCode;
  119. class CClassCode : public CClassContext
  120. {
  121. public:
  122.     CClassCode(CClassContext& ownerClass, const string& className);
  123.     virtual ~CClassCode(void);
  124.     const CNamespace& GetNamespace(void) const;
  125.     // DT added to avoid conflict with the standard Windows interfaces
  126.     const string& GetClassNameDT(void) const
  127.         {
  128.             return m_ClassName;
  129.         }
  130.     const string& GetParentClassName(void) const
  131.         {
  132.             return m_ParentClassName;
  133.         }
  134.     const CNamespace& GetParentClassNamespace(void) const
  135.         {
  136.             return m_ParentClassNamespace;
  137.         }
  138.     void SetParentClass(const string& className, const CNamespace& ns);
  139.     bool HaveVirtualDestructor(void) const
  140.         {
  141.             return m_VirtualDestructor;
  142.         }
  143.     void SetVirtualDestructor(bool v = true)
  144.         {
  145.             m_VirtualDestructor = v;
  146.         }
  147.     string GetMethodPrefix(void) const;
  148.     bool InternalClass(void) const;
  149.     TIncludes& HPPIncludes(void);
  150.     TIncludes& CPPIncludes(void);
  151.     void AddForwardDeclaration(const string& s, const CNamespace& ns);
  152.     void AddInitializer(const string& member, const string& init);
  153.     void AddDestructionCode(const string& code);
  154.     bool HaveInitializers(void) const;
  155.     CNcbiOstream& WriteInitializers(CNcbiOstream& out) const;
  156.     CNcbiOstream& WriteDestructionCode(CNcbiOstream& out) const;
  157.     CNcbiOstream& ClassPublic(void)
  158.         {
  159.             return m_ClassPublic;
  160.         }
  161.     CNcbiOstream& ClassProtected(void)
  162.         {
  163.             return m_ClassProtected;
  164.         }
  165.     CNcbiOstream& ClassPrivate(void)
  166.         {
  167.             return m_ClassPrivate;
  168.         }
  169.     CNcbiOstream& InlineMethods(void)
  170.         {
  171.             return m_InlineMethods;
  172.         }
  173.     CNcbiOstream& Methods(bool inl = false)
  174.         {
  175.             return inl? m_InlineMethods: m_Methods;
  176.         }
  177.     CNcbiOstream& MethodStart(bool inl = false)
  178.         {
  179. if ( inl ) {
  180. m_InlineMethods << "inlinen";
  181. return m_InlineMethods;
  182. }
  183. else
  184. return m_Methods;
  185.         }
  186.     CNcbiOstream& GenerateHPP(CNcbiOstream& header) const;
  187.     CNcbiOstream& GenerateINL(CNcbiOstream& code) const;
  188.     CNcbiOstream& GenerateCPP(CNcbiOstream& code) const;
  189.     CNcbiOstream& GenerateUserHPP(CNcbiOstream& header) const;
  190.     CNcbiOstream& GenerateUserCPP(CNcbiOstream& code) const;
  191.     void AddHPPCode(const CNcbiOstrstream& code);
  192.     void AddINLCode(const CNcbiOstrstream& code);
  193.     void AddCPPCode(const CNcbiOstrstream& code);
  194.     static void SetExportSpecifier(const string& str);
  195.     static const string& GetExportSpecifier(void);
  196.     static void SetDoxygenComments(bool set);
  197.     static bool GetDoxygenComments(void);
  198.     static void SetDoxygenGroup(const string& str);
  199.     static const string& GetDoxygenGroup(void);
  200.     static void SetDocRootURL(const string& str);
  201.     static const string& GetDocRootURL(void);
  202. private:
  203.     CClassContext& m_Code;
  204.     string m_ClassName;
  205.     string m_ParentClassName;
  206.     CNamespace m_ParentClassNamespace;
  207.     static string sm_ExportSpecifier;
  208.     static bool   sm_DoxygenComments;
  209.     static string sm_DoxygenGroup;
  210.     static string sm_DocRootURL;
  211.     bool m_VirtualDestructor;
  212.     CNcbiOstrstream m_ClassPublic;
  213.     CNcbiOstrstream m_ClassProtected;
  214.     CNcbiOstrstream m_ClassPrivate;
  215.     CNcbiOstrstream m_Initializers;
  216.     list<string> m_DestructionCode;
  217.     CNcbiOstrstream m_InlineMethods;
  218.     CNcbiOstrstream m_Methods;
  219.     CClassCode(const CClassCode&);
  220.     CClassCode& operator=(const CClassCode&);
  221. };
  222. END_NCBI_SCOPE
  223. #endif