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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: statictype.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:43:46  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.35
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: statictype.cpp,v 1000.2 2004/06/01 19:43:46 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 descriptions of predefined types
  38. *
  39. * ---------------------------------------------------------------------------
  40. * $Log: statictype.cpp,v $
  41. * Revision 1000.2  2004/06/01 19:43:46  gouriano
  42. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.35
  43. *
  44. * Revision 1.35  2004/05/17 21:03:14  gorelenk
  45. * Added include of PCH ncbi_pch.hpp
  46. *
  47. * Revision 1.34  2004/05/12 18:33:01  gouriano
  48. * Added type conversion check (when using _type DEF file directive)
  49. *
  50. * Revision 1.33  2004/04/02 16:55:32  gouriano
  51. * Added CRealDataType::CreateDefault method
  52. *
  53. * Revision 1.32  2004/02/25 19:45:19  gouriano
  54. * Made it possible to define DEFAULT for data members of type REAL
  55. *
  56. * Revision 1.31  2004/01/22 20:44:25  gouriano
  57. * Corrected generation of XML schema for boolean types
  58. *
  59. * Revision 1.30  2003/12/04 20:56:59  gouriano
  60. * corrected DTD generation for Bool type
  61. *
  62. * Revision 1.29  2003/08/13 18:22:31  gouriano
  63. * added conversion of ANY type DTD element to schema
  64. *
  65. * Revision 1.28  2003/08/13 15:45:54  gouriano
  66. * implemented generation of code, which uses AnyContent objects
  67. *
  68. * Revision 1.27  2003/06/16 14:41:05  gouriano
  69. * added possibility to convert DTD to XML schema
  70. *
  71. * Revision 1.26  2003/05/22 20:10:25  gouriano
  72. * added UTF8 strings
  73. *
  74. * Revision 1.25  2003/05/14 14:42:22  gouriano
  75. * added generation of XML schema
  76. *
  77. * Revision 1.24  2003/03/10 18:55:19  gouriano
  78. * use new structured exceptions (based on CException)
  79. *
  80. * Revision 1.23  2003/02/10 17:56:15  gouriano
  81. * make it possible to disable scope prefixes when reading and writing objects generated from ASN specification in XML format, or when converting an ASN spec into DTD.
  82. *
  83. * Revision 1.22  2001/02/15 21:39:14  kholodov
  84. * Modified: pointer to parent CDataMember added to CDataType class.
  85. * Modified: default value for BOOLEAN type in DTD is copied from ASN.1 spec.
  86. *
  87. * Revision 1.21  2000/12/15 15:38:51  vasilche
  88. * Added support of Int8 and long double.
  89. * Added support of BigInt ASN.1 extension - mapped to Int8.
  90. * Enum values now have type Int4 instead of long.
  91. *
  92. * Revision 1.20  2000/11/20 17:26:33  vasilche
  93. * Fixed warnings on 64 bit platforms.
  94. * Updated names of config variables.
  95. *
  96. * Revision 1.19  2000/11/15 20:34:55  vasilche
  97. * Added user comments to ENUMERATED types.
  98. * Added storing of user comments to ASN.1 module definition.
  99. *
  100. * Revision 1.18  2000/11/14 21:41:26  vasilche
  101. * Added preserving of ASN.1 definition comments.
  102. *
  103. * Revision 1.17  2000/11/08 17:02:52  vasilche
  104. * Added generation of modular DTD files.
  105. *
  106. * Revision 1.16  2000/11/07 17:26:26  vasilche
  107. * Added module names to CTypeInfo and CEnumeratedTypeValues
  108. * Added possibility to set include directory for whole module
  109. *
  110. * Revision 1.15  2000/10/13 16:28:45  vasilche
  111. * Reduced header dependency.
  112. * Avoid use of templates with virtual methods.
  113. * Reduced amount of different maps used.
  114. * All this lead to smaller compiled code size (libraries and programs).
  115. *
  116. * Revision 1.14  2000/10/03 17:22:50  vasilche
  117. * Reduced header dependency.
  118. * Reduced size of debug libraries on WorkShop by 3 times.
  119. * Fixed tag allocation for parent classes.
  120. * Fixed CObject allocation/deallocation in streams.
  121. * Moved instantiation of several templates in separate source file.
  122. *
  123. * Revision 1.13  2000/08/25 15:59:24  vasilche
  124. * Renamed directory tool -> datatool.
  125. *
  126. * Revision 1.12  2000/07/03 18:42:57  vasilche
  127. * Added interface to typeinfo via CObjectInfo and CConstObjectInfo.
  128. *
  129. * Revision 1.11  2000/05/24 20:09:29  vasilche
  130. * Implemented DTD generation.
  131. *
  132. * Revision 1.10  2000/04/07 19:26:33  vasilche
  133. * Added namespace support to datatool.
  134. * By default with argument -oR datatool will generate objects in namespace
  135. * NCBI_NS_NCBI::objects (aka ncbi::objects).
  136. * Datatool's classes also moved to NCBI namespace.
  137. *
  138. * Revision 1.9  2000/03/10 15:00:46  vasilche
  139. * Fixed OPTIONAL members reading.
  140. *
  141. * Revision 1.8  2000/02/01 21:48:05  vasilche
  142. * Added CGeneratedChoiceTypeInfo for generated choice classes.
  143. * Removed CMemberInfo subclasses.
  144. * Added support for DEFAULT/OPTIONAL members.
  145. * Changed class generation.
  146. * Moved datatool headers to include/internal/serial/tool.
  147. *
  148. * Revision 1.7  2000/01/10 19:46:46  vasilche
  149. * Fixed encoding/decoding of REAL type.
  150. * Fixed encoding/decoding of StringStore.
  151. * Fixed encoding/decoding of NULL type.
  152. * Fixed error reporting.
  153. * Reduced object map (only classes).
  154. *
  155. * Revision 1.6  1999/12/03 21:42:13  vasilche
  156. * Fixed conflict of enums in choices.
  157. *
  158. * Revision 1.5  1999/12/01 17:36:26  vasilche
  159. * Fixed CHOICE processing.
  160. *
  161. * Revision 1.4  1999/11/18 17:13:06  vasilche
  162. * Fixed generation of ENUMERATED CHOICE and VisibleString.
  163. * Added generation of initializers to zero for primitive types and pointers.
  164. *
  165. * Revision 1.3  1999/11/16 15:41:16  vasilche
  166. * Added plain pointer choice.
  167. * By default we use C pointer instead of auto_ptr.
  168. * Start adding initializers.
  169. *
  170. * Revision 1.2  1999/11/15 19:36:19  vasilche
  171. * Fixed warnings on GCC
  172. *
  173. * ===========================================================================
  174. */
  175. #include <ncbi_pch.hpp>
  176. #include <serial/datatool/exceptions.hpp>
  177. #include <serial/datatool/statictype.hpp>
  178. #include <serial/datatool/stdstr.hpp>
  179. #include <serial/datatool/stlstr.hpp>
  180. #include <serial/datatool/value.hpp>
  181. #include <serial/datatool/blocktype.hpp>
  182. #include <serial/stdtypes.hpp>
  183. #include <serial/stltypes.hpp>
  184. #include <serial/autoptrinfo.hpp>
  185. #include <typeinfo>
  186. #include <vector>
  187. BEGIN_NCBI_SCOPE
  188. TObjectPtr CStaticDataType::CreateDefault(const CDataValue& ) const
  189. {
  190.     NCBI_THROW(CDatatoolException, eNotImplemented,
  191.                  GetASNKeyword() + string(" default not implemented"));
  192. }
  193. void CStaticDataType::PrintASN(CNcbiOstream& out, int /*indent*/) const
  194. {
  195.     out << GetASNKeyword();
  196. }
  197. void CStaticDataType::PrintDTDElement(CNcbiOstream& out) const
  198. {
  199.     out <<
  200.         "<!ELEMENT "<<XmlTagName()<<" "<<GetXMLContents()<<">";
  201. }
  202. // XML schema generator submitted by
  203. // Marc Dumontier, Blueprint initiative, dumontier@mshri.on.ca
  204. // modified by Andrei Gourianov, gouriano@ncbi
  205. void CStaticDataType::PrintXMLSchemaElement(CNcbiOstream& out) const
  206. {
  207.     string tag( XmlTagName());
  208.     PrintXMLSchemaElementWithTag( out, tag);
  209. }
  210. void CStaticDataType::PrintXMLSchemaElementWithTag(
  211.     CNcbiOstream& out, const string& tag) const
  212. {
  213.     string tagOpen("<xs:element"), tagClose("</xs:element"), use;
  214.     if (GetEnforcedStdXml() &&
  215.         GetParentType() && 
  216.         GetParentType()->GetDataMember() &&
  217.         GetParentType()->GetDataMember()->Attlist()) {
  218.         const CDataMember* mem = GetDataMember();
  219.         tagOpen = "        <xs:attribute";
  220.         tagClose= "        </xs:attribute";
  221.         if (mem->Optional()) {
  222.             use = "optional";
  223.             if (mem->GetDefault()) {
  224.                 use += "" default="" + mem->GetDefault()->GetXmlString();
  225.             }
  226.         } else {
  227.             use = "required";
  228.         }
  229.     }
  230.     string type;
  231.     string contents;
  232.     GetXMLSchemaContents(type,contents);
  233.     out << tagOpen << " name="" << tag << """;
  234.     if (!type.empty()) {
  235.         out << " type="" << type << """;
  236.     }
  237.     if (!use.empty()) {
  238.         out << " use="" << use << """;
  239.     }
  240.     if (!contents.empty()) {
  241.         out << ">n" << contents << tagClose << ">n";
  242.     } else {
  243.         out << "/>n";
  244.     }
  245. }
  246. AutoPtr<CTypeStrings> CStaticDataType::GetFullCType(void) const
  247. {
  248.     string type = GetAndVerifyVar("_type");
  249.     if ( type.empty() )
  250.         type = GetDefaultCType();
  251.     return AutoPtr<CTypeStrings>(new CStdTypeStrings(type));
  252. }
  253. const char* CNullDataType::GetASNKeyword(void) const
  254. {
  255.     return "NULL";
  256. }
  257. const char* CNullDataType::GetXMLContents(void) const
  258. {
  259.     return "%NULL;";
  260. }
  261. void CNullDataType::GetXMLSchemaContents(string& type, string& contents) const
  262. {
  263.     type.erase();
  264.     contents = "  <xs:complexType/>n";
  265. }
  266. bool CNullDataType::CheckValue(const CDataValue& value) const
  267. {
  268.     CheckValueType(value, CNullDataValue, "NULL");
  269.     return true;
  270. }
  271. TObjectPtr CNullDataType::CreateDefault(const CDataValue& ) const
  272. {
  273.     NCBI_THROW(CDatatoolException, eNotImplemented,
  274.         "NULL cannot have DEFAULT");
  275. }
  276. CTypeRef CNullDataType::GetTypeInfo(void)
  277. {
  278.     if ( HaveModuleName() )
  279.         return UpdateModuleName(CStdTypeInfo<bool>::CreateTypeInfoNullBool());
  280.     return &CStdTypeInfo<bool>::GetTypeInfoNullBool;
  281. }
  282. AutoPtr<CTypeStrings> CNullDataType::GetFullCType(void) const
  283. {
  284.     return AutoPtr<CTypeStrings>(new CNullTypeStrings());
  285. }
  286. const char* CNullDataType::GetDefaultCType(void) const
  287. {
  288.     return "bool";
  289. }
  290. const char* CBoolDataType::GetASNKeyword(void) const
  291. {
  292.     return "BOOLEAN";
  293. }
  294. const char* CBoolDataType::GetXMLContents(void) const
  295. {
  296.     return "%BOOLEAN; ";
  297. }
  298. void CBoolDataType::GetXMLSchemaContents(string& type, string& contents) const
  299. {
  300.     type.erase();
  301.     const CBoolDataValue *val = GetDataMember() ?
  302.         dynamic_cast<const CBoolDataValue*>(GetDataMember()->GetDefault()) : 0;
  303.     contents =
  304.         "  <xs:complexType>n"
  305.         "    <xs:attribute name="value" use=";
  306.     if (val) {
  307.         contents += ""optional" default=";
  308.         contents += val->GetValue() ? ""true"" : ""false"";
  309.     } else {
  310.         contents += ""required"";
  311.     }
  312.     contents += ">n"
  313.         "      <xs:simpleType>n"
  314.         "        <xs:restriction base="xs:string">n"
  315.         "          <xs:enumeration value="true"/>n"
  316.         "          <xs:enumeration value="false"/>n"
  317.         "        </xs:restriction>n"
  318.         "      </xs:simpleType>n"
  319.         "    </xs:attribute>n"
  320.         "  </xs:complexType>n";
  321. }
  322. void CBoolDataType::PrintDTDExtra(CNcbiOstream& out) const
  323. {
  324.     const char *attr;
  325.     const CBoolDataValue *val = GetDataMember() ?
  326.         dynamic_cast<const CBoolDataValue*>(GetDataMember()->GetDefault()) : 0;
  327.     if(val) {
  328.         attr = val->GetValue() ? ""true"" : ""false"";
  329.     }
  330.     else {
  331.         attr = "#REQUIRED";
  332.     }
  333.     out <<
  334.       "<!ATTLIST "<<XmlTagName()<<" value ( true | false ) " 
  335. << attr << " >n"
  336.         "n";
  337. }
  338. bool CBoolDataType::CheckValue(const CDataValue& value) const
  339. {
  340.     CheckValueType(value, CBoolDataValue, "BOOLEAN");
  341.     return true;
  342. }
  343. TObjectPtr CBoolDataType::CreateDefault(const CDataValue& value) const
  344. {
  345.     return new bool(dynamic_cast<const CBoolDataValue&>(value).GetValue());
  346. }
  347. string CBoolDataType::GetDefaultString(const CDataValue& value) const
  348. {
  349.     return (dynamic_cast<const CBoolDataValue&>(value).GetValue()?
  350.             "true": "false");
  351. }
  352. CTypeRef CBoolDataType::GetTypeInfo(void)
  353. {
  354.     if ( HaveModuleName() )
  355.         return UpdateModuleName(CStdTypeInfo<bool>::CreateTypeInfo());
  356.     return &CStdTypeInfo<bool>::GetTypeInfo;
  357. }
  358. const char* CBoolDataType::GetDefaultCType(void) const
  359. {
  360.     return "bool";
  361. }
  362. CRealDataType::CRealDataType(void)
  363. {
  364.     ForbidVar("_type", "string");
  365. }
  366. const char* CRealDataType::GetASNKeyword(void) const
  367. {
  368.     return "REAL";
  369. }
  370. const char* CRealDataType::GetXMLContents(void) const
  371. {
  372.     return "( %REAL; )";
  373. }
  374. void CRealDataType::GetXMLSchemaContents(string& type, string& contents) const
  375. {
  376.     type = "xs:decimal";
  377.     contents.erase();
  378. }
  379. bool CRealDataType::CheckValue(const CDataValue& value) const
  380. {
  381.     const CBlockDataValue* block = dynamic_cast<const CBlockDataValue*>(&value);
  382.     if ( !block ) {
  383.         return dynamic_cast<const CDoubleDataValue*>(&value) != 0;
  384.     }
  385.     if ( block->GetValues().size() != 3 ) {
  386.         value.Warning("wrong number of elements in REAL value");
  387.         return false;
  388.     }
  389.     for ( CBlockDataValue::TValues::const_iterator i = block->GetValues().begin();
  390.           i != block->GetValues().end(); ++i ) {
  391.         CheckValueType(**i, CIntDataValue, "INTEGER");
  392.     }
  393.     return true;
  394. }
  395. TObjectPtr CRealDataType::CreateDefault(const CDataValue& value) const
  396. {
  397.     return new double(dynamic_cast<const CDoubleDataValue&>(value).GetValue());
  398. }
  399. string CRealDataType::GetDefaultString(const CDataValue& value) const
  400. {
  401.     const CDoubleDataValue* dbl = dynamic_cast<const CDoubleDataValue*>(&value);
  402.     if (dbl) {
  403.         return NStr::DoubleToString(dbl->GetValue());
  404.     }
  405.     value.Warning("REAL value expected");
  406.     return kEmptyStr;
  407. }
  408. TTypeInfo CRealDataType::GetRealTypeInfo(void)
  409. {
  410.     if ( HaveModuleName() )
  411.         return UpdateModuleName(CStdTypeInfo<double>::CreateTypeInfo());
  412.     return CStdTypeInfo<double>::GetTypeInfo();
  413. }
  414. const char* CRealDataType::GetDefaultCType(void) const
  415. {
  416.     return "double";
  417. }
  418. CStringDataType::CStringDataType(EType type)
  419.     : m_Type(type)
  420. {
  421.     ForbidVar("_type", "short");
  422.     ForbidVar("_type", "int");
  423.     ForbidVar("_type", "long");
  424.     ForbidVar("_type", "unsigned");
  425.     ForbidVar("_type", "unsigned short");
  426.     ForbidVar("_type", "unsigned int");
  427.     ForbidVar("_type", "unsigned long");
  428. }
  429. const char* CStringDataType::GetASNKeyword(void) const
  430. {
  431.     if (m_Type == eStringTypeUTF8) {
  432.         return "UTF8String";
  433.     }
  434.     return "VisibleString";
  435. }
  436. const char* CStringDataType::GetXMLContents(void) const
  437. {
  438.     return "( #PCDATA )";
  439. }
  440. void CStringDataType::GetXMLSchemaContents(string& type, string& contents) const
  441. {
  442.     type = "xs:string";
  443.     contents.erase();
  444. }
  445. bool CStringDataType::CheckValue(const CDataValue& value) const
  446. {
  447.     CheckValueType(value, CStringDataValue, "string");
  448.     return true;
  449. }
  450. TObjectPtr CStringDataType::CreateDefault(const CDataValue& value) const
  451. {
  452.     if (m_Type == eStringTypeUTF8) {
  453.         return new (CStringUTF8*)(new CStringUTF8(dynamic_cast<const CStringDataValue&>(value).GetValue()));
  454.     }
  455.     return new (string*)(new string(dynamic_cast<const CStringDataValue&>(value).GetValue()));
  456. }
  457. string CStringDataType::GetDefaultString(const CDataValue& value) const
  458. {
  459.     string s;
  460.     s += '"';
  461.     const string& v = dynamic_cast<const CStringDataValue&>(value).GetValue();
  462.     for ( string::const_iterator i = v.begin(); i != v.end(); ++i ) {
  463.         switch ( *i ) {
  464.         case 'r':
  465.             s += "\r";
  466.             break;
  467.         case 'n':
  468.             s += "\n";
  469.             break;
  470.         case '"':
  471.             s += "\"";
  472.             break;
  473.         case '\':
  474.             s += "\\";
  475.             break;
  476.         default:
  477.             s += *i;
  478.         }
  479.     }
  480.     return s + '"';
  481. }
  482. TTypeInfo CStringDataType::GetRealTypeInfo(void)
  483. {
  484.     if ( HaveModuleName() )
  485.         return UpdateModuleName(CStdTypeInfo<string>::CreateTypeInfo());
  486.     return CStdTypeInfo<string>::GetTypeInfo();
  487. }
  488. bool CStringDataType::NeedAutoPointer(TTypeInfo /*typeInfo*/) const
  489. {
  490.     return true;
  491. }
  492. AutoPtr<CTypeStrings> CStringDataType::GetFullCType(void) const
  493. {
  494.     string type = GetAndVerifyVar("_type");
  495.     if ( type.empty() )
  496.         type = GetDefaultCType();
  497.     return AutoPtr<CTypeStrings>(new CStringTypeStrings(type));
  498. }
  499. const char* CStringDataType::GetDefaultCType(void) const
  500. {
  501.     if (m_Type == eStringTypeUTF8) {
  502.         return "ncbi::CStringUTF8";
  503.     }
  504.     return "NCBI_NS_STD::string";
  505. }
  506. CStringStoreDataType::CStringStoreDataType(void)
  507. {
  508. }
  509. const char* CStringStoreDataType::GetASNKeyword(void) const
  510. {
  511.     return "StringStore";
  512. }
  513. TTypeInfo CStringStoreDataType::GetRealTypeInfo(void)
  514. {
  515.     return CStdTypeInfo<string>::GetTypeInfoStringStore();
  516. }
  517. bool CStringStoreDataType::NeedAutoPointer(TTypeInfo /*typeInfo*/) const
  518. {
  519.     return true;
  520. }
  521. AutoPtr<CTypeStrings> CStringStoreDataType::GetFullCType(void) const
  522. {
  523.     string type = GetAndVerifyVar("_type");
  524.     if ( type.empty() )
  525.         type = GetDefaultCType();
  526.     return AutoPtr<CTypeStrings>(new CStringStoreTypeStrings(type));
  527. }
  528. const char* CBitStringDataType::GetASNKeyword(void) const
  529. {
  530.     return "BIT STRING";
  531. }
  532. bool CBitStringDataType::CheckValue(const CDataValue& value) const
  533. {
  534.     CheckValueType(value, CBitStringDataValue, "BIT STRING");
  535.     return true;
  536. }
  537. const char* CBitStringDataType::GetXMLContents(void) const
  538. {
  539.     return "( %BITS; )";
  540. }
  541. void CBitStringDataType::GetXMLSchemaContents(string& type, string& contents) const
  542. {
  543.     type = "xs:hexBinary";
  544.     contents.erase();
  545. }
  546. const char* COctetStringDataType::GetASNKeyword(void) const
  547. {
  548.     return "OCTET STRING";
  549. }
  550. const char* COctetStringDataType::GetDefaultCType(void) const
  551. {
  552.     return "NCBI_NS_STD::vector<char>";
  553. }
  554. const char* COctetStringDataType::GetXMLContents(void) const
  555. {
  556.     return "( %OCTETS; )";
  557. }
  558. void COctetStringDataType::GetXMLSchemaContents(string& type, string& contents) const
  559. {
  560.     type = "xs:hexBinary";
  561.     contents.erase();
  562. }
  563. bool COctetStringDataType::CheckValue(const CDataValue& value) const
  564. {
  565.     CheckValueType(value, COctetStringDataType, "OCTET STRING");
  566.     return true;
  567. }
  568. TTypeInfo COctetStringDataType::GetRealTypeInfo(void)
  569. {
  570.     if ( HaveModuleName() )
  571.         return UpdateModuleName(CStdTypeInfo<vector<char> >::CreateTypeInfo());
  572.     return CStdTypeInfo< vector<char> >::GetTypeInfo();
  573. }
  574. bool COctetStringDataType::NeedAutoPointer(TTypeInfo /*typeInfo*/) const
  575. {
  576.     return true;
  577. }
  578. AutoPtr<CTypeStrings> COctetStringDataType::GetFullCType(void) const
  579. {
  580.     string charType = GetVar("_char");
  581.     if ( charType.empty() )
  582.         charType = "char";
  583.     return AutoPtr<CTypeStrings>(new CVectorTypeStrings(charType));
  584. }
  585. CIntDataType::CIntDataType(void)
  586. {
  587.     ForbidVar("_type", "string");
  588. }
  589. const char* CIntDataType::GetASNKeyword(void) const
  590. {
  591.     return "INTEGER";
  592. }
  593. const char* CIntDataType::GetXMLContents(void) const
  594. {
  595.     return "( %INTEGER; )";
  596. }
  597. void CIntDataType::GetXMLSchemaContents(string& type, string& contents) const
  598. {
  599.     type = "xs:integer";
  600.     contents.erase();
  601. }
  602. bool CIntDataType::CheckValue(const CDataValue& value) const
  603. {
  604.     CheckValueType(value, CIntDataValue, "INTEGER");
  605.     return true;
  606. }
  607. TObjectPtr CIntDataType::CreateDefault(const CDataValue& value) const
  608. {
  609.     return new Int4(dynamic_cast<const CIntDataValue&>(value).GetValue());
  610. }
  611. string CIntDataType::GetDefaultString(const CDataValue& value) const
  612. {
  613.     return NStr::IntToString(dynamic_cast<const CIntDataValue&>(value).GetValue());
  614. }
  615. CTypeRef CIntDataType::GetTypeInfo(void)
  616. {
  617.     if ( HaveModuleName() )
  618.         return UpdateModuleName(CStdTypeInfo<Int4>::CreateTypeInfo());
  619.     return &CStdTypeInfo<Int4>::GetTypeInfo;
  620. }
  621. const char* CIntDataType::GetDefaultCType(void) const
  622. {
  623.     return "int";
  624. }
  625. const char* CBigIntDataType::GetASNKeyword(void) const
  626. {
  627.     return "BigInt";
  628. }
  629. const char* CBigIntDataType::GetXMLContents(void) const
  630. {
  631.     return "( %INTEGER; )";
  632. }
  633. void CBigIntDataType::GetXMLSchemaContents(string& type, string& contents) const
  634. {
  635.     type = "xs:integer";
  636.     contents.erase();
  637. }
  638. bool CBigIntDataType::CheckValue(const CDataValue& value) const
  639. {
  640.     CheckValueType(value, CIntDataValue, "BigInt");
  641.     return true;
  642. }
  643. TObjectPtr CBigIntDataType::CreateDefault(const CDataValue& value) const
  644. {
  645.     return new Int8(dynamic_cast<const CIntDataValue&>(value).GetValue());
  646. }
  647. string CBigIntDataType::GetDefaultString(const CDataValue& value) const
  648. {
  649.     return NStr::IntToString(dynamic_cast<const CIntDataValue&>(value).GetValue());
  650. }
  651. CTypeRef CBigIntDataType::GetTypeInfo(void)
  652. {
  653.     if ( HaveModuleName() )
  654.         return UpdateModuleName(CStdTypeInfo<Int8>::CreateTypeInfo());
  655.     return &CStdTypeInfo<Int8>::GetTypeInfo;
  656. }
  657. const char* CBigIntDataType::GetDefaultCType(void) const
  658. {
  659.     return "Int8";
  660. }
  661. bool CAnyContentDataType::CheckValue(const CDataValue& value) const
  662. {
  663.     return true;
  664. }
  665. void CAnyContentDataType::PrintASN(CNcbiOstream& out, int indent) const
  666. {
  667.     out << GetASNKeyword();
  668. }
  669. void CAnyContentDataType::PrintDTDElement(CNcbiOstream& out) const
  670. {
  671.     out <<
  672.         "<!ELEMENT "<<XmlTagName()<<" "<<GetXMLContents()<<">";
  673. }
  674. void CAnyContentDataType::PrintXMLSchemaElement(CNcbiOstream& out) const
  675. {
  676.     out << 
  677.         "<xs:element name="" << XmlTagName() << "">n"
  678.         "  <xs:complexType>n"
  679.         "    <xs:sequence>n"
  680.         "      <xs:any processContext="lax"/>n"
  681.         "    </xs:sequence>n"
  682.         "  </xs:complexType>n"
  683.         "</xs:element>n";
  684. }
  685. TObjectPtr CAnyContentDataType::CreateDefault(const CDataValue& value) const
  686. {
  687.     return new (string*)(new string(dynamic_cast<const CStringDataValue&>(value).GetValue()));
  688. }
  689. AutoPtr<CTypeStrings> CAnyContentDataType::GetFullCType(void) const
  690. {
  691. // TO BE CHANGED !!!
  692.     string type = GetAndVerifyVar("_type");
  693.     if ( type.empty() )
  694.         type = GetDefaultCType();
  695.     return AutoPtr<CTypeStrings>(new CAnyContentTypeStrings(type));
  696. }
  697. const char* CAnyContentDataType::GetDefaultCType(void) const
  698. {
  699.     return "ncbi::CAnyContentObject";
  700. }
  701. const char* CAnyContentDataType::GetASNKeyword(void) const
  702. {
  703. // not exactly, but...
  704. // (ASN.1 does not seem to suppport this type of data)
  705.     return "VisibleString";
  706. }
  707. const char* CAnyContentDataType::GetXMLContents(void) const
  708. {
  709.     return "ANY";
  710. }
  711. void CAnyContentDataType::GetXMLSchemaContents(string& type, string& contents) const
  712. {
  713.     type.erase();
  714.     contents.erase();
  715. }
  716. END_NCBI_SCOPE