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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: generate.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:39:29  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GENERATE_HPP
  10. #define GENERATE_HPP
  11. /*  $Id: generate.hpp,v 1000.1 2004/06/01 19:39:29 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. *   Main generator: collects types, classes and files.
  40. */
  41. #include <corelib/ncbistd.hpp>
  42. #include <corelib/ncbireg.hpp>
  43. #include <set>
  44. #include <map>
  45. #include <serial/datatool/moduleset.hpp>
  46. #include <serial/datatool/namespace.hpp>
  47. BEGIN_NCBI_SCOPE
  48. class CFileCode;
  49. class CCodeGenerator : public CModuleContainer
  50. {
  51. public:
  52.     typedef set<string> TTypeNames;
  53.     typedef map<string, AutoPtr<CFileCode> > TOutputFiles;
  54.     CCodeGenerator(void);
  55.     ~CCodeGenerator(void);
  56.     // setup interface
  57.     void LoadConfig(CNcbiIstream& in);
  58.     void LoadConfig(const string& fileName, bool ignoreAbsense = false,
  59.                     bool warningAbsense = true);
  60.     void AddConfigLine(const string& s);
  61.     void IncludeTypes(const string& types);
  62.     void ExcludeTypes(const string& types);
  63.     void ExcludeRecursion(bool exclude = true)
  64.         {
  65.             m_ExcludeRecursion = exclude;
  66.         }
  67.     void IncludeAllMainTypes(void);
  68.     bool HaveGenerateTypes(void) const
  69.         {
  70.             return !m_GenerateTypes.empty();
  71.         }
  72.     void SetCPPDir(const string& dir)
  73.         {
  74.             m_CPPDir = dir;
  75.         }
  76.     const string& GetCPPDir(void) const
  77.         {
  78.             return m_CPPDir;
  79.         }
  80.     void SetHPPDir(const string& dir)
  81.         {
  82.             m_HPPDir = dir;
  83.         }
  84.     void SetFileListFileName(const string& file)
  85.         {
  86.             m_FileListFileName = file;
  87.         }
  88.     void SetCombiningFileName(const string& file)
  89.         {
  90.             m_CombiningFileName = file;
  91.         }
  92.     CFileSet& GetMainModules(void)
  93.         {
  94.             return m_MainFiles;
  95.         }
  96.     const CFileSet& GetMainModules(void) const
  97.         {
  98.             return m_MainFiles;
  99.         }
  100.     CFileSet& GetImportModules(void)
  101.         {
  102.             return m_ImportFiles;
  103.         }
  104.     const string& GetDefFile(void) const
  105.         {
  106.             return m_DefFile;
  107.         }
  108.     void SetRootDir(const string& dir)
  109.         {
  110.             m_RootDir = dir;
  111.         }
  112.     const string& GetRootDir(void) const
  113.         {
  114.             return m_RootDir;
  115.         }
  116.     bool Check(void) const;
  117.     void GenerateCode(void);
  118.     void GenerateClientCode(void);
  119.     void GenerateClientCode(const string& name, bool mandatory);
  120.     bool Imported(const CDataType* type) const;
  121.     // generation interface
  122.     const CNcbiRegistry& GetConfig(void) const;
  123.     string GetFileNamePrefix(void) const;
  124.     void UseQuotedForm(bool use);
  125.     void CreateCvsignore(bool create);
  126.     void SetFileNamePrefix(const string& prefix);
  127.     EFileNamePrefixSource GetFileNamePrefixSource(void) const;
  128.     void SetFileNamePrefixSource(EFileNamePrefixSource source);
  129.     CDataType* InternalResolve(const string& moduleName,
  130.                                const string& typeName) const;
  131.     void SetDefaultNamespace(const string& ns);
  132.     const CNamespace& GetNamespace(void) const;
  133.     CDataType* ExternalResolve(const string& module, const string& type,
  134.                                bool allowInternal = false) const;
  135.     CDataType* ResolveInAnyModule(const string& type,
  136.                                   bool allowInternal = false) const;
  137.     CDataType* ResolveMain(const string& fullName) const;
  138.     const string& ResolveFileName(const string& name) const;
  139.     void SetDoxygenIngroup(const string& str)
  140.         {
  141.             m_DoxygenIngroup = str;
  142.         }
  143.     void SetDoxygenGroupDescription(const string& str)
  144.         {
  145.             m_DoxygenGroupDescription = str;
  146.         }
  147. protected:
  148.     static void GetTypes(TTypeNames& typeNames, const string& name);
  149.     enum EContext {
  150.         eRoot,
  151.         eChoice,
  152.         eReference,
  153.         eElement,
  154.         eMember
  155.     };
  156.     void CollectTypes(const CDataType* type, EContext context );
  157.     bool AddType(const CDataType* type);
  158. private:
  159.     CNcbiRegistry m_Config;
  160.     CFileSet m_MainFiles;
  161.     CFileSet m_ImportFiles;
  162.     TTypeNames m_GenerateTypes;
  163.     bool m_ExcludeRecursion;
  164.     string m_FileListFileName;
  165.     string m_CombiningFileName;
  166.     string m_HPPDir;
  167.     string m_CPPDir;
  168.     string m_FileNamePrefix;
  169.     EFileNamePrefixSource m_FileNamePrefixSource;
  170.     CNamespace m_DefaultNamespace;
  171.     bool m_UseQuotedForm;
  172.     bool m_CreateCvsignore;
  173.     string m_DoxygenIngroup;
  174.     string m_DoxygenGroupDescription;
  175.     string m_DefFile;
  176.     string m_RootDir;
  177.     TOutputFiles m_Files;
  178. };
  179. END_NCBI_SCOPE
  180. /*
  181. * ===========================================================================
  182. *
  183. * $Log: generate.hpp,v $
  184. * Revision 1000.1  2004/06/01 19:39:29  gouriano
  185. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  186. *
  187. * Revision 1.12  2004/04/29 20:09:44  gouriano
  188. * Generate DOXYGEN-style comments in C++ headers
  189. *
  190. * Revision 1.11  2003/05/29 17:22:59  gouriano
  191. * added possibility of generation .cvsignore file
  192. *
  193. * Revision 1.10  2003/04/08 20:40:08  ucko
  194. * Get client name(s) from [-]clients rather than hardcoding "client"
  195. *
  196. * Revision 1.9  2003/02/24 21:56:38  gouriano
  197. * added odw flag - to issue a warning about missing DEF file
  198. *
  199. * Revision 1.8  2002/12/17 16:21:20  gouriano
  200. * separated class name from the name of the file in which it will be written
  201. *
  202. * Revision 1.7  2002/11/13 00:46:06  ucko
  203. * Add RPC client generator; CVS logs to end in generate.?pp
  204. *
  205. * Revision 1.6  2002/10/22 15:07:00  gouriano
  206. * added possibillity to use quoted syntax form for generated include files
  207. *
  208. * Revision 1.5  2000/11/27 18:19:31  vasilche
  209. * Datatool now conforms CNcbiApplication requirements.
  210. *
  211. * Revision 1.4  2000/08/25 15:58:46  vasilche
  212. * Renamed directory tool -> datatool.
  213. *
  214. * Revision 1.3  2000/06/16 16:31:13  vasilche
  215. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  216. *
  217. * Revision 1.2  2000/04/07 19:26:09  vasilche
  218. * Added namespace support to datatool.
  219. * By default with argument -oR datatool will generate objects in namespace
  220. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  221. * Datatool's classes also moved to NCBI namespace.
  222. *
  223. * Revision 1.1  2000/02/01 21:46:19  vasilche
  224. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  225. * Removed CMemberInfo subclasses.
  226. * Added support for DEFAULT/OPTIONAL members.
  227. * Changed class generation.
  228. * Moved datatool headers to include/internal/serial/tool.
  229. *
  230. * Revision 1.11  1999/12/28 18:55:58  vasilche
  231. * Reduced size of compiled object files:
  232. * 1. avoid inline or implicit virtual methods (especially destructors).
  233. * 2. avoid std::string's methods usage in inline methods.
  234. * 3. avoid string literals ("xxx") in inline methods.
  235. *
  236. * Revision 1.10  1999/12/21 17:18:34  vasilche
  237. * Added CDelayedFostream class which rewrites file only if contents is changed.
  238. *
  239. * Revision 1.9  1999/12/20 21:00:18  vasilche
  240. * Added generation of sources in different directories.
  241. *
  242. * Revision 1.8  1999/12/09 20:01:23  vasilche
  243. * Fixed bug with missed internal classes.
  244. *
  245. * Revision 1.7  1999/11/15 19:36:15  vasilche
  246. * Fixed warnings on GCC
  247. *
  248. * ===========================================================================
  249. */
  250. #endif