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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: value.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:44:04  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.23
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: value.cpp,v 1000.2 2004/06/01 19:44:04 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. *   Value definition (used in DEFAULT clause)
  38. *
  39. * ---------------------------------------------------------------------------
  40. * $Log: value.cpp,v $
  41. * Revision 1000.2  2004/06/01 19:44:04  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  2004/02/25 19:45:19  gouriano
  48. * Made it possible to define DEFAULT for data members of type REAL
  49. *
  50. * Revision 1.21  2003/10/02 19:40:14  gouriano
  51. * properly handle invalid enumeration values in ASN spec
  52. *
  53. * Revision 1.20  2003/06/17 18:50:48  gouriano
  54. * added missing EMPTY_TEMPLATE macro in few places
  55. *
  56. * Revision 1.19  2003/06/16 14:41:05  gouriano
  57. * added possibility to convert DTD to XML schema
  58. *
  59. * Revision 1.18  2003/03/11 20:06:47  kuznets
  60. * iterate -> ITERATE
  61. *
  62. * Revision 1.17  2001/08/31 20:05:46  ucko
  63. * Fix ICC build.
  64. *
  65. * Revision 1.16  2001/05/17 15:07:12  lavr
  66. * Typos corrected
  67. *
  68. * Revision 1.15  2000/12/15 15:38:51  vasilche
  69. * Added support of Int8 and long double.
  70. * Added support of BigInt ASN.1 extension - mapped to Int8.
  71. * Enum values now have type Int4 instead of long.
  72. *
  73. * Revision 1.14  2000/11/29 17:42:46  vasilche
  74. * Added CComment class for storing/printing ASN.1/XML module comments.
  75. * Added srcutil.hpp file to reduce file dependency.
  76. *
  77. * Revision 1.13  2000/11/15 20:34:56  vasilche
  78. * Added user comments to ENUMERATED types.
  79. * Added storing of user comments to ASN.1 module definition.
  80. *
  81. * Revision 1.12  2000/08/25 15:59:25  vasilche
  82. * Renamed directory tool -> datatool.
  83. *
  84. * Revision 1.11  2000/04/07 19:26:38  vasilche
  85. * Added namespace support to datatool.
  86. * By default with argument -oR datatool will generate objects in namespace
  87. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  88. * Datatool's classes also moved to NCBI namespace.
  89. *
  90. * Revision 1.10  2000/02/01 21:48:10  vasilche
  91. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  92. * Removed CMemberInfo subclasses.
  93. * Added support for DEFAULT/OPTIONAL members.
  94. * Changed class generation.
  95. * Moved datatool headers to include/internal/serial/tool.
  96. *
  97. * Revision 1.9  1999/12/29 16:01:53  vasilche
  98. * Added explicit virtual destructors.
  99. * Resolved overloading of InternalResolve.
  100. *
  101. * Revision 1.8  1999/11/15 19:36:21  vasilche
  102. * Fixed warnings on GCC
  103. *
  104. * ===========================================================================
  105. */
  106. #include <ncbi_pch.hpp>
  107. #include <corelib/ncbidiag.hpp>
  108. #include <serial/datatool/value.hpp>
  109. #include <serial/datatool/module.hpp>
  110. #include <serial/datatool/srcutil.hpp>
  111. BEGIN_NCBI_SCOPE
  112. CDataValue::CDataValue(void)
  113.     : m_Module(0), m_SourceLine(0)
  114. {
  115. }
  116. CDataValue::~CDataValue(void)
  117. {
  118. }
  119. void CDataValue::SetModule(const CDataTypeModule* module) const
  120. {
  121.     _ASSERT(module != 0);
  122.     _ASSERT(m_Module == 0);
  123.     m_Module = module;
  124. }
  125. const string& CDataValue::GetSourceFileName(void) const
  126. {
  127.     _ASSERT(m_Module != 0);
  128.     return m_Module->GetSourceFileName();
  129. }
  130. void CDataValue::SetSourceLine(int line)
  131. {
  132.     m_SourceLine = line;
  133. }
  134. string CDataValue::LocationString(void) const
  135. {
  136.     return GetSourceFileName() + ": " + NStr::IntToString(GetSourceLine());
  137. }
  138. void CDataValue::Warning(const string& mess) const
  139. {
  140.     CNcbiDiag() << LocationString() << ": " << mess;
  141. }
  142. bool CDataValue::IsComplex(void) const
  143. {
  144.     return false;
  145. }
  146. CNullDataValue::~CNullDataValue(void)
  147. {
  148. }
  149. void CNullDataValue::PrintASN(CNcbiOstream& out, int ) const
  150. {
  151.     out << "NULL";
  152. }
  153. string CNullDataValue::GetXmlString(void) const
  154. {
  155.     return kEmptyStr;
  156. }
  157. EMPTY_TEMPLATE
  158. void CDataValueTmpl<bool>::PrintASN(CNcbiOstream& out, int ) const
  159. {
  160.     out << (GetValue()? "TRUE": "FALSE");
  161. }
  162. EMPTY_TEMPLATE
  163. string CDataValueTmpl<bool>::GetXmlString(void) const
  164. {
  165.     return (GetValue()? "true": "false");
  166. }
  167. EMPTY_TEMPLATE
  168. void CDataValueTmpl<Int4>::PrintASN(CNcbiOstream& out, int ) const
  169. {
  170.     out << GetValue();
  171. }
  172. EMPTY_TEMPLATE
  173. string CDataValueTmpl<Int4>::GetXmlString(void) const
  174. {
  175.     CNcbiOstrstream buffer;
  176.     PrintASN( buffer, 0);
  177.     return CNcbiOstrstreamToString(buffer);
  178. }
  179. EMPTY_TEMPLATE
  180. void CDataValueTmpl<double>::PrintASN(CNcbiOstream& out, int ) const
  181. {
  182.     out << GetValue();
  183. }
  184. EMPTY_TEMPLATE
  185. string CDataValueTmpl<double>::GetXmlString(void) const
  186. {
  187.     CNcbiOstrstream buffer;
  188.     PrintASN( buffer, 0);
  189.     return CNcbiOstrstreamToString(buffer);
  190. }
  191. EMPTY_TEMPLATE
  192. void CDataValueTmpl<string>::PrintASN(CNcbiOstream& out, int ) const
  193. {
  194.     out << '"';
  195.     ITERATE ( string, i, GetValue() ) {
  196.         char c = *i;
  197.         if ( c == '"' )
  198.             out << """";
  199.         else
  200.             out << c;
  201.     }
  202.     out << '"';
  203. }
  204. EMPTY_TEMPLATE
  205. string CDataValueTmpl<string>::GetXmlString(void) const
  206. {
  207.     CNcbiOstrstream buffer;
  208.     PrintASN( buffer, 0);
  209.     return CNcbiOstrstreamToString(buffer);
  210. }
  211. CBitStringDataValue::~CBitStringDataValue(void)
  212. {
  213. }
  214. void CBitStringDataValue::PrintASN(CNcbiOstream& out, int ) const
  215. {
  216.     out << GetValue();
  217. }
  218. string CBitStringDataValue::GetXmlString(void) const
  219. {
  220.     CNcbiOstrstream buffer;
  221.     PrintASN( buffer, 0);
  222.     return CNcbiOstrstreamToString(buffer);
  223. }
  224. CIdDataValue::~CIdDataValue(void)
  225. {
  226. }
  227. void CIdDataValue::PrintASN(CNcbiOstream& out, int ) const
  228. {
  229.     out << GetValue();
  230. }
  231. string CIdDataValue::GetXmlString(void) const
  232. {
  233.     CNcbiOstrstream buffer;
  234.     PrintASN( buffer, 0);
  235.     return CNcbiOstrstreamToString(buffer);
  236. }
  237. CNamedDataValue::~CNamedDataValue(void)
  238. {
  239. }
  240. void CNamedDataValue::PrintASN(CNcbiOstream& out, int indent) const
  241. {
  242.     out << GetName();
  243.     if ( GetValue().IsComplex() ) {
  244.         indent++;
  245.         PrintASNNewLine(out, indent);
  246.     }
  247.     else {
  248.         out << ' ';
  249.     }
  250.     GetValue().PrintASN(out, indent);
  251. }
  252. string CNamedDataValue::GetXmlString(void) const
  253. {
  254.     return "not implemented";
  255. }
  256. bool CNamedDataValue::IsComplex(void) const
  257. {
  258.     return true;
  259. }
  260. CBlockDataValue::~CBlockDataValue(void)
  261. {
  262. }
  263. void CBlockDataValue::PrintASN(CNcbiOstream& out, int indent) const
  264. {
  265.     out << '{';
  266.     indent++;
  267.     for ( TValues::const_iterator i = GetValues().begin();
  268.           i != GetValues().end(); ++i ) {
  269.         if ( i != GetValues().begin() )
  270.             out << ',';
  271.         PrintASNNewLine(out, indent);
  272.         (*i)->PrintASN(out, indent);
  273.     }
  274.     PrintASNNewLine(out, indent - 1);
  275.     out << '}';
  276. }
  277. string CBlockDataValue::GetXmlString(void) const
  278. {
  279.     return "not implemented";
  280. }
  281. bool CBlockDataValue::IsComplex(void) const
  282. {
  283.     return true;
  284. }
  285. END_NCBI_SCOPE