|
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.9.1"/>
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
- <title>DISTRHO Plugin Framework: HeapBuffer Struct 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/searchdata.js"></script>
- <script type="text/javascript" src="search/search.js"></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 id="projectalign" style="padding-left: 0.5em;">
- <div id="projectname">DISTRHO Plugin Framework
- </div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- <!-- end header part -->
- <!-- Generated by Doxygen 1.9.1 -->
- <script type="text/javascript">
- /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
- var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
- /* @license-end */
- </script>
- <script type="text/javascript" src="menudata.js"></script>
- <script type="text/javascript" src="menu.js"></script>
- <script type="text/javascript">
- /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
- $(function() {
- initMenu('',true,false,'search.php','Search');
- $(document).ready(function() { init_search(); });
- });
- /* @license-end */</script>
- <div id="main-nav"></div>
- <!-- window showing the filter options -->
- <div id="MSearchSelectWindow"
- onmouseover="return searchBox.OnSearchSelectShow()"
- onmouseout="return searchBox.OnSearchSelectHide()"
- onkeydown="return searchBox.OnSearchSelectKey(event)">
- </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><!-- top -->
- <div class="header">
- <div class="summary">
- <a href="#pub-attribs">Public Attributes</a> |
- <a href="structHeapBuffer-members.html">List of all members</a> </div>
- <div class="headertitle">
- <div class="title">HeapBuffer Struct Reference</div> </div>
- </div><!--header-->
- <div class="contents">
-
- <p><code>#include <<a class="el" href="RingBuffer_8hpp_source.html">RingBuffer.hpp</a>></code></p>
- <table class="memberdecls">
- <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
- Public Attributes</h2></td></tr>
- <tr class="memitem:a582e7b5aa4a85814f291d002abb49599"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structHeapBuffer.html#a582e7b5aa4a85814f291d002abb49599">size</a></td></tr>
- <tr class="separator:a582e7b5aa4a85814f291d002abb49599"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a55b0dceb6b878021d8fe1353096e757b"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structHeapBuffer.html#a55b0dceb6b878021d8fe1353096e757b">head</a></td></tr>
- <tr class="separator:a55b0dceb6b878021d8fe1353096e757b"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:abd05cbae44531a412352ed52c8a50aec"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structHeapBuffer.html#abd05cbae44531a412352ed52c8a50aec">tail</a></td></tr>
- <tr class="separator:abd05cbae44531a412352ed52c8a50aec"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a4d330b5567a46f6b6972f5174b262292"><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structHeapBuffer.html#a4d330b5567a46f6b6972f5174b262292">wrtn</a></td></tr>
- <tr class="separator:a4d330b5567a46f6b6972f5174b262292"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:a0cd85f596b680b57cc6669de7cf7ed27"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="structHeapBuffer.html#a0cd85f596b680b57cc6669de7cf7ed27">invalidateCommit</a></td></tr>
- <tr class="separator:a0cd85f596b680b57cc6669de7cf7ed27"><td class="memSeparator" colspan="2"> </td></tr>
- <tr class="memitem:afbaf206237e4898a306025676dce0987"><td class="memItemLeft" align="right" valign="top">uint8_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="structHeapBuffer.html#afbaf206237e4898a306025676dce0987">buf</a></td></tr>
- <tr class="separator:afbaf206237e4898a306025676dce0987"><td class="memSeparator" colspan="2"> </td></tr>
- </table>
- <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
- <div class="textblock"><p>Base structure for all RingBuffer containers. This struct details the data model used in DPF's RingBuffer class.</p>
- <p>DPF RingBuffer uses a struct just like this one to store positions, buffer data, size, etc. The RingBuffer itself takes ownership of this struct and uses it to store any needed data. This allows to dynamically change the way its ring buffer is allocated, simply by changing the template type. For example, <code><a class="el" href="classRingBufferControl.html">RingBufferControl</a><<a class="el" href="structHeapBuffer.html">HeapBuffer</a>></code> will create a ring buffer with heap memory, which can be of any size. In the same vein, <code><a class="el" href="classRingBufferControl.html">RingBufferControl</a><<a class="el" href="structSmallStackBuffer.html">SmallStackBuffer</a>></code> will create a ring buffer with stack memory, directly tied to the <a class="el" href="classRingBufferControl.html">RingBufferControl</a> it belongs to.</p>
- <p>The main idea behind this model is to allow <a class="el" href="classRingBufferControl.html">RingBufferControl</a> over memory created elsewhere, for example shared memory area. One can create/place the Buffer struct in shared memory, and point <a class="el" href="classRingBufferControl.html">RingBufferControl</a> to it, thus avoiding the pitfalls of sharing access to a non trivially-copyable/POD C++ class.</p>
- <p>Unlike other ring buffers, an extra variable is used to track pending writes. This is so we can write a few bytes at a time and later mark the whole operation as complete, thus avoiding the issue of reading data too early from the other side. For example, write the size of some data first, and then the actual data. The reading side will only see data available once size + data is completely written and "committed". </p>
- </div><h2 class="groupheader">Member Data Documentation</h2>
- <a id="a582e7b5aa4a85814f291d002abb49599"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a582e7b5aa4a85814f291d002abb49599">◆ </a></span>size</h2>
-
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">uint32_t HeapBuffer::size</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p><a class="el" href="classSize.html">Size</a> of the buffer, allocated in <em>buf</em>. If the size is fixed (stack buffer), this variable can be static. </p>
-
- </div>
- </div>
- <a id="a55b0dceb6b878021d8fe1353096e757b"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a55b0dceb6b878021d8fe1353096e757b">◆ </a></span>head</h2>
-
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">uint32_t HeapBuffer::head</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Current writing position, headmost position of the buffer. Increments when writing. </p>
-
- </div>
- </div>
- <a id="abd05cbae44531a412352ed52c8a50aec"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#abd05cbae44531a412352ed52c8a50aec">◆ </a></span>tail</h2>
-
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">uint32_t HeapBuffer::tail</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Current reading position, last used position of the buffer. Increments when reading. head == tail means empty buffer. </p>
-
- </div>
- </div>
- <a id="a4d330b5567a46f6b6972f5174b262292"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a4d330b5567a46f6b6972f5174b262292">◆ </a></span>wrtn</h2>
-
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">uint32_t HeapBuffer::wrtn</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Temporary position of head until a commitWrite() is called. If buffer writing fails, wrtn will be back to head position thus ignoring the last operation(s). If buffer writing succeeds, head will be set to this variable. </p>
-
- </div>
- </div>
- <a id="a0cd85f596b680b57cc6669de7cf7ed27"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#a0cd85f596b680b57cc6669de7cf7ed27">◆ </a></span>invalidateCommit</h2>
-
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">bool HeapBuffer::invalidateCommit</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Boolean used to check if a write operation failed. This ensures we don't get incomplete writes. </p>
-
- </div>
- </div>
- <a id="afbaf206237e4898a306025676dce0987"></a>
- <h2 class="memtitle"><span class="permalink"><a href="#afbaf206237e4898a306025676dce0987">◆ </a></span>buf</h2>
-
- <div class="memitem">
- <div class="memproto">
- <table class="memname">
- <tr>
- <td class="memname">uint8_t* HeapBuffer::buf</td>
- </tr>
- </table>
- </div><div class="memdoc">
- <p>Pointer to buffer data. This can be either stack or heap data, depending on the usecase. </p>
-
- </div>
- </div>
- <hr/>The documentation for this struct was generated from the following file:<ul>
- <li>distrho/extra/<a class="el" href="RingBuffer_8hpp_source.html">RingBuffer.hpp</a></li>
- </ul>
- </div><!-- contents -->
- <!-- start footer part -->
- <hr class="footer"/><address class="footer"><small>
- Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
- </small></address>
- </body>
- </html>
|