Sophie

Sophie

distrib > Mandriva > 2010.1 > i586 > by-pkgid > 4f5f2dc0f55b453456458df885792b0b > files > 40

ucommon-doc-5.0.4-1mdv2010.2.i586.rpm

<!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>ucommon: ucommon::Buffer Class Reference</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.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="classes.html"><span>Data&nbsp;Structure&nbsp;Index</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="a00208.html">ucommon</a>::<a class="el" href="a00026.html">Buffer</a>
  </div>
</div>
<div class="contents">
<h1>ucommon::Buffer Class Reference</h1><!-- doxytag: class="ucommon::Buffer" --><!-- doxytag: inherits="ucommon::Conditional" -->
<p>A thread-safe buffer for serializing and streaming class data.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="a00181_source.html">containers.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ucommon::Buffer:</div>
<div class="dynsection">
<div class="center"><img src="a00344.png" border="0" usemap="#ucommon_1_1_buffer_inherit__map" alt="Inheritance graph"/></div>
<map name="ucommon_1_1_buffer_inherit__map" id="ucommon_1_1_buffer_inherit__map">
<area shape="rect" id="node5" href="a00027.html" title="A templated typed class for buffering of objects." alt="" coords="5,155,248,181"/><area shape="rect" id="node2" href="a00036.html" title="The conditional is a common base for other thread synchronizing classes." alt="" coords="16,5,237,32"/></map>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for ucommon::Buffer:</div>
<div class="dynsection">
<div class="center"><img src="a00345.png" border="0" usemap="#ucommon_1_1_buffer_coll__map" alt="Collaboration graph"/></div>
<map name="ucommon_1_1_buffer_coll__map" id="ucommon_1_1_buffer_coll__map">
<area shape="rect" id="node2" href="a00036.html" title="The conditional is a common base for other thread synchronizing classes." alt="" coords="5,5,227,32"/></map>
<center><span class="legend">[<a target="top" href="graph_legend.html">legend</a>]</span></center></div>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a037b3875f8e1ecc8cb89f3fe61c5fbd7">Buffer</a> (size_t size, size_t count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a buffer to hold a series of objects.  <a href="#a037b3875f8e1ecc8cb89f3fe61c5fbd7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a55e764ce6aeddc9fe3e7b55653594204">copy</a> (void *data, <a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy the next object from the buffer.  <a href="#a55e764ce6aeddc9fe3e7b55653594204"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#ae0c482ceaab3a1cf27185ab3427ba19a">copy</a> (void *data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy the next object from the buffer.  <a href="#ae0c482ceaab3a1cf27185ab3427ba19a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#ad00abb61c3133f054d06a9be6e8d89f8">get</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the next object from the buffer.  <a href="#ad00abb61c3133f054d06a9be6e8d89f8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a2e0d39976fbf16c0905811f39d14c781">get</a> (<a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the next object from the buffer.  <a href="#a2e0d39976fbf16c0905811f39d14c781"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a9befcf4715bc0d9f8cfd237cf5bc4034">getCount</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of objects in the buffer currently.  <a href="#a9befcf4715bc0d9f8cfd237cf5bc4034"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#ac2da027197e0b89a3d028ead5cc8072b">getSize</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the size of the buffer.  <a href="#ac2da027197e0b89a3d028ead5cc8072b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a1ba7949ed0be0199753a4c0825f10278">operator bool</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Test if there is data waiting in the buffer.  <a href="#a1ba7949ed0be0199753a4c0825f10278"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a859a6c97f6da24a45a4d9170148a525f">operator!</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Test if the buffer is empty.  <a href="#a859a6c97f6da24a45a4d9170148a525f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a44b2362a2d602259fc9240b03b9987d1">put</a> (void *data, <a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Put (copy) an object into the buffer.  <a href="#a44b2362a2d602259fc9240b03b9987d1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a0bc7f5b59e95786abb1eae072e08ff52">put</a> (void *data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Put (copy) an object into the buffer.  <a href="#a0bc7f5b59e95786abb1eae072e08ff52"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#af894f8538098c6275e3129c23c172b9c">release</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release must be called when we get an object from the buffer.  <a href="#af894f8538098c6275e3129c23c172b9c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f8bc75e7e0a872d0c90343ed202396f"></a><!-- doxytag: member="ucommon::Buffer::~Buffer" ref="a6f8bc75e7e0a872d0c90343ed202396f" args="()" -->
virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00026.html#a6f8bc75e7e0a872d0c90343ed202396f">~Buffer</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Deallocate buffer and unblock any waiting threads. <br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A thread-safe buffer for serializing and streaming class data. </p>
<p>While the queue and stack operate by managing lists of reference pointers to objects of various mixed kind, the buffer holds physical copies of objects that being passed through it, and all must be the same size. The buffer class can be used stand-alone or with the typed bufferof template. The buffer is accessed in fifo order. </p>
<dl class="author"><dt><b>Author:</b></dt><dd>David Sugar &lt;<a href="mailto:dyfet@gnutelephony.org">dyfet@gnutelephony.org</a>&gt; </dd></dl>

<p>Definition at line <a class="el" href="a00181_source.html#l00096">96</a> of file <a class="el" href="a00181_source.html">containers.h</a>.</p>
<hr/><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a037b3875f8e1ecc8cb89f3fe61c5fbd7"></a><!-- doxytag: member="ucommon::Buffer::Buffer" ref="a037b3875f8e1ecc8cb89f3fe61c5fbd7" args="(size_t size, size_t count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">ucommon::Buffer::Buffer </td>
          <td>(</td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>size</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&nbsp;</td>
          <td class="paramname"> <em>count</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Create a buffer to hold a series of objects. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>of each object in buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td>of objects in the buffer. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a55e764ce6aeddc9fe3e7b55653594204"></a><!-- doxytag: member="ucommon::Buffer::copy" ref="a55e764ce6aeddc9fe3e7b55653594204" args="(void *data, timeout_t timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ucommon::Buffer::copy </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Copy the next object from the buffer. </p>
<p><a class="el" href="a00026.html" title="A thread-safe buffer for serializing and streaming class data.">Buffer</a> is auto-released. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>pointer to copy into. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>to wait when buffer is empty in milliseconds. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if object copied, or false if timed out. </dd></dl>

</div>
</div>
<a class="anchor" id="ae0c482ceaab3a1cf27185ab3427ba19a"></a><!-- doxytag: member="ucommon::Buffer::copy" ref="ae0c482ceaab3a1cf27185ab3427ba19a" args="(void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ucommon::Buffer::copy </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Copy the next object from the buffer. </p>
<p>This blocks until an object becomes available. <a class="el" href="a00026.html" title="A thread-safe buffer for serializing and streaming class data.">Buffer</a> is auto-released. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>pointer to copy into. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ad00abb61c3133f054d06a9be6e8d89f8"></a><!-- doxytag: member="ucommon::Buffer::get" ref="ad00abb61c3133f054d06a9be6e8d89f8" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* ucommon::Buffer::get </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the next object from the buffer. </p>
<p>This blocks until an object becomes available. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to next object from buffer. </dd></dl>

<p>Reimplemented in <a class="el" href="a00027.html#aaf36f574f17e0a40278482306f5e6318">ucommon::bufferof&lt; T &gt;</a>.</p>

</div>
</div>
<a class="anchor" id="a2e0d39976fbf16c0905811f39d14c781"></a><!-- doxytag: member="ucommon::Buffer::get" ref="a2e0d39976fbf16c0905811f39d14c781" args="(timeout_t timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void* ucommon::Buffer::get </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the next object from the buffer. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>to wait when buffer is empty in milliseconds. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>pointer to next object in the buffer or NULL if timed out. </dd></dl>

<p>Reimplemented in <a class="el" href="a00027.html#a8ade0d88ead431617345d7b40d574dda">ucommon::bufferof&lt; T &gt;</a>.</p>

</div>
</div>
<a class="anchor" id="a9befcf4715bc0d9f8cfd237cf5bc4034"></a><!-- doxytag: member="ucommon::Buffer::getCount" ref="a9befcf4715bc0d9f8cfd237cf5bc4034" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned ucommon::Buffer::getCount </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the number of objects in the buffer currently. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>number of objects buffered. </dd></dl>

</div>
</div>
<a class="anchor" id="ac2da027197e0b89a3d028ead5cc8072b"></a><!-- doxytag: member="ucommon::Buffer::getSize" ref="ac2da027197e0b89a3d028ead5cc8072b" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned ucommon::Buffer::getSize </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the size of the buffer. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>size of the buffer. </dd></dl>

</div>
</div>
<a class="anchor" id="a1ba7949ed0be0199753a4c0825f10278"></a><!-- doxytag: member="ucommon::Buffer::operator bool" ref="a1ba7949ed0be0199753a4c0825f10278" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">ucommon::Buffer::operator bool </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Test if there is data waiting in the buffer. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if buffer has data. </dd></dl>

</div>
</div>
<a class="anchor" id="a859a6c97f6da24a45a4d9170148a525f"></a><!-- doxytag: member="ucommon::Buffer::operator!" ref="a859a6c97f6da24a45a4d9170148a525f" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ucommon::Buffer::operator! </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Test if the buffer is empty. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if the buffer is empty. </dd></dl>

</div>
</div>
<a class="anchor" id="a44b2362a2d602259fc9240b03b9987d1"></a><!-- doxytag: member="ucommon::Buffer::put" ref="a44b2362a2d602259fc9240b03b9987d1" args="(void *data, timeout_t timeout)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ucommon::Buffer::put </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="a00194.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>&nbsp;</td>
          <td class="paramname"> <em>timeout</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Put (copy) an object into the buffer. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>to copy into the buffer. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>timeout</em>&nbsp;</td><td>to wait if buffer is full. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>true if copied, false if timed out while full. </dd></dl>

</div>
</div>
<a class="anchor" id="a0bc7f5b59e95786abb1eae072e08ff52"></a><!-- doxytag: member="ucommon::Buffer::put" ref="a0bc7f5b59e95786abb1eae072e08ff52" args="(void *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ucommon::Buffer::put </td>
          <td>(</td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>data</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Put (copy) an object into the buffer. </p>
<p>This blocks while the buffer is full. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>to copy into the buffer. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="af894f8538098c6275e3129c23c172b9c"></a><!-- doxytag: member="ucommon::Buffer::release" ref="af894f8538098c6275e3129c23c172b9c" args="(void)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ucommon::Buffer::release </td>
          <td>(</td>
          <td class="paramtype">void&nbsp;</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Release must be called when we get an object from the buffer. </p>
<p>This is because the pointer we return is a physical pointer to memory that is part of the buffer. The object we get cannot be removed or the memory modified while the object is being used. </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>ucommon/<a class="el" href="a00181_source.html">containers.h</a></li>
</ul>
</div>
<hr class="footer"/><address style="text-align: right;"><small>Generated on Thu Jul 14 16:39:29 2011 for ucommon by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.3 </small></address>
</body>
</html>