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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: moduleset.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 17:36:46  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.9
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef MODULESET_HPP
  10. #define MODULESET_HPP
  11. /*  $Id: moduleset.hpp,v 1000.0 2003/10/29 17:36:46 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. *   Module set: equivalent of ASN.1 source file
  40. *
  41. * ---------------------------------------------------------------------------
  42. * $Log: moduleset.hpp,v $
  43. * Revision 1000.0  2003/10/29 17:36:46  gouriano
  44. * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.9
  45. *
  46. * Revision 1.9  2003/05/14 14:42:55  gouriano
  47. * added generation of XML schema
  48. *
  49. * Revision 1.8  2001/05/17 15:00:42  lavr
  50. * Typos corrected
  51. *
  52. * Revision 1.7  2000/11/29 17:42:30  vasilche
  53. * Added CComment class for storing/printing ASN.1/XML module comments.
  54. * Added srcutil.hpp file to reduce file dependency.
  55. *
  56. * Revision 1.6  2000/11/14 21:41:14  vasilche
  57. * Added preserving of ASN.1 definition comments.
  58. *
  59. * Revision 1.5  2000/11/08 17:02:39  vasilche
  60. * Added generation of modular DTD files.
  61. *
  62. * Revision 1.4  2000/08/25 15:58:47  vasilche
  63. * Renamed directory tool -> datatool.
  64. *
  65. * Revision 1.3  2000/05/24 20:08:31  vasilche
  66. * Implemented DTD generation.
  67. *
  68. * Revision 1.2  2000/04/07 19:26:10  vasilche
  69. * Added namespace support to datatool.
  70. * By default with argument -oR datatool will generate objects in namespace
  71. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  72. * Datatool's classes also moved to NCBI namespace.
  73. *
  74. * Revision 1.1  2000/02/01 21:46:21  vasilche
  75. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  76. * Removed CMemberInfo subclasses.
  77. * Added support for DEFAULT/OPTIONAL members.
  78. * Changed class generation.
  79. * Moved datatool headers to include/internal/serial/tool.
  80. *
  81. * Revision 1.12  1999/12/28 18:55:59  vasilche
  82. * Reduced size of compiled object files:
  83. * 1. avoid inline or implicit virtual methods (especially destructors).
  84. * 2. avoid std::string's methods usage in inline methods.
  85. * 3. avoid string literals ("xxx") in inline methods.
  86. *
  87. * Revision 1.11  1999/12/21 17:18:37  vasilche
  88. * Added CDelayedFostream class which rewrites file only if contents is changed.
  89. *
  90. * Revision 1.10  1999/12/20 21:00:19  vasilche
  91. * Added generation of sources in different directories.
  92. *
  93. * Revision 1.9  1999/11/19 15:48:10  vasilche
  94. * Modified AutoPtr template to allow its use in STL containers (map, vector etc.)
  95. *
  96. * Revision 1.8  1999/11/15 19:36:17  vasilche
  97. * Fixed warnings on GCC
  98. *
  99. * ===========================================================================
  100. */
  101. #include <corelib/ncbistd.hpp>
  102. #include <corelib/ncbiutil.hpp>
  103. #include <serial/datatool/mcontainer.hpp>
  104. #include <serial/datatool/comments.hpp>
  105. #include <list>
  106. #include <map>
  107. BEGIN_NCBI_SCOPE
  108. class CDataType;
  109. class CDataTypeModule;
  110. class CFileModules;
  111. class CFileSet;
  112. class CFileModules : public CModuleContainer
  113. {
  114. public:
  115.     typedef list< AutoPtr<CDataTypeModule> > TModules;
  116.     typedef map<string, CDataTypeModule*> TModulesByName;
  117.     CFileModules(const string& fileName);
  118.     bool Check(void) const;
  119.     bool CheckNames(void) const;
  120.     void PrintASN(CNcbiOstream& out) const;
  121.     void PrintDTD(CNcbiOstream& out) const;
  122.     void PrintXMLSchema(CNcbiOstream& out) const;
  123.     void PrintDTDModular(void) const;
  124.     const string& GetSourceFileName(void) const;
  125.     string GetFileNamePrefix(void) const;
  126.     void AddModule(const AutoPtr<CDataTypeModule>& module);
  127.     const TModules& GetModules(void) const
  128.         {
  129.             return m_Modules;
  130.         }
  131.     CDataType* ExternalResolve(const string& moduleName,
  132.                                const string& typeName,
  133.                                bool allowInternal = false) const;
  134.     CDataType* ResolveInAnyModule(const string& fullName,
  135.                                   bool allowInternal = false) const;
  136.     CComments& LastComments(void)
  137.         {
  138.             return m_LastComments;
  139.         }
  140. private:
  141.     TModules m_Modules;
  142.     TModulesByName m_ModulesByName;
  143.     string m_SourceFileName;
  144.     CComments m_LastComments;
  145.     mutable string m_PrefixFromSourceFileName;
  146.     friend class CFileSet;
  147. };
  148. class CFileSet : public CModuleContainer
  149. {
  150. public:
  151.     typedef list< AutoPtr< CFileModules > > TModuleSets;
  152.     void AddFile(const AutoPtr<CFileModules>& moduleSet);
  153.     const TModuleSets& GetModuleSets(void) const
  154.         {
  155.             return m_ModuleSets;
  156.         }
  157.     TModuleSets& GetModuleSets(void)
  158.         {
  159.             return m_ModuleSets;
  160.         }
  161.     bool Check(void) const;
  162.     bool CheckNames(void) const;
  163.     void PrintASN(CNcbiOstream& out) const;
  164.     void PrintDTD(CNcbiOstream& out) const;
  165.     void PrintXMLSchema(CNcbiOstream& out) const;
  166.     void PrintDTDModular(void) const;
  167.     CDataType* ExternalResolve(const string& moduleName,
  168.                                const string& typeName,
  169.                                bool allowInternal = false) const;
  170.     CDataType* ResolveInAnyModule(const string& fullName,
  171.                                   bool allowInternal = false) const;
  172. private:
  173.     TModuleSets m_ModuleSets;
  174. };
  175. END_NCBI_SCOPE
  176. #endif