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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: typestr.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:43:58  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.23
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: typestr.cpp,v 1000.1 2004/06/01 19:43:58 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Author: Eugene Vasilchenko
  35. *
  36. * File Description:
  37. *   Type info for class generation: includes, used classes, C code etc.
  38. *
  39. * ---------------------------------------------------------------------------
  40. * $Log: typestr.cpp,v $
  41. * Revision 1000.1  2004/06/01 19:43:58  gouriano
  42. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.23
  43. *
  44. * Revision 1.23  2004/05/17 21:03:14  gorelenk
  45. * Added include of PCH ncbi_pch.hpp
  46. *
  47. * Revision 1.22  2003/10/21 13:48:51  grichenk
  48. * Redesigned type aliases in serialization library.
  49. * Fixed the code (removed CRef-s, added explicit
  50. * initializers etc.)
  51. *
  52. * Revision 1.21  2003/04/29 18:31:09  gouriano
  53. * object data member initialization verification
  54. *
  55. * Revision 1.20  2003/03/10 18:55:19  gouriano
  56. * use new structured exceptions (based on CException)
  57. *
  58. * Revision 1.19  2000/11/07 17:26:26  vasilche
  59. * Added module names to CTypeInfo and CEnumeratedTypeValues
  60. * Added possibility to set include directory for whole module
  61. *
  62. * Revision 1.18  2000/08/25 15:59:25  vasilche
  63. * Renamed directory tool -> datatool.
  64. *
  65. * Revision 1.17  2000/07/11 20:36:30  vasilche
  66. * Removed unnecessary generation of namespace references for enum members.
  67. * Removed obsolete methods.
  68. *
  69. * Revision 1.16  2000/06/16 16:31:41  vasilche
  70. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  71. *
  72. * Revision 1.15  2000/04/17 19:11:09  vasilche
  73. * Fixed failed assertion.
  74. * Removed redundant namespace specifications.
  75. *
  76. * Revision 1.14  2000/04/12 15:36:53  vasilche
  77. * Added -on <namespace> argument to datatool.
  78. * Removed unnecessary namespace specifications in generated files.
  79. *
  80. * Revision 1.13  2000/04/07 19:26:36  vasilche
  81. * Added namespace support to datatool.
  82. * By default with argument -oR datatool will generate objects in namespace
  83. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  84. * Datatool's classes also moved to NCBI namespace.
  85. *
  86. * Revision 1.12  2000/03/07 20:05:00  vasilche
  87. * Added NewInstance method to generated classes.
  88. *
  89. * Revision 1.11  2000/03/07 14:06:34  vasilche
  90. * Added generation of reference counted objects.
  91. *
  92. * Revision 1.10  2000/02/02 14:57:07  vasilche
  93. * Added missing NCBI_NS_NSBI and NSBI_NS_STD macros to generated code.
  94. *
  95. * Revision 1.9  2000/02/01 21:48:09  vasilche
  96. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  97. * Removed CMemberInfo subclasses.
  98. * Added support for DEFAULT/OPTIONAL members.
  99. * Changed class generation.
  100. * Moved datatool headers to include/internal/serial/tool.
  101. *
  102. * Revision 1.8  2000/01/10 19:46:47  vasilche
  103. * Fixed encoding/decoding of REAL type.
  104. * Fixed encoding/decoding of StringStore.
  105. * Fixed encoding/decoding of NULL type.
  106. * Fixed error reporting.
  107. * Reduced object map (only classes).
  108. *
  109. * Revision 1.7  1999/12/28 18:56:00  vasilche
  110. * Reduced size of compiled object files:
  111. * 1. avoid inline or implicit virtual methods (especially destructors).
  112. * 2. avoid std::string's methods usage in inline methods.
  113. * 3. avoid string literals ("xxx") in inline methods.
  114. *
  115. * Revision 1.6  1999/12/17 19:05:19  vasilche
  116. * Simplified generation of GetTypeInfo methods.
  117. *
  118. * Revision 1.5  1999/12/01 17:36:28  vasilche
  119. * Fixed CHOICE processing.
  120. *
  121. * Revision 1.4  1999/11/18 17:13:07  vasilche
  122. * Fixed generation of ENUMERATED CHOICE and VisibleString.
  123. * Added generation of initializers to zero for primitive types and pointers.
  124. *
  125. * Revision 1.3  1999/11/16 15:41:17  vasilche
  126. * Added plain pointer choice.
  127. * By default we use C pointer instead of auto_ptr.
  128. * Start adding initializers.
  129. *
  130. * Revision 1.2  1999/11/15 19:36:20  vasilche
  131. * Fixed warnings on GCC
  132. *
  133. * ===========================================================================
  134. */
  135. #include <ncbi_pch.hpp>
  136. #include <serial/datatool/exceptions.hpp>
  137. #include <serial/datatool/typestr.hpp>
  138. #include <serial/datatool/classctx.hpp>
  139. #include <serial/datatool/ptrstr.hpp>
  140. #include <serial/datatool/namespace.hpp>
  141. BEGIN_NCBI_SCOPE
  142. CTypeStrings::CTypeStrings(void)
  143. {
  144. }
  145. CTypeStrings::~CTypeStrings(void)
  146. {
  147. }
  148. void CTypeStrings::SetModuleName(const string& name)
  149. {
  150.     _ASSERT(m_ModuleName.empty());
  151.     m_ModuleName = name;
  152. }
  153. const CNamespace& CTypeStrings::GetNamespace(void) const
  154. {
  155.     return CNamespace::KEmptyNamespace;
  156. }
  157. const string& CTypeStrings::GetEnumName(void) const
  158. {
  159.     NCBI_THROW(CDatatoolException,eIllegalCall,"illegal call");
  160. }
  161. string CTypeStrings::GetInitializer(void) const
  162. {
  163.     return NcbiEmptyString;
  164. }
  165. string CTypeStrings::GetDestructionCode(const string& /*expr*/) const
  166. {
  167.     return NcbiEmptyString;
  168. }
  169. string CTypeStrings::GetResetCode(const string& /*var*/) const
  170. {
  171.     return NcbiEmptyString;
  172. }
  173. bool CTypeStrings::HaveSpecialRef(void) const
  174. {
  175.     return false;
  176. }
  177. bool CTypeStrings::CanBeKey(void) const
  178. {
  179.     switch ( GetKind() ) {
  180.     case eKindStd:
  181.     case eKindEnum:
  182.     case eKindString:
  183.         return true;
  184.     default:
  185.         return false;
  186.     }
  187. }
  188. bool CTypeStrings::CanBeCopied(void) const
  189. {
  190.     switch ( GetKind() ) {
  191.     case eKindStd:
  192.     case eKindEnum:
  193.     case eKindString:
  194.     case eKindPointer:
  195.     case eKindRef:
  196.         return true;
  197.     default:
  198.         return false;
  199.     }
  200. }
  201. bool CTypeStrings::NeedSetFlag(void) const
  202. {
  203.     switch ( GetKind() ) {
  204.     case eKindPointer:
  205.     case eKindRef:
  206. //    case eKindContainer:
  207.         return false;
  208.     default:
  209.         return true;
  210.     }
  211. }
  212. string CTypeStrings::NewInstance(const string& init) const
  213. {
  214.     return "new "+GetCType(CNamespace::KEmptyNamespace)+'('+init+')';
  215. }
  216. string CTypeStrings::GetIsSetCode(const string& /*var*/) const
  217. {
  218.     NCBI_THROW(CDatatoolException,eIllegalCall, "illegal call");
  219. }
  220. void CTypeStrings::AdaptForSTL(AutoPtr<CTypeStrings>& type)
  221. {
  222.     switch ( type->GetKind() ) {
  223.     case eKindStd:
  224.     case eKindEnum:
  225.     case eKindString:
  226.     case eKindPointer:
  227.     case eKindRef:
  228.         // already suitable for STL
  229.         break;
  230.     case eKindObject:
  231.         type.reset(new CRefTypeStrings(type.release()));
  232.         break;
  233.     default:
  234.         if ( !type->CanBeCopied()  ||  !type->CanBeKey()) {
  235.             type.reset(new CPointerTypeStrings(type.release()));
  236.         }
  237.         break;
  238.     }
  239. }
  240. void CTypeStrings::GenerateCode(CClassContext& ctx) const
  241. {
  242.     GenerateTypeCode(ctx);
  243. }
  244. void CTypeStrings::GenerateTypeCode(CClassContext& /*ctx*/) const
  245. {
  246. }
  247. void CTypeStrings::GeneratePointerTypeCode(CClassContext& ctx) const
  248. {
  249.     GenerateTypeCode(ctx);
  250. }
  251. void CTypeStrings::GenerateUserHPPCode(CNcbiOstream& /*out*/) const
  252. {
  253. }
  254. void CTypeStrings::GenerateUserCPPCode(CNcbiOstream& /*out*/) const
  255. {
  256. }
  257. END_NCBI_SCOPE