<!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.8"/> <title>UHD: include/uhd/transport/zero_copy.hpp Source File</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">UHD  <span id="projectnumber">003.007.002-0-unknown</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.8 --> <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 Page</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"> <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="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File 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"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Macros</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"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_9b536c30bc5a9db2084d75e9c271ba6f.html">uhd</a></li><li class="navelem"><a class="el" href="dir_72c1d58d372b837697c1167a99ca9c7a.html">transport</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">zero_copy.hpp</div> </div> </div><!--header--> <div class="contents"> <a href="zero__copy_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//</span></div> <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// Copyright 2010-2012 Ettus Research LLC</span></div> <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">//</span></div> <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div> <div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div> <div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div> <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// (at your option) any later version.</span></div> <div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">//</span></div> <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div> <div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div> <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div> <div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">// GNU General Public License for more details.</span></div> <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">//</span></div> <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div> <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div> <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">//</span></div> <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div> <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#ifndef INCLUDED_UHD_TRANSPORT_ZERO_COPY_HPP</span></div> <div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#define INCLUDED_UHD_TRANSPORT_ZERO_COPY_HPP</span></div> <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div> <div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#include <<a class="code" href="config_8hpp.html">uhd/config.hpp</a>></span></div> <div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include <boost/utility.hpp></span></div> <div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include <boost/shared_ptr.hpp></span></div> <div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#include <boost/intrusive_ptr.hpp></span></div> <div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#include <boost/detail/atomic_count.hpp></span></div> <div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div> <div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">namespace </span><a class="code" href="namespaceuhd.html">uhd</a>{ <span class="keyword">namespace </span>transport{</div> <div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div> <div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html"> 30</a></span>  <span class="keyword">class </span><a class="code" href="config_8hpp.html#adc68e1c030efb88af856decedf19aedf">UHD_API</a> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html">managed_buffer</a>{</div> <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <span class="keyword">public</span>:</div> <div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#a35e4a3cbfd1d6704d8497a205ff6c9f3"> 32</a></span>  <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a35e4a3cbfd1d6704d8497a205ff6c9f3">managed_buffer</a>(<span class="keywordtype">void</span>):_ref_count(0),_buffer(NULL),_length(0)</div> <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div> <div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifdef UHD_TXRX_DEBUG_PRINTS</span></div> <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  _mb_num = s_buffer_count;</div> <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// From Boost website: atomic_count seems only to have precrement operator.</span></div> <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  ++s_buffer_count;</div> <div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  }</div> <div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div> <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#aa03dbc092f0d8dbe41f4a0cab54ecf51"> 41</a></span>  <span class="keyword">virtual</span> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#aa03dbc092f0d8dbe41f4a0cab54ecf51">~managed_buffer</a>(<span class="keywordtype">void</span>) {}</div> <div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div> <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> release(<span class="keywordtype">void</span>) = 0;</div> <div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div> <div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#a18a1d5f3e8996bb75a3ba4bf27ebdbff"> 54</a></span>  <a class="code" href="config_8hpp.html#a8b9b549161081d54c2161046649a0323">UHD_INLINE</a> <span class="keywordtype">void</span> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a18a1d5f3e8996bb75a3ba4bf27ebdbff">commit</a>(<span class="keywordtype">size_t</span> num_bytes){</div> <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  _length = num_bytes;</div> <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div> <div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div> <div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#a958beedfa8de33c6aac38f90a0479382"> 62</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="config_8hpp.html#a8b9b549161081d54c2161046649a0323">UHD_INLINE</a> T <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a958beedfa8de33c6aac38f90a0479382">cast</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span>{</div> <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>T<span class="keyword">></span>(_buffer);</div> <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div> <div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div> <div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#a2044880e1c0149a95b073309c5c75bad"> 70</a></span>  <a class="code" href="config_8hpp.html#a8b9b549161081d54c2161046649a0323">UHD_INLINE</a> <span class="keywordtype">size_t</span> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a2044880e1c0149a95b073309c5c75bad">size</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span>{</div> <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">return</span> _length;</div> <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  }</div> <div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div> <div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#af93160f0440e18652142b56a0dd0dba6"> 75</a></span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T> <a class="code" href="config_8hpp.html#a8b9b549161081d54c2161046649a0323">UHD_INLINE</a> boost::intrusive_ptr<T> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#af93160f0440e18652142b56a0dd0dba6">make</a>(</div> <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  T *p, <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length</div> <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  ){</div> <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  _buffer = buffer;</div> <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  _length = length;</div> <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keywordflow">return</span> boost::intrusive_ptr<T>(p);</div> <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div> <div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div> <div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#a2a2404a5e656c1c23f930e1eb51cf583"> 83</a></span>  boost::detail::atomic_count <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a2a2404a5e656c1c23f930e1eb51cf583">_ref_count</a>;</div> <div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#acf117d1cdfc052362f701f63ec1390af"> 84</a></span>  <span class="keyword">typedef</span> boost::intrusive_ptr<managed_buffer> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#acf117d1cdfc052362f701f63ec1390af">sptr</a>;</div> <div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div> <div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#a0add4d0b654ed789a8513a14625657fb"> 86</a></span>  <span class="keywordtype">int</span> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a0add4d0b654ed789a8513a14625657fb">ref_count</a>(){</div> <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> (<span class="keywordtype">int</span>) _ref_count;</div> <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div> <div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div> <div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor">#ifdef UHD_TXRX_DEBUG_PRINTS</span></div> <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordtype">int</span> num()<span class="keyword"> const</span>{</div> <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> _mb_num;</div> <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div> <div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div> <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">protected</span>:</div> <div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#ad25617124b960dff45a6916acc7df42f"> 97</a></span>  <span class="keywordtype">void</span> *<a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#ad25617124b960dff45a6916acc7df42f">_buffer</a>;</div> <div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__buffer.html#a486a6c5dce84878c8431b73a553d28fa"> 98</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a486a6c5dce84878c8431b73a553d28fa">_length</a>;</div> <div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor">#ifdef UHD_TXRX_DEBUG_PRINTS</span></div> <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordtype">int</span> _mb_num;</div> <div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div> <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keyword">private</span>:</div> <div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor">#ifdef UHD_TXRX_DEBUG_PRINTS</span></div> <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">static</span> boost::detail::atomic_count s_buffer_count;</div> <div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  };</div> <div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div> <div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="namespaceuhd_1_1transport.html#a00d41dc37684e3dde7e0dda35995de49"> 109</a></span>  <a class="code" href="config_8hpp.html#a8b9b549161081d54c2161046649a0323">UHD_INLINE</a> <span class="keywordtype">void</span> <a class="code" href="namespaceuhd_1_1transport.html#a00d41dc37684e3dde7e0dda35995de49">intrusive_ptr_add_ref</a>(<a class="code" href="classuhd_1_1transport_1_1managed__buffer.html">managed_buffer</a> *p){</div> <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  ++(p-><a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a2a2404a5e656c1c23f930e1eb51cf583">_ref_count</a>);</div> <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div> <div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div> <div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="namespaceuhd_1_1transport.html#afff62a1607ce569c3a32e88777b2df0a"> 113</a></span>  <a class="code" href="config_8hpp.html#a8b9b549161081d54c2161046649a0323">UHD_INLINE</a> <span class="keywordtype">void</span> <a class="code" href="namespaceuhd_1_1transport.html#afff62a1607ce569c3a32e88777b2df0a">intrusive_ptr_release</a>(<a class="code" href="classuhd_1_1transport_1_1managed__buffer.html">managed_buffer</a> *p){</div> <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">if</span> (--(p-><a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#a2a2404a5e656c1c23f930e1eb51cf583">_ref_count</a>) == 0) p-><a class="code" href="classuhd_1_1transport_1_1managed__buffer.html#afc7064023c7dbe6a03e31128fa270715">release</a>();</div> <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div> <div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> <div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__recv__buffer.html"> 122</a></span>  <span class="keyword">class </span><a class="code" href="config_8hpp.html#adc68e1c030efb88af856decedf19aedf">UHD_API</a> <a class="code" href="classuhd_1_1transport_1_1managed__recv__buffer.html">managed_recv_buffer</a> : <span class="keyword">public</span> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html">managed_buffer</a>{</div> <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keyword">public</span>:</div> <div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__recv__buffer.html#a00e07a3493c36ce8b54a609268ee7896"> 124</a></span>  <span class="keyword">typedef</span> boost::intrusive_ptr<managed_recv_buffer> <a class="code" href="classuhd_1_1transport_1_1managed__recv__buffer.html#a00e07a3493c36ce8b54a609268ee7896">sptr</a>;</div> <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  };</div> <div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div> <div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__send__buffer.html"> 132</a></span>  <span class="keyword">class </span><a class="code" href="config_8hpp.html#adc68e1c030efb88af856decedf19aedf">UHD_API</a> <a class="code" href="classuhd_1_1transport_1_1managed__send__buffer.html">managed_send_buffer</a> : <span class="keyword">public</span> <a class="code" href="classuhd_1_1transport_1_1managed__buffer.html">managed_buffer</a>{</div> <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">public</span>:</div> <div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1managed__send__buffer.html#a6bb69c3e7d8f762a065dd66f6f8b3e41"> 134</a></span>  <span class="keyword">typedef</span> boost::intrusive_ptr<managed_send_buffer> <a class="code" href="classuhd_1_1transport_1_1managed__send__buffer.html#a6bb69c3e7d8f762a065dd66f6f8b3e41">sptr</a>;</div> <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  };</div> <div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div> <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="structuhd_1_1transport_1_1zero__copy__xport__params.html"> 140</a></span>  <span class="keyword">struct </span><a class="code" href="structuhd_1_1transport_1_1zero__copy__xport__params.html">zero_copy_xport_params</a> {</div> <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a16fb4cf4bb36e46224d6df81697668cb"> 141</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a16fb4cf4bb36e46224d6df81697668cb">recv_frame_size</a>;</div> <div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a31d6a719fdf042593c38de4d1b4e38bc"> 142</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a31d6a719fdf042593c38de4d1b4e38bc">send_frame_size</a>;</div> <div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a05832937ccd7aabc891f331a2fd4b915"> 143</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a05832937ccd7aabc891f331a2fd4b915">num_recv_frames</a>;</div> <div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a6dee1be80a77e669929cc3136d679d84"> 144</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a6dee1be80a77e669929cc3136d679d84">num_send_frames</a>;</div> <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  };</div> <div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div> <div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1zero__copy__if.html"> 152</a></span>  <span class="keyword">class </span><a class="code" href="config_8hpp.html#adc68e1c030efb88af856decedf19aedf">UHD_API</a> <a class="code" href="classuhd_1_1transport_1_1zero__copy__if.html">zero_copy_if</a> : boost::noncopyable{</div> <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">public</span>:</div> <div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1zero__copy__if.html#aee1d3b676905a547aede35b85438e613"> 154</a></span>  <span class="keyword">typedef</span> boost::shared_ptr<zero_copy_if> <a class="code" href="classuhd_1_1transport_1_1zero__copy__if.html#aee1d3b676905a547aede35b85438e613">sptr</a>;</div> <div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div> <div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classuhd_1_1transport_1_1zero__copy__if.html#a90e0e317f33f7c54d17407801d364ede"> 159</a></span>  <span class="keyword">virtual</span> <a class="code" href="classuhd_1_1transport_1_1zero__copy__if.html#a90e0e317f33f7c54d17407801d364ede">~zero_copy_if</a>() {};</div> <div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div> <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keyword">virtual</span> <a class="code" href="classuhd_1_1transport_1_1managed__recv__buffer.html#a00e07a3493c36ce8b54a609268ee7896">managed_recv_buffer::sptr</a> get_recv_buff(<span class="keywordtype">double</span> timeout = 0.1) = 0;</div> <div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div> <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> get_num_recv_frames(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;</div> <div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div> <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> get_recv_frame_size(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;</div> <div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div> <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keyword">virtual</span> <a class="code" href="classuhd_1_1transport_1_1managed__send__buffer.html#a6bb69c3e7d8f762a065dd66f6f8b3e41">managed_send_buffer::sptr</a> get_send_buff(<span class="keywordtype">double</span> timeout = 0.1) = 0;</div> <div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div> <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> get_num_send_frames(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;</div> <div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div> <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> get_send_frame_size(<span class="keywordtype">void</span>) <span class="keyword">const</span> = 0;</div> <div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div> <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  };</div> <div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div> <div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }} <span class="comment">//namespace</span></div> <div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div> <div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor">#endif </span><span class="comment">/* INCLUDED_UHD_TRANSPORT_ZERO_COPY_HPP */</span><span class="preprocessor"></span></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html">uhd::transport::managed_buffer</a></div><div class="ttdoc">Simple managed buffer with release interface. </div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:30</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_acf117d1cdfc052362f701f63ec1390af"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#acf117d1cdfc052362f701f63ec1390af">uhd::transport::managed_buffer::sptr</a></div><div class="ttdeci">boost::intrusive_ptr< managed_buffer > sptr</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:84</div></div> <div class="ttc" id="structuhd_1_1transport_1_1zero__copy__xport__params_html_a16fb4cf4bb36e46224d6df81697668cb"><div class="ttname"><a href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a16fb4cf4bb36e46224d6df81697668cb">uhd::transport::zero_copy_xport_params::recv_frame_size</a></div><div class="ttdeci">size_t recv_frame_size</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:141</div></div> <div class="ttc" id="namespaceuhd_1_1transport_html_afff62a1607ce569c3a32e88777b2df0a"><div class="ttname"><a href="namespaceuhd_1_1transport.html#afff62a1607ce569c3a32e88777b2df0a">uhd::transport::intrusive_ptr_release</a></div><div class="ttdeci">UHD_INLINE void intrusive_ptr_release(managed_buffer *p)</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:113</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_a18a1d5f3e8996bb75a3ba4bf27ebdbff"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#a18a1d5f3e8996bb75a3ba4bf27ebdbff">uhd::transport::managed_buffer::commit</a></div><div class="ttdeci">UHD_INLINE void commit(size_t num_bytes)</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:54</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_afc7064023c7dbe6a03e31128fa270715"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#afc7064023c7dbe6a03e31128fa270715">uhd::transport::managed_buffer::release</a></div><div class="ttdeci">virtual void release(void)=0</div></div> <div class="ttc" id="structuhd_1_1transport_1_1zero__copy__xport__params_html_a31d6a719fdf042593c38de4d1b4e38bc"><div class="ttname"><a href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a31d6a719fdf042593c38de4d1b4e38bc">uhd::transport::zero_copy_xport_params::send_frame_size</a></div><div class="ttdeci">size_t send_frame_size</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:142</div></div> <div class="ttc" id="structuhd_1_1transport_1_1zero__copy__xport__params_html"><div class="ttname"><a href="structuhd_1_1transport_1_1zero__copy__xport__params.html">uhd::transport::zero_copy_xport_params</a></div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:140</div></div> <div class="ttc" id="config_8hpp_html"><div class="ttname"><a href="config_8hpp.html">config.hpp</a></div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_a2044880e1c0149a95b073309c5c75bad"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#a2044880e1c0149a95b073309c5c75bad">uhd::transport::managed_buffer::size</a></div><div class="ttdeci">UHD_INLINE size_t size(void) const </div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:70</div></div> <div class="ttc" id="structuhd_1_1transport_1_1zero__copy__xport__params_html_a05832937ccd7aabc891f331a2fd4b915"><div class="ttname"><a href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a05832937ccd7aabc891f331a2fd4b915">uhd::transport::zero_copy_xport_params::num_recv_frames</a></div><div class="ttdeci">size_t num_recv_frames</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:143</div></div> <div class="ttc" id="classuhd_1_1transport_1_1zero__copy__if_html_aee1d3b676905a547aede35b85438e613"><div class="ttname"><a href="classuhd_1_1transport_1_1zero__copy__if.html#aee1d3b676905a547aede35b85438e613">uhd::transport::zero_copy_if::sptr</a></div><div class="ttdeci">boost::shared_ptr< zero_copy_if > sptr</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:154</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__send__buffer_html"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__send__buffer.html">uhd::transport::managed_send_buffer</a></div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:132</div></div> <div class="ttc" id="config_8hpp_html_adc68e1c030efb88af856decedf19aedf"><div class="ttname"><a href="config_8hpp.html#adc68e1c030efb88af856decedf19aedf">UHD_API</a></div><div class="ttdeci">#define UHD_API</div><div class="ttdef"><b>Definition:</b> config.hpp:79</div></div> <div class="ttc" id="namespaceuhd_html"><div class="ttname"><a href="namespaceuhd.html">uhd</a></div><div class="ttdef"><b>Definition:</b> convert.hpp:28</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__recv__buffer_html"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__recv__buffer.html">uhd::transport::managed_recv_buffer</a></div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:122</div></div> <div class="ttc" id="config_8hpp_html_a8b9b549161081d54c2161046649a0323"><div class="ttname"><a href="config_8hpp.html#a8b9b549161081d54c2161046649a0323">UHD_INLINE</a></div><div class="ttdeci">#define UHD_INLINE</div><div class="ttdef"><b>Definition:</b> config.hpp:69</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_a958beedfa8de33c6aac38f90a0479382"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#a958beedfa8de33c6aac38f90a0479382">uhd::transport::managed_buffer::cast</a></div><div class="ttdeci">UHD_INLINE T cast(void) const </div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:62</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_a2a2404a5e656c1c23f930e1eb51cf583"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#a2a2404a5e656c1c23f930e1eb51cf583">uhd::transport::managed_buffer::_ref_count</a></div><div class="ttdeci">boost::detail::atomic_count _ref_count</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:83</div></div> <div class="ttc" id="namespaceuhd_1_1transport_html_a00d41dc37684e3dde7e0dda35995de49"><div class="ttname"><a href="namespaceuhd_1_1transport.html#a00d41dc37684e3dde7e0dda35995de49">uhd::transport::intrusive_ptr_add_ref</a></div><div class="ttdeci">UHD_INLINE void intrusive_ptr_add_ref(managed_buffer *p)</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:109</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__recv__buffer_html_a00e07a3493c36ce8b54a609268ee7896"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__recv__buffer.html#a00e07a3493c36ce8b54a609268ee7896">uhd::transport::managed_recv_buffer::sptr</a></div><div class="ttdeci">boost::intrusive_ptr< managed_recv_buffer > sptr</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:124</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_af93160f0440e18652142b56a0dd0dba6"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#af93160f0440e18652142b56a0dd0dba6">uhd::transport::managed_buffer::make</a></div><div class="ttdeci">UHD_INLINE boost::intrusive_ptr< T > make(T *p, void *buffer, size_t length)</div><div class="ttdoc">Create smart pointer to a reusable managed buffer. </div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:75</div></div> <div class="ttc" id="classuhd_1_1transport_1_1zero__copy__if_html"><div class="ttname"><a href="classuhd_1_1transport_1_1zero__copy__if.html">uhd::transport::zero_copy_if</a></div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:152</div></div> <div class="ttc" id="classuhd_1_1transport_1_1zero__copy__if_html_a90e0e317f33f7c54d17407801d364ede"><div class="ttname"><a href="classuhd_1_1transport_1_1zero__copy__if.html#a90e0e317f33f7c54d17407801d364ede">uhd::transport::zero_copy_if::~zero_copy_if</a></div><div class="ttdeci">virtual ~zero_copy_if()</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:159</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_aa03dbc092f0d8dbe41f4a0cab54ecf51"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#aa03dbc092f0d8dbe41f4a0cab54ecf51">uhd::transport::managed_buffer::~managed_buffer</a></div><div class="ttdeci">virtual ~managed_buffer(void)</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:41</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__send__buffer_html_a6bb69c3e7d8f762a065dd66f6f8b3e41"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__send__buffer.html#a6bb69c3e7d8f762a065dd66f6f8b3e41">uhd::transport::managed_send_buffer::sptr</a></div><div class="ttdeci">boost::intrusive_ptr< managed_send_buffer > sptr</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:134</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_a35e4a3cbfd1d6704d8497a205ff6c9f3"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#a35e4a3cbfd1d6704d8497a205ff6c9f3">uhd::transport::managed_buffer::managed_buffer</a></div><div class="ttdeci">managed_buffer(void)</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:32</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_a0add4d0b654ed789a8513a14625657fb"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#a0add4d0b654ed789a8513a14625657fb">uhd::transport::managed_buffer::ref_count</a></div><div class="ttdeci">int ref_count()</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:86</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_a486a6c5dce84878c8431b73a553d28fa"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#a486a6c5dce84878c8431b73a553d28fa">uhd::transport::managed_buffer::_length</a></div><div class="ttdeci">size_t _length</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:98</div></div> <div class="ttc" id="classuhd_1_1transport_1_1managed__buffer_html_ad25617124b960dff45a6916acc7df42f"><div class="ttname"><a href="classuhd_1_1transport_1_1managed__buffer.html#ad25617124b960dff45a6916acc7df42f">uhd::transport::managed_buffer::_buffer</a></div><div class="ttdeci">void * _buffer</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:97</div></div> <div class="ttc" id="structuhd_1_1transport_1_1zero__copy__xport__params_html_a6dee1be80a77e669929cc3136d679d84"><div class="ttname"><a href="structuhd_1_1transport_1_1zero__copy__xport__params.html#a6dee1be80a77e669929cc3136d679d84">uhd::transport::zero_copy_xport_params::num_send_frames</a></div><div class="ttdeci">size_t num_send_frames</div><div class="ttdef"><b>Definition:</b> zero_copy.hpp:144</div></div> </div><!-- fragment --></div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Wed Oct 15 2014 11:47:53 for UHD by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.8 </small></address> </body> </html>