Sophie

Sophie

distrib > Fedora > 14 > x86_64 > by-pkgid > c200d180bc1063a7706e0da42a546b51 > files > 95

atlascpp-devel-0.6.1-7.fc12.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Atlas-C++: XML.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    </ul>
  </div>
<h1>XML.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// This file may be redistributed and modified under the terms of the</span>
<a name="l00002"></a>00002 <span class="comment">// GNU Lesser General Public License (See COPYING for details).</span>
<a name="l00003"></a>00003 <span class="comment">// Copyright (C) 2000-2001 Michael Day, Stefanus Du Toit</span>
<a name="l00004"></a>00004 
<a name="l00005"></a>00005 <span class="preprocessor">#ifndef ATLAS_CODECS_XML_H</span>
<a name="l00006"></a>00006 <span class="preprocessor"></span><span class="preprocessor">#define ATLAS_CODECS_XML_H</span>
<a name="l00007"></a>00007 <span class="preprocessor"></span>
<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;Atlas/Codec.h&gt;</span>
<a name="l00009"></a>00009 
<a name="l00010"></a>00010 <span class="preprocessor">#include &lt;iosfwd&gt;</span>
<a name="l00011"></a>00011 <span class="preprocessor">#include &lt;stack&gt;</span>
<a name="l00012"></a>00012 
<a name="l00013"></a>00013 <span class="keyword">namespace </span>Atlas { <span class="keyword">namespace </span>Codecs {
<a name="l00014"></a>00014 
<a name="l00015"></a>00015 <span class="comment">/*</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">Sample output for this codec: (whitespace added for clarity)</span>
<a name="l00018"></a>00018 <span class="comment"></span>
<a name="l00019"></a>00019 <span class="comment">&lt;atlas&gt;</span>
<a name="l00020"></a>00020 <span class="comment">    &lt;map&gt;</span>
<a name="l00021"></a>00021 <span class="comment">        &lt;int name="foo"&gt;13&lt;/int&gt;</span>
<a name="l00022"></a>00022 <span class="comment">        &lt;float name="meep"&gt;1.5&lt;/float&gt;</span>
<a name="l00023"></a>00023 <span class="comment">        &lt;string name="bar"&gt;hello&lt;/string&gt;</span>
<a name="l00024"></a>00024 <span class="comment">        &lt;list name="args"&gt;</span>
<a name="l00025"></a>00025 <span class="comment">            &lt;int&gt;1&lt;/int&gt;</span>
<a name="l00026"></a>00026 <span class="comment">            &lt;int&gt;2&lt;/int&gt;</span>
<a name="l00027"></a>00027 <span class="comment">            &lt;float&gt;3.0&lt;/float&gt;</span>
<a name="l00028"></a>00028 <span class="comment">        &lt;/list&gt;</span>
<a name="l00029"></a>00029 <span class="comment">    &lt;/map&gt;</span>
<a name="l00030"></a>00030 <span class="comment">&lt;/atlas&gt;</span>
<a name="l00031"></a>00031 <span class="comment"></span>
<a name="l00032"></a>00032 <span class="comment">The complete specification is located in cvs at:</span>
<a name="l00033"></a>00033 <span class="comment">    forge/protocols/atlas/spec/xml_syntax.html</span>
<a name="l00034"></a>00034 <span class="comment"></span>
<a name="l00035"></a>00035 <span class="comment">*/</span>
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="keyword">class </span>XML : <span class="keyword">public</span> Codec
<a name="l00038"></a>00038 {
<a name="l00039"></a>00039     <span class="keyword">public</span>:
<a name="l00040"></a>00040 
<a name="l00041"></a>00041     XML(std::iostream&amp; s, <a class="code" href="class_atlas_1_1_bridge.html" title="Atlas stream bridge.">Atlas::Bridge</a> &amp; b);
<a name="l00042"></a>00042 
<a name="l00043"></a>00043     <span class="keyword">virtual</span> <span class="keywordtype">void</span> poll(<span class="keywordtype">bool</span> can_read = <span class="keyword">true</span>);
<a name="l00044"></a>00044 
<a name="l00045"></a>00045     <span class="keyword">virtual</span> <span class="keywordtype">void</span> streamBegin();
<a name="l00046"></a>00046     <span class="keyword">virtual</span> <span class="keywordtype">void</span> streamMessage();
<a name="l00047"></a>00047     <span class="keyword">virtual</span> <span class="keywordtype">void</span> streamEnd();
<a name="l00048"></a>00048     
<a name="l00049"></a>00049     <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapMapItem(<span class="keyword">const</span> std::string&amp; name);
<a name="l00050"></a>00050     <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapListItem(<span class="keyword">const</span> std::string&amp; name);
<a name="l00051"></a>00051     <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapIntItem(<span class="keyword">const</span> std::string&amp; name, <span class="keywordtype">long</span>);
<a name="l00052"></a>00052     <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapFloatItem(<span class="keyword">const</span> std::string&amp; name, <span class="keywordtype">double</span>);
<a name="l00053"></a>00053     <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapStringItem(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> std::string&amp;);
<a name="l00054"></a>00054     <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapEnd();
<a name="l00055"></a>00055     
<a name="l00056"></a>00056     <span class="keyword">virtual</span> <span class="keywordtype">void</span> listMapItem();
<a name="l00057"></a>00057     <span class="keyword">virtual</span> <span class="keywordtype">void</span> listListItem();
<a name="l00058"></a>00058     <span class="keyword">virtual</span> <span class="keywordtype">void</span> listIntItem(<span class="keywordtype">long</span>);
<a name="l00059"></a>00059     <span class="keyword">virtual</span> <span class="keywordtype">void</span> listFloatItem(<span class="keywordtype">double</span>);
<a name="l00060"></a>00060     <span class="keyword">virtual</span> <span class="keywordtype">void</span> listStringItem(<span class="keyword">const</span> std::string&amp;);
<a name="l00061"></a>00061     <span class="keyword">virtual</span> <span class="keywordtype">void</span> listEnd();
<a name="l00062"></a>00062 
<a name="l00063"></a>00063     <span class="keyword">protected</span>:
<a name="l00064"></a>00064 
<a name="l00065"></a>00065     std::iostream &amp; m_socket;
<a name="l00066"></a>00066     Bridge &amp; m_bridge;
<a name="l00067"></a>00067     
<a name="l00068"></a>00068     <span class="keyword">enum</span> Token
<a name="l00069"></a>00069     {
<a name="l00070"></a>00070         TOKEN_TAG,
<a name="l00071"></a>00071         TOKEN_START_TAG,
<a name="l00072"></a>00072         TOKEN_END_TAG,
<a name="l00073"></a>00073         TOKEN_DATA
<a name="l00074"></a>00074     };
<a name="l00075"></a>00075     
<a name="l00076"></a>00076     Token m_token;
<a name="l00077"></a>00077     
<a name="l00078"></a>00078     <span class="keyword">enum</span> State
<a name="l00079"></a>00079     {
<a name="l00080"></a>00080         PARSE_NOTHING,
<a name="l00081"></a>00081         PARSE_STREAM,
<a name="l00082"></a>00082         PARSE_MAP,
<a name="l00083"></a>00083         PARSE_LIST,
<a name="l00084"></a>00084         PARSE_INT,
<a name="l00085"></a>00085         PARSE_FLOAT,
<a name="l00086"></a>00086         PARSE_STRING
<a name="l00087"></a>00087     };
<a name="l00088"></a>00088     
<a name="l00089"></a>00089     std::stack&lt;State&gt; m_state;
<a name="l00090"></a>00090     std::stack&lt;std::string&gt; m_data;
<a name="l00091"></a>00091 
<a name="l00092"></a>00092     std::string m_tag;
<a name="l00093"></a>00093     std::string m_name;
<a name="l00094"></a>00094 
<a name="l00095"></a>00095     <span class="keyword">inline</span> <span class="keywordtype">void</span> tokenTag(<span class="keywordtype">char</span>);
<a name="l00096"></a>00096     <span class="keyword">inline</span> <span class="keywordtype">void</span> tokenStartTag(<span class="keywordtype">char</span>);
<a name="l00097"></a>00097     <span class="keyword">inline</span> <span class="keywordtype">void</span> tokenEndTag(<span class="keywordtype">char</span>);
<a name="l00098"></a>00098     <span class="keyword">inline</span> <span class="keywordtype">void</span> tokenData(<span class="keywordtype">char</span>);
<a name="l00099"></a>00099 
<a name="l00100"></a>00100     <span class="keyword">inline</span> <span class="keywordtype">void</span> parseStartTag();
<a name="l00101"></a>00101     <span class="keyword">inline</span> <span class="keywordtype">void</span> parseEndTag();
<a name="l00102"></a>00102 };
<a name="l00103"></a>00103 
<a name="l00104"></a>00104 } } <span class="comment">// namespace Atlas::Codecs</span>
<a name="l00105"></a>00105 
<a name="l00106"></a>00106 <span class="preprocessor">#endif // ATLAS_CODECS_XML_H</span>
</pre></div></div>
<HR>
<P>Copyright 2000-2004 the respective authors.</P>
<P>This document can be licensed under the terms of the GNU Free Documentation
License or the GNU General Public License and may be freely distributed under
the terms given by one of these licenses.</P>