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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: stdstr.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:43:48  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: stdstr.cpp,v 1000.1 2004/06/01 19:43:48 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: stdstr.cpp,v $
  41. * Revision 1000.1  2004/06/01 19:43:48  gouriano
  42. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  43. *
  44. * Revision 1.14  2004/05/17 21:03:14  gorelenk
  45. * Added include of PCH ncbi_pch.hpp
  46. *
  47. * Revision 1.13  2003/08/13 15:45:55  gouriano
  48. * implemented generation of code, which uses AnyContent objects
  49. *
  50. * Revision 1.12  2003/04/29 18:31:09  gouriano
  51. * object data member initialization verification
  52. *
  53. * Revision 1.11  2002/01/15 21:38:27  grichenk
  54. * Fixed NULL type initialization/reading/writing
  55. *
  56. * Revision 1.10  2001/05/17 15:07:12  lavr
  57. * Typos corrected
  58. *
  59. * Revision 1.9  2000/11/29 17:42:45  vasilche
  60. * Added CComment class for storing/printing ASN.1/XML module comments.
  61. * Added srcutil.hpp file to reduce file dependency.
  62. *
  63. * Revision 1.8  2000/08/25 15:59:24  vasilche
  64. * Renamed directory tool -> datatool.
  65. *
  66. * Revision 1.7  2000/07/11 20:36:29  vasilche
  67. * Removed unnecessary generation of namespace references for enum members.
  68. * Removed obsolete methods.
  69. *
  70. * Revision 1.6  2000/06/16 16:31:40  vasilche
  71. * Changed implementation of choices and classes info to allow use of the same classes in generated and user written classes.
  72. *
  73. * Revision 1.5  2000/04/17 19:11:09  vasilche
  74. * Fixed failed assertion.
  75. * Removed redundant namespace specifications.
  76. *
  77. * Revision 1.4  2000/04/12 15:36:52  vasilche
  78. * Added -on <namespace> argument to datatool.
  79. * Removed unnecessary namespace specifications in generated files.
  80. *
  81. * Revision 1.3  2000/04/07 19:26:34  vasilche
  82. * Added namespace support to datatool.
  83. * By default with argument -oR datatool will generate objects in namespace
  84. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  85. * Datatool's classes also moved to NCBI namespace.
  86. *
  87. * Revision 1.2  2000/02/17 20:05:07  vasilche
  88. * Inline methods now will be generated in *_Base.inl files.
  89. * Fixed processing of StringStore.
  90. * Renamed in choices: Selected() -> Which(), E_choice -> E_Choice.
  91. * Enumerated values now will preserve case as in ASN.1 definition.
  92. *
  93. * Revision 1.1  2000/02/01 21:48:06  vasilche
  94. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  95. * Removed CMemberInfo subclasses.
  96. * Added support for DEFAULT/OPTIONAL members.
  97. * Changed class generation.
  98. * Moved datatool headers to include/internal/serial/tool.
  99. *
  100. * Revision 1.8  2000/01/10 19:46:47  vasilche
  101. * Fixed encoding/decoding of REAL type.
  102. * Fixed encoding/decoding of StringStore.
  103. * Fixed encoding/decoding of NULL type.
  104. * Fixed error reporting.
  105. * Reduced object map (only classes).
  106. *
  107. * Revision 1.7  1999/12/28 18:56:00  vasilche
  108. * Reduced size of compiled object files:
  109. * 1. avoid inline or implicit virtual methods (especially destructors).
  110. * 2. avoid std::string's methods usage in inline methods.
  111. * 3. avoid string literals ("xxx") in inline methods.
  112. *
  113. * Revision 1.6  1999/12/17 19:05:19  vasilche
  114. * Simplified generation of GetTypeInfo methods.
  115. *
  116. * Revision 1.5  1999/12/01 17:36:28  vasilche
  117. * Fixed CHOICE processing.
  118. *
  119. * Revision 1.4  1999/11/18 17:13:07  vasilche
  120. * Fixed generation of ENUMERATED CHOICE and VisibleString.
  121. * Added generation of initializers to zero for primitive types and pointers.
  122. *
  123. * Revision 1.3  1999/11/16 15:41:17  vasilche
  124. * Added plain pointer choice.
  125. * By default we use C pointer instead of auto_ptr.
  126. * Start adding initializers.
  127. *
  128. * Revision 1.2  1999/11/15 19:36:20  vasilche
  129. * Fixed warnings on GCC
  130. *
  131. * ===========================================================================
  132. */
  133. #include <ncbi_pch.hpp>
  134. #include <serial/datatool/stdstr.hpp>
  135. #include <serial/datatool/classctx.hpp>
  136. BEGIN_NCBI_SCOPE
  137. CStdTypeStrings::CStdTypeStrings(const string& type)
  138.     : m_CType(type)
  139. {
  140.     SIZE_TYPE colon = type.rfind("::");
  141.     if ( colon != NPOS ) {
  142.         m_CType = type.substr(colon + 2);
  143.         m_Namespace = type.substr(0, colon);
  144.     }
  145. }
  146. CTypeStrings::EKind CStdTypeStrings::GetKind(void) const
  147. {
  148.     return eKindStd;
  149. }
  150. string CStdTypeStrings::GetCType(const CNamespace& ns) const
  151. {
  152.     if ( m_Namespace )
  153.         return ns.GetNamespaceRef(m_Namespace)+m_CType;
  154.     else
  155.         return m_CType;
  156. }
  157. string CStdTypeStrings::GetPrefixedCType(const CNamespace& ns,
  158.                                          const string& /*methodPrefix*/) const
  159. {
  160.     return GetCType(ns);
  161. }
  162. string CStdTypeStrings::GetRef(const CNamespace& ns) const
  163. {
  164.     return "STD, ("+GetCType(ns)+')';
  165. }
  166. string CStdTypeStrings::GetInitializer(void) const
  167. {
  168.     return "0";
  169. }
  170. CTypeStrings::EKind CNullTypeStrings::GetKind(void) const
  171. {
  172.     return eKindStd;
  173. }
  174. bool CNullTypeStrings::HaveSpecialRef(void) const
  175. {
  176.     return true;
  177. }
  178. string CNullTypeStrings::GetCType(const CNamespace& /*ns*/) const
  179. {
  180.     return "bool";
  181. }
  182. string CNullTypeStrings::GetPrefixedCType(const CNamespace& ns,
  183.                                           const string& /*methodPrefix*/) const
  184. {
  185.     return GetCType(ns);
  186. }
  187. string CNullTypeStrings::GetRef(const CNamespace& /*ns*/) const
  188. {
  189.     return "null, ()";
  190. }
  191. string CNullTypeStrings::GetInitializer(void) const
  192. {
  193.     return "true";
  194. }
  195. CStringTypeStrings::CStringTypeStrings(const string& type)
  196.     : CParent(type)
  197. {
  198. }
  199. CTypeStrings::EKind CStringTypeStrings::GetKind(void) const
  200. {
  201.     return eKindString;
  202. }
  203. string CStringTypeStrings::GetInitializer(void) const
  204. {
  205.     return string();
  206. }
  207. string CStringTypeStrings::GetResetCode(const string& var) const
  208. {
  209.     return var+".erase();n";
  210. }
  211. void CStringTypeStrings::GenerateTypeCode(CClassContext& ctx) const
  212. {
  213.     ctx.HPPIncludes().insert("<string>");
  214. }
  215. CStringStoreTypeStrings::CStringStoreTypeStrings(const string& type)
  216.     : CParent(type)
  217. {
  218. }
  219. bool CStringStoreTypeStrings::HaveSpecialRef(void) const
  220. {
  221.     return true;
  222. }
  223. string CStringStoreTypeStrings::GetRef(const CNamespace& /*ns*/) const
  224. {
  225.     return "StringStore, ()";
  226. }
  227. CAnyContentTypeStrings::CAnyContentTypeStrings(const string& type)
  228.     : CParent(type)
  229. {
  230. }
  231. CTypeStrings::EKind CAnyContentTypeStrings::GetKind(void) const
  232. {
  233.     return eKindOther;
  234. }
  235. string CAnyContentTypeStrings::GetInitializer(void) const
  236. {
  237.     return string();
  238. }
  239. string CAnyContentTypeStrings::GetResetCode(const string& var) const
  240. {
  241.     return var+".Reset();n";
  242. }
  243. void CAnyContentTypeStrings::GenerateTypeCode(CClassContext& /*ctx*/) const
  244. {
  245. }
  246. END_NCBI_SCOPE