Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 4bc66056a634db26a1f4d0845dc41ca6 > files > 2191

mrpt-doc-0.9.5-0.1.20110925svn2670.fc16.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>CStream.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> &gt; <b>C++ reference</b> </div>
<div align="right">
<a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a>
</div>
<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;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>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
          <div class="left">
            <form id="FSearchBox" action="search.php" method="get">
              <img id="MSearchSelect" src="search/mag.png" alt=""/>
              <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" 
                     onfocus="searchBox.OnSearchFieldFocus(true)" 
                     onblur="searchBox.OnSearchFieldFocus(false)"/>
            </form>
          </div><div class="right"></div>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">CStream.h</div>  </div>
</div>
<div class="contents">
<a href="_c_stream_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span>
<a name="l00002"></a>00002 <span class="comment">   |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |</span>
<a name="l00003"></a>00003 <span class="comment">   |                                                                           |</span>
<a name="l00004"></a>00004 <span class="comment">   |                       http://www.mrpt.org/                                |</span>
<a name="l00005"></a>00005 <span class="comment">   |                                                                           |</span>
<a name="l00006"></a>00006 <span class="comment">   |   Copyright (C) 2005-2011  University of Malaga                           |</span>
<a name="l00007"></a>00007 <span class="comment">   |                                                                           |</span>
<a name="l00008"></a>00008 <span class="comment">   |    This software was written by the Machine Perception and Intelligent    |</span>
<a name="l00009"></a>00009 <span class="comment">   |      Robotics Lab, University of Malaga (Spain).                          |</span>
<a name="l00010"></a>00010 <span class="comment">   |    Contact: Jose-Luis Blanco  &lt;jlblanco@ctima.uma.es&gt;                     |</span>
<a name="l00011"></a>00011 <span class="comment">   |                                                                           |</span>
<a name="l00012"></a>00012 <span class="comment">   |  This file is part of the MRPT project.                                   |</span>
<a name="l00013"></a>00013 <span class="comment">   |                                                                           |</span>
<a name="l00014"></a>00014 <span class="comment">   |     MRPT is free software: you can redistribute it and/or modify          |</span>
<a name="l00015"></a>00015 <span class="comment">   |     it under the terms of the GNU General Public License as published by  |</span>
<a name="l00016"></a>00016 <span class="comment">   |     the Free Software Foundation, either version 3 of the License, or     |</span>
<a name="l00017"></a>00017 <span class="comment">   |     (at your option) any later version.                                   |</span>
<a name="l00018"></a>00018 <span class="comment">   |                                                                           |</span>
<a name="l00019"></a>00019 <span class="comment">   |   MRPT is distributed in the hope that it will be useful,                 |</span>
<a name="l00020"></a>00020 <span class="comment">   |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |</span>
<a name="l00021"></a>00021 <span class="comment">   |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |</span>
<a name="l00022"></a>00022 <span class="comment">   |     GNU General Public License for more details.                          |</span>
<a name="l00023"></a>00023 <span class="comment">   |                                                                           |</span>
<a name="l00024"></a>00024 <span class="comment">   |     You should have received a copy of the GNU General Public License     |</span>
<a name="l00025"></a>00025 <span class="comment">   |     along with MRPT.  If not, see &lt;http://www.gnu.org/licenses/&gt;.         |</span>
<a name="l00026"></a>00026 <span class="comment">   |                                                                           |</span>
<a name="l00027"></a>00027 <span class="comment">   +---------------------------------------------------------------------------+ */</span>
<a name="l00028"></a>00028 <span class="preprocessor">#ifndef  CSTREAM_H</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define  CSTREAM_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;<a class="code" href="utils__defs_8h.html">mrpt/utils/utils_defs.h</a>&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;<a class="code" href="_c_uncopiable_8h.html">mrpt/utils/CUncopiable.h</a>&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="_c_object_8h.html">mrpt/utils/CObject.h</a>&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;<a class="code" href="exceptions_8h.html">mrpt/utils/exceptions.h</a>&gt;</span>
<a name="l00035"></a>00035 
<a name="l00036"></a>00036 <span class="keyword">namespace </span>mrpt
<a name="l00037"></a>00037 {
<a name="l00038"></a>00038         <span class="keyword">namespace </span>utils
<a name="l00039"></a>00039         {
<a name="l00040"></a><a class="code" href="namespacemrpt_1_1utils.html#a9f31abb393bf84af21fecce4c4070b40">00040</a>                 <span class="keyword">class </span><a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> <a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a>;
<a name="l00041"></a><a class="code" href="namespacemrpt_1_1utils.html#a8bda39888b98f509c0d97bf5eebac3c3">00041</a>                 <span class="keyword">struct </span><a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a>  <a class="code" href="structmrpt_1_1utils_1_1_c_serializable_ptr.html">CSerializablePtr</a>;
<a name="l00042"></a><a class="code" href="namespacemrpt_1_1utils.html#a1b6fb1ac8527aefbfa00af3c227d7f17">00042</a>                 <span class="keyword">class </span><a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> <a class="code" href="classmrpt_1_1utils_1_1_c_message.html" title="A class that contain generic messages, that can be sent and received from a &quot;CClientTCPSocket&quot; object...">CMessage</a>;
<a name="l00043"></a>00043 <span class="comment"></span>
<a name="l00044"></a>00044 <span class="comment">                /** This base class is used to provide a unified interface to</span>
<a name="l00045"></a>00045 <span class="comment">                 *    files,memory buffers,..Please see the derived classes. This class is</span>
<a name="l00046"></a>00046 <span class="comment">                 *    largely inspired by Borland VCL &quot;TStream&quot; class. &lt;br&gt;&lt;br&gt;</span>
<a name="l00047"></a>00047 <span class="comment">                 *  Apart of the &quot;VCL like&quot; methods, operators &quot;&gt;&gt;&quot; and &quot;&lt;&lt;&quot; have been</span>
<a name="l00048"></a>00048 <span class="comment">                 *    defined so that simple types (int,bool,char,float,char *,std::string,...)</span>
<a name="l00049"></a>00049 <span class="comment">                 *    can be directly written and read to and from any CStream easily.</span>
<a name="l00050"></a>00050 <span class="comment">                 *  Please, it is recomendable to read CSerializable documentation also.</span>
<a name="l00051"></a>00051 <span class="comment">                 *</span>
<a name="l00052"></a>00052 <span class="comment">                 * \ingroup mrpt_base_grp</span>
<a name="l00053"></a>00053 <span class="comment">                 * \sa CFileStream, CMemoryStream,CSerializable</span>
<a name="l00054"></a>00054 <span class="comment">                 */</span>
<a name="l00055"></a>00055                 <span class="keyword">class </span><a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>
<a name="l00056"></a>00056                 {
<a name="l00057"></a>00057                 <span class="keyword">public</span>:<span class="comment"></span>
<a name="l00058"></a>00058 <span class="comment">                        /** Used in CStream::Seek</span>
<a name="l00059"></a>00059 <span class="comment">                          */</span>
<a name="l00060"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aab22931626d22c919a50183386d24059">00060</a>                         <span class="keyword">enum</span> <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aab22931626d22c919a50183386d24059" title="Used in CStream::Seek.">TSeekOrigin</a>
<a name="l00061"></a>00061                         {
<a name="l00062"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aab22931626d22c919a50183386d24059a41fe2275587eb7fb10ddbddd86af2beb">00062</a>                                 sFromBeginning = 0,
<a name="l00063"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aab22931626d22c919a50183386d24059ad45b9078d6eec3c607e7df0b7a2c66c0">00063</a>                                 sFromCurrent = 1,
<a name="l00064"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aab22931626d22c919a50183386d24059ad1818126a04dd7285e23554157f9f309">00064</a>                                 sFromEnd = 2
<a name="l00065"></a>00065                         };
<a name="l00066"></a>00066 
<a name="l00067"></a>00067                 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00068"></a>00068 <span class="comment">                        /** Introduces a pure virtual method responsible for reading from the stream.</span>
<a name="l00069"></a>00069 <span class="comment">                         */</span>
<a name="l00070"></a>00070                         <span class="keyword">virtual</span> <span class="keywordtype">size_t</span>  Read(<span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count) = 0;
<a name="l00071"></a>00071 <span class="comment"></span>
<a name="l00072"></a>00072 <span class="comment">                        /** Introduces a pure virtual method responsible for writing to the stream.</span>
<a name="l00073"></a>00073 <span class="comment">                         *  Write attempts to write up to Count bytes to Buffer, and returns the number of bytes actually written.</span>
<a name="l00074"></a>00074 <span class="comment">                         */</span>
<a name="l00075"></a>00075                         <span class="keyword">virtual</span> <span class="keywordtype">size_t</span>  Write(<span class="keyword">const</span> <span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count) = 0;
<a name="l00076"></a>00076                 <span class="keyword">public</span>:
<a name="l00077"></a>00077                         <span class="comment">/* Constructor</span>
<a name="l00078"></a>00078 <span class="comment">                         */</span>
<a name="l00079"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#a9e63cddcdb347affe39125cead1eae6d">00079</a>                         <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#a9e63cddcdb347affe39125cead1eae6d">CStream</a>() { }
<a name="l00080"></a>00080 
<a name="l00081"></a>00081                         <span class="comment">/* Destructor</span>
<a name="l00082"></a>00082 <span class="comment">                         */</span>
<a name="l00083"></a>00083                         <span class="keyword">virtual</span> ~<a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>();
<a name="l00084"></a>00084 <span class="comment"></span>
<a name="l00085"></a>00085 <span class="comment">                        /** Reads a block of bytes from the stream into Buffer</span>
<a name="l00086"></a>00086 <span class="comment">                         *      \exception std::exception On any error, or if ZERO bytes are read.</span>
<a name="l00087"></a>00087 <span class="comment">                         *  \return The amound of bytes actually read.</span>
<a name="l00088"></a>00088 <span class="comment">                         * \note This method is endianness-dependent. </span>
<a name="l00089"></a>00089 <span class="comment">                         * \sa ReadBufferImmediate ; Important, see: ReadBufferFixEndianness, </span>
<a name="l00090"></a>00090 <span class="comment">                         */</span>
<a name="l00091"></a>00091                         <span class="keywordtype">size_t</span>  ReadBuffer(<span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count);
<a name="l00092"></a>00092 <span class="comment"></span>
<a name="l00093"></a>00093 <span class="comment">                        /** Reads a sequence of elemental datatypes, taking care of reordering their bytes from the MRPT stream standard (little endianness) to the format of the running architecture.</span>
<a name="l00094"></a>00094 <span class="comment">                         *  \param ElementCount The number of elements (not bytes) to read.</span>
<a name="l00095"></a>00095 <span class="comment">                         *  \param ptr A pointer to the first output element in an array (or std::vector&lt;&gt;, etc...).</span>
<a name="l00096"></a>00096 <span class="comment">                         *  \return The amound of *bytes* (not elements) actually read (under error situations, the last element may be invalid if the data stream abruptly ends).</span>
<a name="l00097"></a>00097 <span class="comment">                         *  Example of usage:</span>
<a name="l00098"></a>00098 <span class="comment">                         *  \code</span>
<a name="l00099"></a>00099 <span class="comment">                         *   uint32_t  N;</span>
<a name="l00100"></a>00100 <span class="comment">                         *   s &gt;&gt; N;</span>
<a name="l00101"></a>00101 <span class="comment">                         *   vector&lt;float&gt;  vec(N);</span>
<a name="l00102"></a>00102 <span class="comment">                         *   if (N) </span>
<a name="l00103"></a>00103 <span class="comment">                         *     s.ReadBufferFixEndianness&lt;float&gt;(&amp;vec[0],N);</span>
<a name="l00104"></a>00104 <span class="comment">                         *  \endcode</span>
<a name="l00105"></a>00105 <span class="comment">                         *      \exception std::exception On any error, or if ZERO bytes are read.</span>
<a name="l00106"></a>00106 <span class="comment">                         * \sa ReadBufferFixEndianness, ReadBuffer</span>
<a name="l00107"></a>00107 <span class="comment">                         */</span>
<a name="l00108"></a>00108                         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00109"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#ab3f8382b9a971abc79414464fffc7937">00109</a>                         <span class="keywordtype">size_t</span>  ReadBufferFixEndianness(T *ptr, <span class="keywordtype">size_t</span> ElementCount)
<a name="l00110"></a>00110                         {
<a name="l00111"></a>00111 <span class="preprocessor">                        #if !MRPT_IS_BIG_ENDIAN</span>
<a name="l00112"></a>00112 <span class="preprocessor"></span>                                <span class="comment">// little endian: no conversion needed.</span>
<a name="l00113"></a>00113                                 <span class="keywordflow">return</span> ReadBuffer(ptr,ElementCount*<span class="keyword">sizeof</span>(T));
<a name="l00114"></a>00114 <span class="preprocessor">                        #else</span>
<a name="l00115"></a>00115 <span class="preprocessor"></span>                                <span class="comment">// big endian: convert.</span>
<a name="l00116"></a>00116                                 <span class="keyword">const</span> <span class="keywordtype">size_t</span> nread = ReadBuffer(ptr,ElementCount*<span class="keyword">sizeof</span>(T));
<a name="l00117"></a>00117                                 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0;i&lt;ElementCount;i++) <a class="code" href="namespacemrpt_1_1utils.html#a8ede91516a496194893e8525de3671af" title="Reverse the order of the bytes of a given type (useful for transforming btw little/big endian)...">mrpt::utils::reverseBytesInPlace</a>(ptr[i]);
<a name="l00118"></a>00118                                 <span class="keywordflow">return</span> nread;
<a name="l00119"></a>00119 <span class="preprocessor">                        #endif</span>
<a name="l00120"></a>00120 <span class="preprocessor"></span>                        }
<a name="l00121"></a>00121 
<a name="l00122"></a>00122 <span class="comment"></span>
<a name="l00123"></a>00123 <span class="comment">                        /** Reads a block of bytes from the stream into Buffer, and returns the amound of bytes actually read, without waiting for more extra bytes to arrive (just those already enqued in the stream).</span>
<a name="l00124"></a>00124 <span class="comment">                         *  Note that this method will fallback to ReadBuffer() in most CStream classes but in some hardware-related  classes.</span>
<a name="l00125"></a>00125 <span class="comment">                         *      \exception std::exception On any error, or if ZERO bytes are read.</span>
<a name="l00126"></a>00126 <span class="comment">                         */</span>
<a name="l00127"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aa38fe9bc49615cfae5de267903b2399b">00127</a>                         <span class="keyword">virtual</span> <span class="keywordtype">size_t</span>  <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aa38fe9bc49615cfae5de267903b2399b" title="Reads a block of bytes from the stream into Buffer, and returns the amound of bytes actually read...">ReadBufferImmediate</a>(<span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count) { <span class="keywordflow">return</span> ReadBuffer(Buffer, Count); }
<a name="l00128"></a>00128 <span class="comment"></span>
<a name="l00129"></a>00129 <span class="comment">                        /** Writes a block of bytes to the stream from Buffer.</span>
<a name="l00130"></a>00130 <span class="comment">                         *      \exception std::exception On any error</span>
<a name="l00131"></a>00131 <span class="comment">                         *  \sa Important, see: WriteBufferFixEndianness</span>
<a name="l00132"></a>00132 <span class="comment">                         * \note This method is endianness-dependent. </span>
<a name="l00133"></a>00133 <span class="comment">                         */</span>
<a name="l00134"></a>00134                         <span class="keywordtype">void</span>  WriteBuffer (<span class="keyword">const</span> <span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count);
<a name="l00135"></a>00135 
<a name="l00136"></a>00136 
<a name="l00137"></a>00137 <span class="comment"></span>
<a name="l00138"></a>00138 <span class="comment">                        /** Writes a sequence of elemental datatypes, taking care of reordering their bytes from the running architecture to MRPT stream standard (little endianness).</span>
<a name="l00139"></a>00139 <span class="comment">                         *  \param ElementCount The number of elements (not bytes) to write.</span>
<a name="l00140"></a>00140 <span class="comment">                         *  \param ptr A pointer to the first input element in an array (or std::vector&lt;&gt;, etc...).</span>
<a name="l00141"></a>00141 <span class="comment">                         *  Example of usage:</span>
<a name="l00142"></a>00142 <span class="comment">                         *  \code</span>
<a name="l00143"></a>00143 <span class="comment">                         *   vector&lt;float&gt;  vec = ...</span>
<a name="l00144"></a>00144 <span class="comment">                         *   uint32_t N = vec.size();</span>
<a name="l00145"></a>00145 <span class="comment">                         *   s &lt;&lt; N</span>
<a name="l00146"></a>00146 <span class="comment">                         *   if (N) </span>
<a name="l00147"></a>00147 <span class="comment">                         *     s.WriteBufferFixEndianness&lt;float&gt;(&amp;vec[0],N);</span>
<a name="l00148"></a>00148 <span class="comment">                         *  \endcode</span>
<a name="l00149"></a>00149 <span class="comment">                         *  \exception std::exception On any error</span>
<a name="l00150"></a>00150 <span class="comment">                         *  \sa WriteBuffer</span>
<a name="l00151"></a>00151 <span class="comment">                         */</span>
<a name="l00152"></a>00152                         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00153"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#ae229ab566ba2b9e6d2c39e32c2a9ecab">00153</a>                         <span class="keywordtype">void</span> WriteBufferFixEndianness(<span class="keyword">const</span> T *ptr, <span class="keywordtype">size_t</span> ElementCount)
<a name="l00154"></a>00154                         {
<a name="l00155"></a>00155 <span class="preprocessor">                        #if !MRPT_IS_BIG_ENDIAN</span>
<a name="l00156"></a>00156 <span class="preprocessor"></span>                                <span class="comment">// little endian: no conversion needed.</span>
<a name="l00157"></a>00157                                 <span class="keywordflow">return</span> WriteBuffer(ptr,ElementCount*<span class="keyword">sizeof</span>(T));
<a name="l00158"></a>00158 <span class="preprocessor">                        #else</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span>                                <span class="comment">// big endian: the individual &quot;&lt;&lt;&quot; functions already convert endiannes</span>
<a name="l00160"></a>00160                                 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0;i&lt;ElementCount;i++) (*<span class="keyword">this</span>) &lt;&lt; ptr[i];
<a name="l00161"></a>00161 <span class="preprocessor">                        #endif</span>
<a name="l00162"></a>00162 <span class="preprocessor"></span>                        }
<a name="l00163"></a>00163 
<a name="l00164"></a>00164 <span class="comment"></span>
<a name="l00165"></a>00165 <span class="comment">                        /** Copies a specified number of bytes from one stream to another. */</span>
<a name="l00166"></a>00166                         <span class="keywordtype">size_t</span>  CopyFrom(<a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>* Source, <span class="keywordtype">size_t</span> Count);
<a name="l00167"></a>00167 <span class="comment"></span>
<a name="l00168"></a>00168 <span class="comment">                        /** Introduces a pure virtual method for moving to a specified position in the streamed resource.</span>
<a name="l00169"></a>00169 <span class="comment">                         *   he Origin parameter indicates how to interpret the Offset parameter. Origin should be one of the following values:</span>
<a name="l00170"></a>00170 <span class="comment">                         *      - sFromBeginning        (Default) Offset is from the beginning of the resource. Seek moves to the position Offset. Offset must be &gt;= 0.</span>
<a name="l00171"></a>00171 <span class="comment">                         *      - sFromCurrent          Offset is from the current position in the resource. Seek moves to Position + Offset.</span>
<a name="l00172"></a>00172 <span class="comment">                         *      - sFromEnd                      Offset is from the end of the resource. Offset must be &lt;= 0 to indicate a number of bytes before the end of the file.</span>
<a name="l00173"></a>00173 <span class="comment">                         * \return Seek returns the new value of the Position property.</span>
<a name="l00174"></a>00174 <span class="comment">                         */</span>
<a name="l00175"></a>00175                         <span class="keyword">virtual</span> uint64_t Seek(<span class="keywordtype">long</span> Offset, <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aab22931626d22c919a50183386d24059" title="Used in CStream::Seek.">CStream::TSeekOrigin</a> Origin = sFromBeginning) = 0;
<a name="l00176"></a>00176 <span class="comment"></span>
<a name="l00177"></a>00177 <span class="comment">                        /** Returns the total amount of bytes in the stream.</span>
<a name="l00178"></a>00178 <span class="comment">                         */</span>
<a name="l00179"></a>00179                         <span class="keyword">virtual</span> uint64_t getTotalBytesCount() = 0;
<a name="l00180"></a>00180 <span class="comment"></span>
<a name="l00181"></a>00181 <span class="comment">                        /** Method for getting the current cursor position, where 0 is the first byte and TotalBytesCount-1 the last one.</span>
<a name="l00182"></a>00182 <span class="comment">                         */</span>
<a name="l00183"></a>00183                         <span class="keyword">virtual</span> uint64_t getPosition() =0;
<a name="l00184"></a>00184 <span class="comment"></span>
<a name="l00185"></a>00185 <span class="comment">                        /** Writes an object to the stream.</span>
<a name="l00186"></a>00186 <span class="comment">                         */</span>
<a name="l00187"></a>00187                         <span class="keywordtype">void</span> WriteObject( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a> *o );
<a name="l00188"></a>00188 <span class="comment"></span>
<a name="l00189"></a>00189 <span class="comment">                        /** Reads an object from stream, its class determined at runtime, and returns a smart pointer to the object.</span>
<a name="l00190"></a>00190 <span class="comment">                         * \exception std::exception On I/O error or undefined class.</span>
<a name="l00191"></a>00191 <span class="comment">                         * \exception mrpt::utils::CExceptionEOF On an End-Of-File condition found at a correct place: an EOF that abruptly finishes in the middle of one object raises a plain std::exception instead.</span>
<a name="l00192"></a>00192 <span class="comment">                         */</span>
<a name="l00193"></a>00193                         <a class="code" href="structmrpt_1_1utils_1_1_c_serializable_ptr.html">CSerializablePtr</a> ReadObject();
<a name="l00194"></a>00194 <span class="comment"></span>
<a name="l00195"></a>00195 <span class="comment">                        /** Reads an object from stream, where its class must be the same</span>
<a name="l00196"></a>00196 <span class="comment">                         *    as the supplied object, where the loaded object will be stored in.</span>
<a name="l00197"></a>00197 <span class="comment">                         * \exception std::exception On I/O error or different class found.</span>
<a name="l00198"></a>00198 <span class="comment">                         * \exception mrpt::utils::CExceptionEOF On an End-Of-File condition found at a correct place: an EOF that abruptly finishes in the middle of one object raises a plain std::exception instead.</span>
<a name="l00199"></a>00199 <span class="comment">                         */</span>
<a name="l00200"></a>00200                         <span class="keywordtype">void</span> ReadObject(<a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a> *existingObj);
<a name="l00201"></a>00201 <span class="comment"></span>
<a name="l00202"></a>00202 <span class="comment">                        /** Write an object to a stream in the binary MRPT format. */</span>
<a name="l00203"></a>00203                         <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>&amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1_c_serializable_ptr.html">CSerializablePtr</a> &amp; pObj);<span class="comment"></span>
<a name="l00204"></a>00204 <span class="comment">                        /** Write an object to a stream in the binary MRPT format. */</span>
<a name="l00205"></a>00205                         <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>&amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a> &amp;obj);
<a name="l00206"></a>00206 
<a name="l00207"></a>00207                         <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>&amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator &gt;&gt; </a>(<a class="code" href="structmrpt_1_1utils_1_1_c_serializable_ptr.html">CSerializablePtr</a> &amp;pObj);
<a name="l00208"></a>00208                         <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>&amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator &gt;&gt; </a>(<a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a> &amp;obj);
<a name="l00209"></a>00209 
<a name="l00210"></a>00210 
<a name="l00211"></a>00211 <span class="comment"></span>
<a name="l00212"></a>00212 <span class="comment">                        /** Writes a string to the stream in a textual form.</span>
<a name="l00213"></a>00213 <span class="comment">                          * \sa CStdOutStream</span>
<a name="l00214"></a>00214 <span class="comment">                          */</span>
<a name="l00215"></a>00215                         <span class="keyword">virtual</span> <span class="keywordtype">int</span> printf(<span class="keyword">const</span> <span class="keywordtype">char</span> *fmt,...) <a class="code" href="mrpt__macros_8h.html#aeb2b596164da312ce6775ca9ba09453c">MRPT_printf_format_check</a>(2,3);  <span class="comment">// The first argument (1) is &quot;this&quot; !!!</span>
<a name="l00216"></a>00216 <span class="comment"></span>
<a name="l00217"></a>00217 <span class="comment">                        /** Prints a vector in the format [A,B,C,...] using CStream::printf, and the fmt string for &lt;b&gt;each&lt;/b&gt; vector element. */</span>
<a name="l00218"></a>00218                         template &lt;typename T&gt;
<a name="l00219"></a><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#ab93e0c6185c8c3b82abd067962650947">00219</a>                         <span class="keywordtype">void</span> <a class="code" href="group__stlext__grp.html#gac1fd539c110cc511a60fcc0675cad366" title="Prints a vector in the format [A,B,C,...] to std::cout, and the fmt string for each vector element...">printf_vector</a>(const <span class="keywordtype">char</span> *fmt, const std::<a class="code" href="classstd_1_1vector.html" title="STL class.">vector</a>&lt;T&gt; &amp;V )
<a name="l00220"></a>00220                         {
<a name="l00221"></a>00221                                 this-&gt;printf(<span class="stringliteral">&quot;[&quot;</span>);
<a name="l00222"></a>00222                                 <span class="keywordtype">size_t</span> N = V.size();
<a name="l00223"></a>00223                                 <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i=0;i&lt;N;i++)
<a name="l00224"></a>00224                                 {
<a name="l00225"></a>00225                                         this-&gt;printf(fmt,V[i]);
<a name="l00226"></a>00226                                         <span class="keywordflow">if</span> (i!=(N-1)) this-&gt;printf(<span class="stringliteral">&quot;,&quot;</span>);
<a name="l00227"></a>00227                                 }
<a name="l00228"></a>00228                                 this-&gt;printf(<span class="stringliteral">&quot;]&quot;</span>);
<a name="l00229"></a>00229                         }
<a name="l00230"></a>00230 <span class="comment"></span>
<a name="l00231"></a>00231 <span class="comment">                        /** Send a message to the device.</span>
<a name="l00232"></a>00232 <span class="comment">                         *  Note that only the low byte from the &quot;type&quot; field will be used.</span>
<a name="l00233"></a>00233 <span class="comment">                         *</span>
<a name="l00234"></a>00234 <span class="comment">                         *  For frames of size &lt; 255 the frame format is an array of bytes in this order:</span>
<a name="l00235"></a>00235 <span class="comment">                         *  \code</span>
<a name="l00236"></a>00236 <span class="comment">                         *  &lt;START_FLAG&gt; &lt;HEADER&gt; &lt;LENGTH&gt; &lt;BODY&gt; &lt;END_FLAG&gt;</span>
<a name="l00237"></a>00237 <span class="comment">                         *      &lt;START_FLAG&gt;    = 0x69</span>
<a name="l00238"></a>00238 <span class="comment">                         *      &lt;HEADER&gt;                = A header byte</span>
<a name="l00239"></a>00239 <span class="comment">                         *      &lt;LENGHT&gt;                = Number of bytes of BODY</span>
<a name="l00240"></a>00240 <span class="comment">                         *      &lt;BODY&gt;                  = N x bytes</span>
<a name="l00241"></a>00241 <span class="comment">                         *      &lt;END_FLAG&gt;              = 0X96</span>
<a name="l00242"></a>00242 <span class="comment">                         *  Total length        =       &lt;LENGTH&gt; + 4</span>
<a name="l00243"></a>00243 <span class="comment">                         *  \endcode</span>
<a name="l00244"></a>00244 <span class="comment">                         *</span>
<a name="l00245"></a>00245 <span class="comment">                         *  For frames of size &gt; 255 the frame format is an array of bytes in this order:</span>
<a name="l00246"></a>00246 <span class="comment">                         *  \code</span>
<a name="l00247"></a>00247 <span class="comment">                         *  &lt;START_FLAG&gt; &lt;HEADER&gt; &lt;HIBYTE(LENGTH)&gt; &lt;LOBYTE(LENGTH)&gt; &lt;BODY&gt; &lt;END_FLAG&gt;</span>
<a name="l00248"></a>00248 <span class="comment">                         *      &lt;START_FLAG&gt;    = 0x79</span>
<a name="l00249"></a>00249 <span class="comment">                         *      &lt;HEADER&gt;                = A header byte</span>
<a name="l00250"></a>00250 <span class="comment">                         *      &lt;LENGHT&gt;                = Number of bytes of BODY</span>
<a name="l00251"></a>00251 <span class="comment">                         *      &lt;BODY&gt;                  = N x bytes</span>
<a name="l00252"></a>00252 <span class="comment">                         *      &lt;END_FLAG&gt;              = 0X96</span>
<a name="l00253"></a>00253 <span class="comment">                         *  Total length        =       &lt;LENGTH&gt; + 5</span>
<a name="l00254"></a>00254 <span class="comment">                         *  \endcode</span>
<a name="l00255"></a>00255 <span class="comment">                         *</span>
<a name="l00256"></a>00256 <span class="comment">                         * \exception std::exception On communication errors</span>
<a name="l00257"></a>00257 <span class="comment">                         */</span>
<a name="l00258"></a>00258                         <span class="keywordtype">void</span>  sendMessage( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_message.html" title="A class that contain generic messages, that can be sent and received from a &quot;CClientTCPSocket&quot; object...">utils::CMessage</a> &amp;msg);
<a name="l00259"></a>00259 <span class="comment"></span>
<a name="l00260"></a>00260 <span class="comment">                        /** Tries to receive a message from the device.</span>
<a name="l00261"></a>00261 <span class="comment">                          * \exception std::exception On communication errors</span>
<a name="l00262"></a>00262 <span class="comment">                          * \returns True if successful, false if there is no new data from the device (but communications seem to work fine)</span>
<a name="l00263"></a>00263 <span class="comment">                          * \sa The frame format is described in sendMessage()</span>
<a name="l00264"></a>00264 <span class="comment">                          */</span>
<a name="l00265"></a>00265                         <span class="keywordtype">bool</span>  receiveMessage( <a class="code" href="classmrpt_1_1utils_1_1_c_message.html" title="A class that contain generic messages, that can be sent and received from a &quot;CClientTCPSocket&quot; object...">utils::CMessage</a> &amp;msg );
<a name="l00266"></a>00266 <span class="comment"></span>
<a name="l00267"></a>00267 <span class="comment">                        /** Reads from the stream until a &#39;\n&#39; character is found (&#39;\r&#39; characters are ignored).</span>
<a name="l00268"></a>00268 <span class="comment">                          * \return false on EOF or any other read error.</span>
<a name="l00269"></a>00269 <span class="comment">                          */</span>
<a name="l00270"></a>00270                         <span class="keywordtype">bool</span> getline(<a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;out_str);
<a name="l00271"></a>00271 
<a name="l00272"></a>00272 
<a name="l00273"></a>00273                 }; <span class="comment">// End of class def.</span>
<a name="l00274"></a>00274 
<a name="l00275"></a>00275 
<a name="l00276"></a><a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">00276</a> <span class="preprocessor">        #define DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE( T ) \</span>
<a name="l00277"></a>00277 <span class="preprocessor">                CStream BASE_IMPEXP &amp; operator&lt;&lt;(CStream&amp;out, const T &amp;a); \</span>
<a name="l00278"></a>00278 <span class="preprocessor">                CStream BASE_IMPEXP &amp; operator&gt;&gt;(CStream&amp;in, T &amp;a);</span>
<a name="l00279"></a>00279 <span class="preprocessor"></span>
<a name="l00280"></a>00280                 <span class="comment">// Definitions:</span>
<a name="l00281"></a>00281                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( <span class="keywordtype">bool</span> )
<a name="l00282"></a>00282                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( uint8_t )
<a name="l00283"></a>00283                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( int8_t )
<a name="l00284"></a>00284                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( uint16_t )
<a name="l00285"></a>00285                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( int16_t )
<a name="l00286"></a>00286                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( uint32_t )
<a name="l00287"></a>00287                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( int32_t )
<a name="l00288"></a>00288                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( uint64_t )
<a name="l00289"></a>00289                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( int64_t )
<a name="l00290"></a>00290                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( <span class="keywordtype">float</span> )
<a name="l00291"></a>00291                 <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( <span class="keywordtype">double</span> )
<a name="l00292"></a>00292 <span class="preprocessor">#ifdef HAVE_LONG_DOUBLE</span>
<a name="l00293"></a>00293 <span class="preprocessor"></span>                <a class="code" href="_c_stream_8h.html#aa3fc8643b8897d843e96f6254a4d9527">DECLARE_CSTREAM_READ_WRITE_SIMPLE_TYPE</a>( <span class="keywordtype">long</span> <span class="keywordtype">double</span> )
<a name="l00294"></a>00294 <span class="preprocessor">#endif</span>
<a name="l00295"></a>00295 <span class="preprocessor"></span>
<a name="l00296"></a>00296                 <span class="comment">// Why this shouldn&#39;t be templatized?: There&#39;s a more modern system</span>
<a name="l00297"></a>00297                 <span class="comment">// in MRPT that serializes any kind of vector&lt;T&gt;, deque&lt;T&gt;, etc... but</span>
<a name="l00298"></a>00298                 <span class="comment">// to keep COMPATIBILITY with old serialized objects we must preserve</span>
<a name="l00299"></a>00299                 <span class="comment">// the ones listed here:</span>
<a name="l00300"></a>00300 
<a name="l00301"></a>00301                 <span class="comment">// Write --------------------</span>
<a name="l00302"></a>00302                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;s, <span class="keyword">const</span> <span class="keywordtype">char</span> *a);
<a name="l00303"></a>00303                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;s, <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;str);
<a name="l00304"></a>00304 
<a name="l00305"></a>00305                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;s, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#aa271572e3985202e030758bfd54a02e1">vector_float</a>  &amp;a);
<a name="l00306"></a>00306                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;s, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#a4a6aab2c98368ca6b554c04f8fe84cfb">vector_double</a> &amp;a);
<a name="l00307"></a>00307 
<a name="l00308"></a>00308                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#ac2e04951e7bd82f53b6ecaa0fd8a2662">vector_int</a> &amp;a);
<a name="l00309"></a>00309                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#aa4dc027dbc3804c847a78892a2982047">vector_uint</a> &amp;a);
<a name="l00310"></a>00310                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#a47c2035f9c7d1897b91f97ab90290725">vector_word</a> &amp;a);
<a name="l00311"></a>00311                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#a23dec6de1d390f62796a046bf60dd8c3">vector_signed_word</a> &amp;a);
<a name="l00312"></a>00312                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#a6b02ea04c95f3f6a5c4b267da99d93ca">vector_long</a> &amp;a);
<a name="l00313"></a>00313                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#a3250fe562baad62b3da2e166eb8867df">vector_byte</a> &amp;a);
<a name="l00314"></a>00314                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#ad0fd30f28659350aa6ed37b31152e6c4">vector_signed_byte</a> &amp;a);
<a name="l00315"></a>00315 
<a name="l00316"></a>00316                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a236712f6f41bb81ba414c4b7dd94f5a3">operator &lt;&lt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;, <span class="keyword">const</span> <a class="code" href="namespacemrpt.html#a9fdb3cc3f73c5190fa022f858efbe6b1" title="A type for passing a vector of bools.">vector_bool</a> &amp;a);
<a name="l00317"></a>00317                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; operator &lt;&lt; (CStream&amp;, const std::vector&lt;std::string&gt; &amp;);
<a name="l00318"></a>00318 
<a name="l00319"></a>00319 <span class="preprocessor">        #if MRPT_WORD_SIZE!=32  // If it&#39;s 32 bit, size_t &lt;=&gt; uint32_t</span>
<a name="l00320"></a>00320 <span class="preprocessor"></span>                <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; operator &lt;&lt; (CStream&amp;, const std::vector&lt;size_t&gt; &amp;a);
<a name="l00321"></a>00321 <span class="preprocessor">        #endif</span>
<a name="l00322"></a>00322 <span class="preprocessor"></span>
<a name="l00323"></a>00323                 <span class="comment">// Read --------------------</span>
<a name="l00324"></a>00324                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <span class="keywordtype">char</span> *a);
<a name="l00325"></a>00325                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;str);
<a name="l00326"></a>00326 
<a name="l00327"></a>00327                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#a4a6aab2c98368ca6b554c04f8fe84cfb">vector_double</a> &amp;a);
<a name="l00328"></a>00328                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#aa271572e3985202e030758bfd54a02e1">vector_float</a> &amp;a);
<a name="l00329"></a>00329 
<a name="l00330"></a>00330                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#ac2e04951e7bd82f53b6ecaa0fd8a2662">vector_int</a> &amp;a);
<a name="l00331"></a>00331                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#aa4dc027dbc3804c847a78892a2982047">vector_uint</a> &amp;a);
<a name="l00332"></a>00332                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#a47c2035f9c7d1897b91f97ab90290725">vector_word</a> &amp;a);
<a name="l00333"></a>00333                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#a23dec6de1d390f62796a046bf60dd8c3">vector_signed_word</a> &amp;a);
<a name="l00334"></a>00334                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#a6b02ea04c95f3f6a5c4b267da99d93ca">vector_long</a> &amp;a);
<a name="l00335"></a>00335                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#a3250fe562baad62b3da2e166eb8867df">vector_byte</a> &amp;a);
<a name="l00336"></a>00336                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#ad0fd30f28659350aa6ed37b31152e6c4">vector_signed_byte</a> &amp;a);
<a name="l00337"></a>00337                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="namespacemrpt.html#a9fdb3cc3f73c5190fa022f858efbe6b1" title="A type for passing a vector of bools.">vector_bool</a> &amp;a);
<a name="l00338"></a>00338 
<a name="l00339"></a>00339                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator&gt;&gt;</a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;in, <a class="code" href="classstd_1_1vector.html">std::vector&lt;std::string&gt;</a> &amp;a);
<a name="l00340"></a>00340 
<a name="l00341"></a>00341                 <span class="comment">// For backward compatibility, since in MRPT&lt;0.8.1 vector_XXX and std::vector&lt;XXX&gt; were exactly equivalent, now there&#39;re not.</span>
<a name="l00342"></a>00342                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator &gt;&gt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;s, <a class="code" href="classstd_1_1vector.html">std::vector&lt;float&gt;</a>  &amp;a);
<a name="l00343"></a>00343                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator &gt;&gt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;s, <a class="code" href="classstd_1_1vector.html">std::vector&lt;double&gt;</a> &amp;a);
<a name="l00344"></a>00344                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; operator &lt;&lt; (CStream&amp;s, const std::vector&lt;float&gt;  &amp;a);
<a name="l00345"></a>00345                 <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; operator &lt;&lt; (CStream&amp;s, const std::vector&lt;double&gt; &amp;a);
<a name="l00346"></a>00346 
<a name="l00347"></a>00347 <span class="preprocessor">        #if MRPT_WORD_SIZE!=32  // If it&#39;s 32 bit, size_t &lt;=&gt; uint32_t</span>
<a name="l00348"></a>00348 <span class="preprocessor"></span>                <a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a> <a class="code" href="base_2include_2mrpt_2base_2link__pragmas_8h.html#a6045fa0129b1a3d6c8bf895470e66574">BASE_IMPEXP</a> &amp; <a class="code" href="namespacemrpt_1_1utils.html#a3494fa57d68d04e85f10edc3801debb3">operator &gt;&gt; </a>(<a class="code" href="namespacemrpt_1_1utils.html#a4aa6d0388c837d159ca801e48d601449">CStream</a>&amp;s, <a class="code" href="classstd_1_1vector.html">std::vector&lt;size_t&gt;</a> &amp;a);
<a name="l00349"></a>00349 <span class="preprocessor">        #endif</span>
<a name="l00350"></a>00350 <span class="preprocessor"></span>
<a name="l00351"></a>00351         } <span class="comment">// End of namespace</span>
<a name="l00352"></a>00352 } <span class="comment">// End of namespace</span>
<a name="l00353"></a>00353 
<a name="l00354"></a>00354 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150">  </td></tr> </table>  </body></html>