<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>Atlas-C++: Bach.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.7.4 --> <div id="top"> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">Atlas-C++</div> </td> </tr> </tbody> </table> </div> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related 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 id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> </ul> </div> <div class="header"> <div class="headertitle"> <div class="title">Bach.h</div> </div> </div> <div class="contents"> <a href="_bach_8h.html">Go to the documentation of this file.</a><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="comment">// $Id$</span> <a name="l00006"></a>00006 <a name="l00007"></a>00007 <span class="preprocessor">#ifndef ATLAS_CODECS_BACH_H</span> <a name="l00008"></a>00008 <span class="preprocessor"></span><span class="preprocessor">#define ATLAS_CODECS_BACH_H</span> <a name="l00009"></a>00009 <span class="preprocessor"></span> <a name="l00010"></a>00010 <span class="preprocessor">#include <Atlas/Codec.h></span> <a name="l00011"></a>00011 <a name="l00012"></a>00012 <span class="preprocessor">#include <iosfwd></span> <a name="l00013"></a>00013 <span class="preprocessor">#include <stack></span> <a name="l00014"></a>00014 <a name="l00015"></a>00015 <span class="keyword">namespace </span>Atlas { <span class="keyword">namespace </span>Codecs { <a name="l00016"></a>00016 <a name="l00021"></a><a class="code" href="class_atlas_1_1_codecs_1_1_bach.html">00021</a> <span class="keyword">class </span><a class="code" href="class_atlas_1_1_codecs_1_1_bach.html">Bach</a> : <span class="keyword">public</span> <a class="code" href="class_atlas_1_1_codec.html" title="Atlas stream codec.">Codec</a> <a name="l00022"></a>00022 { <a name="l00023"></a>00023 <span class="keyword">public</span>: <a name="l00024"></a>00024 <a name="l00025"></a>00025 <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html">Bach</a>(std::iostream& s, <a class="code" href="class_atlas_1_1_bridge.html" title="Atlas stream bridge.">Atlas::Bridge</a> & b); <a name="l00026"></a>00026 <a name="l00027"></a>00027 <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="l00028"></a>00028 <a name="l00029"></a>00029 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#ad9df57a97faf7b61b521ad64fad70c0d" title="Begin an Atlas stream.">streamBegin</a>(); <a name="l00030"></a>00030 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#aa455b3073aad2c9cb995efd749810ca1" title="Start a message in an Atlas stream.">streamMessage</a>(); <a name="l00031"></a>00031 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#ae35de33e27ec043720b7401300fb05b7" title="Ends the Atlas stream.">streamEnd</a>(); <a name="l00032"></a>00032 <a name="l00033"></a>00033 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#a914dc6a9d32d93554ee30a15001dd3b3" title="Starts a map object to the currently streamed map.">mapMapItem</a>(<span class="keyword">const</span> std::string& name); <a name="l00034"></a>00034 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#adbeb1d423e2e9647f0237c0673c4a5b5" title="Starts a list object to the currently streamed map.">mapListItem</a>(<span class="keyword">const</span> std::string& name); <a name="l00035"></a>00035 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#aa57c488820ab850e2322d00f5af596bb" title="Adds an integer to the currently streames map.">mapIntItem</a>(<span class="keyword">const</span> std::string& name, <span class="keywordtype">long</span>); <a name="l00036"></a>00036 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#a718315449e09903fb0d0673eaabac328" title="Adds a float to the currently streamed map.">mapFloatItem</a>(<span class="keyword">const</span> std::string& name, <span class="keywordtype">double</span>); <a name="l00037"></a>00037 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#ad677af1107be7d985f6ff0fbb21878f1" title="Adds a string to the currently streamed map.">mapStringItem</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> std::string&); <a name="l00038"></a>00038 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#aead75c283594488a053eff889d474c64" title="Ends the currently streamed map.">mapEnd</a>(); <a name="l00039"></a>00039 <a name="l00040"></a>00040 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#a828a708b8a2b9795ae5e2df6948bd7c7" title="Starts a map object in the currently streamed list.">listMapItem</a>(); <a name="l00041"></a>00041 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#a48b425f0b2708b59eea44cfcad8414a8" title="Starts a list object in the currently streamed list.">listListItem</a>(); <a name="l00042"></a>00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#a29911d87b074a787fbc129afb0c591c7" title="Adds an integer to the currently streames list.">listIntItem</a>(<span class="keywordtype">long</span>); <a name="l00043"></a>00043 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#a8bf3e208f4968e997ae69e2d287428c9" title="Adds a float to the currently streamed list.">listFloatItem</a>(<span class="keywordtype">double</span>); <a name="l00044"></a>00044 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#a30077e10b83843cc999c1ef15890973e" title="Adds a string to the currently streamed list.">listStringItem</a>(<span class="keyword">const</span> std::string&); <a name="l00045"></a>00045 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="class_atlas_1_1_codecs_1_1_bach.html#aebed49ac7597774dfc95e240370d4fcc" title="Ends the currently streamed list.">listEnd</a>(); <a name="l00046"></a>00046 <a name="l00047"></a>00047 <span class="keywordtype">unsigned</span> linenum()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_linenum;} <a name="l00048"></a>00048 <a name="l00049"></a>00049 <span class="keyword">protected</span>: <a name="l00050"></a>00050 <a name="l00051"></a>00051 std::iostream& m_socket; <a name="l00052"></a>00052 <a class="code" href="class_atlas_1_1_bridge.html" title="Atlas stream bridge.">Bridge</a> & m_bridge; <a name="l00053"></a>00053 <span class="keywordtype">bool</span> m_comma; <a name="l00054"></a>00054 <span class="keywordtype">unsigned</span> m_linenum; <a name="l00055"></a>00055 <a name="l00056"></a>00056 <span class="keyword">enum</span> State <a name="l00057"></a>00057 { <a name="l00058"></a>00058 PARSE_INIT, <a name="l00059"></a>00059 PARSE_STREAM, <a name="l00060"></a>00060 PARSE_MAP, <a name="l00061"></a>00061 PARSE_LIST, <a name="l00062"></a>00062 PARSE_NAME, <a name="l00063"></a>00063 PARSE_DATA, <a name="l00064"></a>00064 PARSE_INT, <a name="l00065"></a>00065 PARSE_FLOAT, <a name="l00066"></a>00066 PARSE_STRING, <a name="l00067"></a>00067 PARSE_LITERAL, <span class="comment">// for literal character escaped with backslash</span> <a name="l00068"></a>00068 PARSE_COMMENT <span class="comment">// for when we're in the middle of a comment field</span> <a name="l00069"></a>00069 }; <a name="l00070"></a>00070 <a name="l00071"></a>00071 <span class="keywordtype">bool</span> stringmode() <span class="keyword">const</span>; <a name="l00072"></a>00072 <a name="l00073"></a>00073 std::string m_name, m_data; <a name="l00074"></a>00074 std::stack<State> m_state; <a name="l00075"></a>00075 <a name="l00076"></a>00076 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseInit(<span class="keywordtype">char</span>); <a name="l00077"></a>00077 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseStream(<span class="keywordtype">char</span>); <a name="l00078"></a>00078 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseMap(<span class="keywordtype">char</span>); <a name="l00079"></a>00079 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseList(<span class="keywordtype">char</span>); <a name="l00080"></a>00080 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseData(<span class="keywordtype">char</span>); <a name="l00081"></a>00081 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseInt(<span class="keywordtype">char</span>); <a name="l00082"></a>00082 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseFloat(<span class="keywordtype">char</span>); <a name="l00083"></a>00083 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseString(<span class="keywordtype">char</span>); <a name="l00084"></a>00084 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseLiteral(<span class="keywordtype">char</span>); <a name="l00085"></a>00085 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseName(<span class="keywordtype">char</span>); <a name="l00086"></a>00086 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseComment(<span class="keywordtype">char</span>); <a name="l00087"></a>00087 <a name="l00088"></a>00088 <span class="keyword">inline</span> <span class="keyword">const</span> std::string encodeString(<span class="keyword">const</span> std::string &); <a name="l00089"></a>00089 <span class="keyword">inline</span> <span class="keyword">const</span> std::string decodeString(<span class="keyword">const</span> std::string &); <a name="l00090"></a>00090 <a name="l00091"></a>00091 <span class="keywordtype">void</span> writeIntItem(<span class="keyword">const</span> std::string &,<span class="keywordtype">long</span>); <a name="l00092"></a>00092 <span class="keywordtype">void</span> writeFloatItem(<span class="keyword">const</span> std::string &,<span class="keywordtype">double</span>); <a name="l00093"></a>00093 <span class="keywordtype">void</span> writeStringItem(<span class="keyword">const</span> std::string &,<span class="keyword">const</span> std::string &); <a name="l00094"></a>00094 <span class="keywordtype">void</span> writeLine(<span class="keyword">const</span> std::string &,<span class="keywordtype">bool</span>=<span class="keyword">true</span>,<span class="keywordtype">bool</span>=<span class="keyword">false</span>); <a name="l00095"></a>00095 }; <a name="l00096"></a>00096 <a name="l00097"></a>00097 } } <span class="comment">// namespace Atlas::Codecs</span> <a name="l00098"></a>00098 <a name="l00099"></a>00099 <span class="preprocessor">#endif // ATLAS_CODECS_BACH_H</span> </pre></div></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>