<!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++: 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.5.9 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <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 class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> </ul> </div> <h1>Bach.h</h1><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="preprocessor">#ifndef ATLAS_CODECS_BACH_H</span> <a name="l00006"></a>00006 <span class="preprocessor"></span><span class="preprocessor">#define ATLAS_CODECS_BACH_H</span> <a name="l00007"></a>00007 <span class="preprocessor"></span> <a name="l00008"></a>00008 <span class="preprocessor">#include <Atlas/Codec.h></span> <a name="l00009"></a>00009 <a name="l00010"></a>00010 <span class="preprocessor">#include <iosfwd></span> <a name="l00011"></a>00011 <span class="preprocessor">#include <stack></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="l00019"></a>00019 <span class="keyword">class </span>Bach : <span class="keyword">public</span> Codec <a name="l00020"></a>00020 { <a name="l00021"></a>00021 <span class="keyword">public</span>: <a name="l00022"></a>00022 <a name="l00023"></a>00023 Bach(std::iostream& s, <a class="code" href="class_atlas_1_1_bridge.html" title="Atlas stream bridge.">Atlas::Bridge</a> & b); <a name="l00024"></a>00024 <a name="l00025"></a>00025 <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="l00026"></a>00026 <a name="l00027"></a>00027 <span class="keyword">virtual</span> <span class="keywordtype">void</span> streamBegin(); <a name="l00028"></a>00028 <span class="keyword">virtual</span> <span class="keywordtype">void</span> streamMessage(); <a name="l00029"></a>00029 <span class="keyword">virtual</span> <span class="keywordtype">void</span> streamEnd(); <a name="l00030"></a>00030 <a name="l00031"></a>00031 <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapMapItem(<span class="keyword">const</span> std::string& name); <a name="l00032"></a>00032 <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapListItem(<span class="keyword">const</span> std::string& name); <a name="l00033"></a>00033 <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapIntItem(<span class="keyword">const</span> std::string& name, <span class="keywordtype">long</span>); <a name="l00034"></a>00034 <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapFloatItem(<span class="keyword">const</span> std::string& name, <span class="keywordtype">double</span>); <a name="l00035"></a>00035 <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapStringItem(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> std::string&); <a name="l00036"></a>00036 <span class="keyword">virtual</span> <span class="keywordtype">void</span> mapEnd(); <a name="l00037"></a>00037 <a name="l00038"></a>00038 <span class="keyword">virtual</span> <span class="keywordtype">void</span> listMapItem(); <a name="l00039"></a>00039 <span class="keyword">virtual</span> <span class="keywordtype">void</span> listListItem(); <a name="l00040"></a>00040 <span class="keyword">virtual</span> <span class="keywordtype">void</span> listIntItem(<span class="keywordtype">long</span>); <a name="l00041"></a>00041 <span class="keyword">virtual</span> <span class="keywordtype">void</span> listFloatItem(<span class="keywordtype">double</span>); <a name="l00042"></a>00042 <span class="keyword">virtual</span> <span class="keywordtype">void</span> listStringItem(<span class="keyword">const</span> std::string&); <a name="l00043"></a>00043 <span class="keyword">virtual</span> <span class="keywordtype">void</span> listEnd(); <a name="l00044"></a>00044 <a name="l00045"></a>00045 <span class="keywordtype">unsigned</span> linenum()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_linenum;} <a name="l00046"></a>00046 <a name="l00047"></a>00047 <span class="keyword">protected</span>: <a name="l00048"></a>00048 <a name="l00049"></a>00049 std::iostream& m_socket; <a name="l00050"></a>00050 Bridge & m_bridge; <a name="l00051"></a>00051 <span class="keywordtype">bool</span> m_comma; <a name="l00052"></a>00052 <span class="keywordtype">unsigned</span> m_linenum; <a name="l00053"></a>00053 <a name="l00054"></a>00054 <span class="keyword">enum</span> State <a name="l00055"></a>00055 { <a name="l00056"></a>00056 PARSE_INIT, <a name="l00057"></a>00057 PARSE_STREAM, <a name="l00058"></a>00058 PARSE_MAP, <a name="l00059"></a>00059 PARSE_LIST, <a name="l00060"></a>00060 PARSE_NAME, <a name="l00061"></a>00061 PARSE_DATA, <a name="l00062"></a>00062 PARSE_INT, <a name="l00063"></a>00063 PARSE_FLOAT, <a name="l00064"></a>00064 PARSE_STRING, <a name="l00065"></a>00065 PARSE_LITERAL, <span class="comment">// for literal character escaped with backslash</span> <a name="l00066"></a>00066 PARSE_COMMENT <span class="comment">// for when we're in the middle of a comment field</span> <a name="l00067"></a>00067 }; <a name="l00068"></a>00068 <a name="l00069"></a>00069 <span class="keywordtype">bool</span> stringmode() <span class="keyword">const</span>; <a name="l00070"></a>00070 <a name="l00071"></a>00071 std::string m_name, m_data; <a name="l00072"></a>00072 std::stack<State> m_state; <a name="l00073"></a>00073 <a name="l00074"></a>00074 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseInit(<span class="keywordtype">char</span>); <a name="l00075"></a>00075 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseStream(<span class="keywordtype">char</span>); <a name="l00076"></a>00076 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseMap(<span class="keywordtype">char</span>); <a name="l00077"></a>00077 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseList(<span class="keywordtype">char</span>); <a name="l00078"></a>00078 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseData(<span class="keywordtype">char</span>); <a name="l00079"></a>00079 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseInt(<span class="keywordtype">char</span>); <a name="l00080"></a>00080 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseFloat(<span class="keywordtype">char</span>); <a name="l00081"></a>00081 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseString(<span class="keywordtype">char</span>); <a name="l00082"></a>00082 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseLiteral(<span class="keywordtype">char</span>); <a name="l00083"></a>00083 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseName(<span class="keywordtype">char</span>); <a name="l00084"></a>00084 <span class="keyword">inline</span> <span class="keywordtype">void</span> parseComment(<span class="keywordtype">char</span>); <a name="l00085"></a>00085 <a name="l00086"></a>00086 <span class="keyword">inline</span> <span class="keyword">const</span> std::string encodeString(<span class="keyword">const</span> std::string &); <a name="l00087"></a>00087 <span class="keyword">inline</span> <span class="keyword">const</span> std::string decodeString(<span class="keyword">const</span> std::string &); <a name="l00088"></a>00088 <a name="l00089"></a>00089 <span class="keywordtype">void</span> writeIntItem(<span class="keyword">const</span> std::string &,<span class="keywordtype">long</span>); <a name="l00090"></a>00090 <span class="keywordtype">void</span> writeFloatItem(<span class="keyword">const</span> std::string &,<span class="keywordtype">double</span>); <a name="l00091"></a>00091 <span class="keywordtype">void</span> writeStringItem(<span class="keyword">const</span> std::string &,<span class="keyword">const</span> std::string &); <a name="l00092"></a>00092 <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="l00093"></a>00093 }; <a name="l00094"></a>00094 <a name="l00095"></a>00095 } } <span class="comment">// namespace Atlas::Codecs</span> <a name="l00096"></a>00096 <a name="l00097"></a>00097 <span class="preprocessor">#endif // ATLAS_CODECS_BACH_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>