You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libsdr/classsdr_1_1_buffer_set.html

420 lines
21 KiB
HTML

<!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"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6"/>
<title>libsdr: sdr::BufferSet&lt; Scalar &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">libsdr
&#160;<span id="projectnumber">0.1.0</span>
</div>
<div id="projectbrief">A simple SDR library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<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 class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="classes.html"><span>Class&#160;Index</span></a></li>
<li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Pages</a></div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><b>sdr</b></li><li class="navelem"><a class="el" href="classsdr_1_1_buffer_set.html">BufferSet</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classsdr_1_1_buffer_set-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">sdr::BufferSet&lt; Scalar &gt; Class Template Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>A set of buffers, that tracks their usage.
<a href="classsdr_1_1_buffer_set.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="buffer_8hh_source.html">buffer.hh</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for sdr::BufferSet&lt; Scalar &gt;:</div>
<div class="dyncontent">
<div class="center">
<img src="classsdr_1_1_buffer_set.png" usemap="#sdr::BufferSet&lt; Scalar &gt;_map" alt=""/>
<map id="sdr::BufferSet&lt; Scalar &gt;_map" name="sdr::BufferSet&lt; Scalar &gt;_map">
<area href="classsdr_1_1_buffer_owner.html" title="Abstract class (interface) of a buffer owner. " alt="sdr::BufferOwner" shape="rect" coords="0,0,150,24"/>
</map>
</div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ab9925df548ac6382801dcd1a8fd0c280"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#ab9925df548ac6382801dcd1a8fd0c280">BufferSet</a> (size_t N, size_t size)</td></tr>
<tr class="memdesc:ab9925df548ac6382801dcd1a8fd0c280"><td class="mdescLeft">&#160;</td><td class="mdescRight">Preallocates N buffers of size <code>size</code>. <a href="#ab9925df548ac6382801dcd1a8fd0c280">More...</a><br/></td></tr>
<tr class="separator:ab9925df548ac6382801dcd1a8fd0c280"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84d2eb1c4d7f6f351c7db30154e2122b"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#a84d2eb1c4d7f6f351c7db30154e2122b">~BufferSet</a> ()</td></tr>
<tr class="memdesc:a84d2eb1c4d7f6f351c7db30154e2122b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor, unreferences all buffers. <a href="#a84d2eb1c4d7f6f351c7db30154e2122b">More...</a><br/></td></tr>
<tr class="separator:a84d2eb1c4d7f6f351c7db30154e2122b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15907b5ea81bb34ed07a021b6b3de68b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#a15907b5ea81bb34ed07a021b6b3de68b">hasBuffer</a> ()</td></tr>
<tr class="memdesc:a15907b5ea81bb34ed07a021b6b3de68b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if there is a free buffer. <a href="#a15907b5ea81bb34ed07a021b6b3de68b">More...</a><br/></td></tr>
<tr class="separator:a15907b5ea81bb34ed07a021b6b3de68b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee221d7b71f5f0a5b0b30991c34a362f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classsdr_1_1_buffer.html">Buffer</a>&lt; Scalar &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#aee221d7b71f5f0a5b0b30991c34a362f">getBuffer</a> ()</td></tr>
<tr class="memdesc:aee221d7b71f5f0a5b0b30991c34a362f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Obtains a free buffer. <a href="#aee221d7b71f5f0a5b0b30991c34a362f">More...</a><br/></td></tr>
<tr class="separator:aee221d7b71f5f0a5b0b30991c34a362f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a431c64dd75ca0e00337073428a8ddbbb"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#a431c64dd75ca0e00337073428a8ddbbb">bufferUnused</a> (const <a class="el" href="classsdr_1_1_raw_buffer.html">RawBuffer</a> &amp;buffer)</td></tr>
<tr class="memdesc:a431c64dd75ca0e00337073428a8ddbbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Callback gets called once the buffer gets unused. <a href="#a431c64dd75ca0e00337073428a8ddbbb">More...</a><br/></td></tr>
<tr class="separator:a431c64dd75ca0e00337073428a8ddbbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2b492dc68f98a3b554790b04578a73b1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#a2b492dc68f98a3b554790b04578a73b1">resize</a> (size_t numBuffers)</td></tr>
<tr class="memdesc:a2b492dc68f98a3b554790b04578a73b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resize the buffer set. <a href="#a2b492dc68f98a3b554790b04578a73b1">More...</a><br/></td></tr>
<tr class="separator:a2b492dc68f98a3b554790b04578a73b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a4e40fee0411c0cce0d6706e7d606ac5e"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#a4e40fee0411c0cce0d6706e7d606ac5e">_bufferSize</a></td></tr>
<tr class="memdesc:a4e40fee0411c0cce0d6706e7d606ac5e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of each buffer. <a href="#a4e40fee0411c0cce0d6706e7d606ac5e">More...</a><br/></td></tr>
<tr class="separator:a4e40fee0411c0cce0d6706e7d606ac5e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa1f0fa97d1b819c03fbc5cb1ec2bd56b"><td class="memItemLeft" align="right" valign="top">std::map&lt; void *, <a class="el" href="classsdr_1_1_buffer.html">Buffer</a><br class="typebreak"/>
&lt; Scalar &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#aa1f0fa97d1b819c03fbc5cb1ec2bd56b">_buffers</a></td></tr>
<tr class="memdesc:aa1f0fa97d1b819c03fbc5cb1ec2bd56b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Holds a reference to each buffer of the buffer set, referenced by the data pointer of the buffer. <a href="#aa1f0fa97d1b819c03fbc5cb1ec2bd56b">More...</a><br/></td></tr>
<tr class="separator:aa1f0fa97d1b819c03fbc5cb1ec2bd56b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afcc2d267bac67e0de7450d7a520e4439"><td class="memItemLeft" align="right" valign="top">std::vector&lt; void * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classsdr_1_1_buffer_set.html#afcc2d267bac67e0de7450d7a520e4439">_free_buffers</a></td></tr>
<tr class="memdesc:afcc2d267bac67e0de7450d7a520e4439"><td class="mdescLeft">&#160;</td><td class="mdescRight">A vector of all unused buffers. <a href="#afcc2d267bac67e0de7450d7a520e4439">More...</a><br/></td></tr>
<tr class="separator:afcc2d267bac67e0de7450d7a520e4439"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;class Scalar&gt;<br/>
class sdr::BufferSet&lt; Scalar &gt;</h3>
<p>A set of buffers, that tracks their usage. </p>
<p>Frequently it is impossible to predict the time, a buffer will be in use. Instead of allocating a new buffer during runtime, one may allocate several buffer in advance. In this case, it is important to track which buffer is still in use efficiently. This class implements this functionality. A <code><a class="el" href="classsdr_1_1_buffer_set.html" title="A set of buffers, that tracks their usage. ">BufferSet</a></code> pre-allocates several buffers. Once a buffer is requested from the set, it gets marked as "in-use". Once the buffer gets ununsed, it will be marked as "unused" and will be available again. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="ab9925df548ac6382801dcd1a8fd0c280"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::<a class="el" href="classsdr_1_1_buffer_set.html">BufferSet</a> </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>N</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>size</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Preallocates N buffers of size <code>size</code>. </p>
</div>
</div>
<a class="anchor" id="a84d2eb1c4d7f6f351c7db30154e2122b"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::~<a class="el" href="classsdr_1_1_buffer_set.html">BufferSet</a> </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Destructor, unreferences all buffers. </p>
<p>Buffers still in use, are freed once they are dereferenced. </p>
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a431c64dd75ca0e00337073428a8ddbbb"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">virtual void <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::bufferUnused </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classsdr_1_1_raw_buffer.html">RawBuffer</a> &amp;&#160;</td>
<td class="paramname"><em>buffer</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Callback gets called once the buffer gets unused. </p>
<p>Implements <a class="el" href="classsdr_1_1_buffer_owner.html#ac00340809e90b9719bb44ebd61cb0cec">sdr::BufferOwner</a>.</p>
</div>
</div>
<a class="anchor" id="aee221d7b71f5f0a5b0b30991c34a362f"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classsdr_1_1_buffer.html">Buffer</a>&lt;Scalar&gt; <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::getBuffer </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Obtains a free buffer. </p>
</div>
</div>
<a class="anchor" id="a15907b5ea81bb34ed07a021b6b3de68b"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::hasBuffer </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Returns true if there is a free buffer. </p>
</div>
</div>
<a class="anchor" id="a2b492dc68f98a3b554790b04578a73b1"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::resize </td>
<td>(</td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>numBuffers</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Resize the buffer set. </p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a class="anchor" id="aa1f0fa97d1b819c03fbc5cb1ec2bd56b"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::map&lt;void *, <a class="el" href="classsdr_1_1_buffer.html">Buffer</a>&lt;Scalar&gt; &gt; <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::_buffers</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Holds a reference to each buffer of the buffer set, referenced by the data pointer of the buffer. </p>
</div>
</div>
<a class="anchor" id="a4e40fee0411c0cce0d6706e7d606ac5e"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">size_t <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::_bufferSize</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Size of each buffer. </p>
</div>
</div>
<a class="anchor" id="afcc2d267bac67e0de7450d7a520e4439"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class Scalar&gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;void *&gt; <a class="el" href="classsdr_1_1_buffer_set.html">sdr::BufferSet</a>&lt; Scalar &gt;::_free_buffers</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>A vector of all unused buffers. </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>/home/hannes/sdr/libsdr/src/<a class="el" href="buffer_8hh_source.html">buffer.hh</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed May 27 2015 15:24:41 for libsdr by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.6
</small></address>
</body>
</html>