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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: dtdaux.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 19:42:46  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: dtdaux.cpp,v 1000.1 2004/06/01 19:42: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: Andrei Gourianov
  35. *
  36. * File Description:
  37. *   DTD parser's auxiliary stuff:
  38. *       DTDEntity
  39. *       DTDAttribute
  40. *       DTDElement
  41. *       DTDEntityLexer
  42. *
  43. * ===========================================================================
  44. */
  45. #include <ncbi_pch.hpp>
  46. #include <serial/datatool/dtdaux.hpp>
  47. BEGIN_NCBI_SCOPE
  48. /////////////////////////////////////////////////////////////////////////////
  49. // DTDEntity
  50. DTDEntity::DTDEntity(void)
  51. {
  52.     m_External = false;
  53. }
  54. DTDEntity::DTDEntity(const DTDEntity& other)
  55. {
  56.     m_Name = other.m_Name;
  57.     m_Data = other.m_Data;
  58.     m_External = other.m_External;
  59. }
  60. DTDEntity::~DTDEntity(void)
  61. {
  62. }
  63. void DTDEntity::SetName(const string& name)
  64. {
  65.     m_Name = name;
  66. }
  67. const string& DTDEntity::GetName(void) const
  68. {
  69.     return m_Name;
  70. }
  71. void DTDEntity::SetData(const string& data)
  72. {
  73.     m_Data = data;
  74. }
  75. const string& DTDEntity::GetData(void) const
  76. {
  77.     return m_Data;
  78. }
  79. void DTDEntity::SetExternal(void)
  80. {
  81.     m_External = true;
  82. }
  83. bool DTDEntity::IsExternal(void) const
  84. {
  85.     return m_External;
  86. }
  87. /////////////////////////////////////////////////////////////////////////////
  88. // DTDAttribute
  89. DTDAttribute::DTDAttribute(void)
  90. {
  91.     m_Type = eUnknown;
  92.     m_ValueType = eDefault;
  93. }
  94. DTDAttribute::DTDAttribute(const DTDAttribute& other)
  95. {
  96.     m_Name = other.m_Name;
  97.     m_Type = other.m_Type;
  98.     m_ValueType = other.m_ValueType;
  99.     m_Value = other.m_Value;
  100.     for (list<string>::const_iterator i = other.m_ListEnum.begin();
  101.         i != other.m_ListEnum.end(); ++i) {
  102.         m_ListEnum.push_back( *i);
  103.     }
  104. }
  105. DTDAttribute::~DTDAttribute(void)
  106. {
  107. }
  108. void DTDAttribute::SetName(const string& name)
  109. {
  110.     m_Name = name;
  111. }
  112. const string& DTDAttribute::GetName(void) const
  113. {
  114.     return m_Name;
  115. }
  116. void DTDAttribute::SetType(EType type)
  117. {
  118.     m_Type = type;
  119. }
  120. DTDAttribute::EType DTDAttribute::GetType(void) const
  121. {
  122.     return m_Type;
  123. }
  124. void DTDAttribute::SetValueType(EValueType valueType)
  125. {
  126.     m_ValueType = valueType;
  127. }
  128. DTDAttribute::EValueType DTDAttribute::GetValueType(void) const
  129. {
  130.     return m_ValueType;
  131. }
  132. void DTDAttribute::SetValue(const string& value)
  133. {
  134.     m_Value = value;
  135. }
  136. const string& DTDAttribute::GetValue(void) const
  137. {
  138.     return m_Value;
  139. }
  140. void DTDAttribute::AddEnumValue(const string& value)
  141. {
  142.     m_ListEnum.push_back(value);
  143. }
  144. const list<string>& DTDAttribute::GetEnumValues(void) const
  145. {
  146.     return m_ListEnum;
  147. }
  148. /////////////////////////////////////////////////////////////////////////////
  149. // DTDElement
  150. DTDElement::DTDElement(void)
  151. {
  152.     m_Type = eUnknown;
  153.     m_Occ  = eOne;
  154.     m_Refd = false;
  155.     m_Embd = false;
  156. }
  157. DTDElement::DTDElement(const DTDElement& other)
  158. {
  159.     m_Name = other.m_Name;
  160.     m_Type = other.eUnknown;
  161.     m_Occ  = other.m_Occ;
  162.     m_Refd = other.m_Refd;
  163.     m_Embd = other.m_Embd;
  164.     for (list<string>::const_iterator i = other.m_Refs.begin();
  165.         i != other.m_Refs.end(); ++i) {
  166.         m_Refs.push_back( *i);
  167.     }
  168.     for (map<string,EOccurrence>::const_iterator i = other.m_RefOcc.begin();
  169.         i != other.m_RefOcc.end(); ++i) {
  170.         m_RefOcc[i->first] = i->second;
  171.     }
  172.      ;
  173.     for (list<DTDAttribute>::const_iterator i = other.m_Attrib.begin();
  174.         i != other.m_Attrib.end(); ++i) {
  175.         m_Attrib.push_back(*i);
  176.     }
  177. }
  178. DTDElement::~DTDElement(void)
  179. {
  180. }
  181. void DTDElement::SetName(const string& name)
  182. {
  183.     m_Name = name;
  184. }
  185. const string& DTDElement::GetName(void) const
  186. {
  187.     return m_Name;
  188. }
  189. void DTDElement::SetType( EType type)
  190. {
  191.     _ASSERT(m_Type == eUnknown || m_Type == type);
  192.     m_Type = type;
  193. }
  194. void DTDElement::SetTypeIfUnknown( EType type)
  195. {
  196.     if (m_Type == eUnknown) {
  197.         m_Type = type;
  198.     }
  199. }
  200. DTDElement::EType DTDElement::GetType(void) const
  201. {
  202.     return (EType)m_Type;
  203. }
  204. void DTDElement::SetOccurrence( const string& ref_name, EOccurrence occ)
  205. {
  206.     m_RefOcc[ref_name] = occ;
  207. }
  208. DTDElement::EOccurrence DTDElement::GetOccurrence(
  209.     const string& ref_name) const
  210. {
  211.     map<string,EOccurrence>::const_iterator i = m_RefOcc.find(ref_name);
  212.     return (i != m_RefOcc.end()) ? i->second : eOne;
  213. }
  214. void DTDElement::SetOccurrence( EOccurrence occ)
  215. {
  216.     m_Occ = occ;
  217. }
  218. DTDElement::EOccurrence DTDElement::GetOccurrence(void) const
  219. {
  220.     return m_Occ;
  221. }
  222. void DTDElement::AddContent( const string& ref_name)
  223. {
  224.     m_Refs.push_back( ref_name);
  225. }
  226. const list<string>& DTDElement::GetContent(void) const
  227. {
  228.     return m_Refs;
  229. }
  230. void DTDElement::SetReferenced(void)
  231. {
  232.     m_Refd = true;
  233. }
  234. bool DTDElement::IsReferenced(void) const
  235. {
  236.     return m_Refd;
  237. }
  238. void DTDElement::SetEmbedded(void)
  239. {
  240.     m_Embd = true;
  241. }
  242. bool DTDElement::IsEmbedded(void) const
  243. {
  244.     return m_Embd;
  245. }
  246. string DTDElement::CreateEmbeddedName(int depth) const
  247. {
  248.     string name, tmp;
  249.     list<string>::const_iterator i;
  250.     for ( i = m_Refs.begin(); i != m_Refs.end(); ++i) {
  251.         tmp = i->substr(0,depth);
  252.         tmp[0] = toupper(tmp[0]);
  253.         name += tmp;
  254.     }
  255.     return name;
  256. }
  257. void DTDElement::AddAttribute(DTDAttribute& attrib)
  258. {
  259.     m_Attrib.push_back(attrib);
  260. }
  261. bool DTDElement::HasAttributes(void) const
  262. {
  263.     return !m_Attrib.empty();
  264. }
  265. const list<DTDAttribute>& DTDElement::GetAttributes(void) const
  266. {
  267.     return m_Attrib;
  268. }
  269. /////////////////////////////////////////////////////////////////////////////
  270. // DTDEntityLexer
  271. DTDEntityLexer::DTDEntityLexer(CNcbiIstream& in, bool autoDelete)
  272.     : DTDLexer(in)
  273. {
  274.     m_Str = &in;
  275.     m_AutoDelete = autoDelete;
  276. }
  277. DTDEntityLexer::~DTDEntityLexer(void)
  278. {
  279.     if (m_AutoDelete) {
  280.         delete m_Str;
  281.     }
  282. }
  283. END_NCBI_SCOPE
  284. /*
  285.  * ==========================================================================
  286.  * $Log: dtdaux.cpp,v $
  287.  * Revision 1000.1  2004/06/01 19:42:46  gouriano
  288.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  289.  *
  290.  * Revision 1.2  2004/05/17 21:03:13  gorelenk
  291.  * Added include of PCH ncbi_pch.hpp
  292.  *
  293.  * Revision 1.1  2002/11/14 21:02:15  gouriano
  294.  * auxiliary classes to use by DTD parser
  295.  *
  296.  *
  297.  *
  298.  * ==========================================================================
  299.  */