Welcome to mirror list, hosted at ThFree Co, Russian Federation.

classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html - github.com/windirstat/llfio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 87054b3bbdb1ef10690f4b678d867e56863e523e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<!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.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>LLFIO: llfio_v2_xxx::algorithm::combining_handle_adapter&lt; Op, Target, Source &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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</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">LLFIO
   &#160;<span id="projectnumber">v2.00 late alpha</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html','');});
</script>
<div id="doc-content">
<!-- 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 class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">llfio_v2_xxx::algorithm::combining_handle_adapter&lt; Op, Target, Source &gt; Class Template Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>A handle combining the data from one or two other handles.  
 <a href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#details">More...</a></p>

<p><code>#include &quot;combining.hpp&quot;</code></p>
<div class="dynheader">
Inheritance diagram for llfio_v2_xxx::algorithm::combining_handle_adapter&lt; Op, Target, Source &gt;:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.png" usemap="#llfio_5Fv2_5Fxxx::algorithm::combining_5Fhandle_5Fadapter_3C_20Op_2C_20Target_2C_20Source_20_3E_map" alt=""/>
  <map id="llfio_5Fv2_5Fxxx::algorithm::combining_5Fhandle_5Fadapter_3C_20Op_2C_20Target_2C_20Source_20_3E_map" name="llfio_5Fv2_5Fxxx::algorithm::combining_5Fhandle_5Fadapter_3C_20Op_2C_20Target_2C_20Source_20_3E_map">
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a06f517c08339014bfbf70f6da07be847"><td class="memItemLeft" align="right" valign="top"><a id="a06f517c08339014bfbf70f6da07be847"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>path_type</b> = io_handle::path_type</td></tr>
<tr class="separator:a06f517c08339014bfbf70f6da07be847"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb6eafba06e83383c985019dce2b1d61"><td class="memItemLeft" align="right" valign="top"><a id="acb6eafba06e83383c985019dce2b1d61"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>extent_type</b> = io_handle::extent_type</td></tr>
<tr class="separator:acb6eafba06e83383c985019dce2b1d61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88b45d183e9756a86b32386b9a6f109e"><td class="memItemLeft" align="right" valign="top"><a id="a88b45d183e9756a86b32386b9a6f109e"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>size_type</b> = io_handle::size_type</td></tr>
<tr class="separator:a88b45d183e9756a86b32386b9a6f109e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47df31310a28561efbfe65b678a699d4"><td class="memItemLeft" align="right" valign="top"><a id="a47df31310a28561efbfe65b678a699d4"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>mode</b> = <a class="el" href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dca">io_handle::mode</a></td></tr>
<tr class="separator:a47df31310a28561efbfe65b678a699d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5626652ef800d549dbf83607f09ed9a9"><td class="memItemLeft" align="right" valign="top"><a id="a5626652ef800d549dbf83607f09ed9a9"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>creation</b> = <a class="el" href="classllfio__v2__xxx_1_1handle.html#af0b352d0f273ba6fa70c178b2c2fee42">io_handle::creation</a></td></tr>
<tr class="separator:a5626652ef800d549dbf83607f09ed9a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9bf783aed0ee8ee06b2005d1615beb3e"><td class="memItemLeft" align="right" valign="top"><a id="a9bf783aed0ee8ee06b2005d1615beb3e"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>caching</b> = <a class="el" href="classllfio__v2__xxx_1_1handle.html#aecd3a7db6cee3aec07d32fe6f99e6852">io_handle::caching</a></td></tr>
<tr class="separator:a9bf783aed0ee8ee06b2005d1615beb3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5f04ab5c665244d2bd8f371f10fd330a"><td class="memItemLeft" align="right" valign="top"><a id="a5f04ab5c665244d2bd8f371f10fd330a"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>flag</b> = io_handle::flag</td></tr>
<tr class="separator:a5f04ab5c665244d2bd8f371f10fd330a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4227056a72bf24e7343ea1a98f4729cf"><td class="memItemLeft" align="right" valign="top"><a id="a4227056a72bf24e7343ea1a98f4729cf"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>buffer_type</b> = <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1buffer__type.html">io_handle::buffer_type</a></td></tr>
<tr class="separator:a4227056a72bf24e7343ea1a98f4729cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a673cbeb0cd107cff01f86dbf64222d18"><td class="memItemLeft" align="right" valign="top"><a id="a673cbeb0cd107cff01f86dbf64222d18"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>const_buffer_type</b> = <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1const__buffer__type.html">io_handle::const_buffer_type</a></td></tr>
<tr class="separator:a673cbeb0cd107cff01f86dbf64222d18"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9cda6dec04c4a26cb7c0b7be967f5ba7"><td class="memItemLeft" align="right" valign="top"><a id="a9cda6dec04c4a26cb7c0b7be967f5ba7"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>buffers_type</b> = <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a8f525d9665b524442b46cd55678817ed">io_handle::buffers_type</a></td></tr>
<tr class="separator:a9cda6dec04c4a26cb7c0b7be967f5ba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6a5bf508fcf2bfefb1cd179d7c4b48f"><td class="memItemLeft" align="right" valign="top"><a id="ae6a5bf508fcf2bfefb1cd179d7c4b48f"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>const_buffers_type</b> = <a class="el" href="classllfio__v2__xxx_1_1io__handle.html#a693a8c64bb7de1a6835d6a151e37aa0e">io_handle::const_buffers_type</a></td></tr>
<tr class="separator:ae6a5bf508fcf2bfefb1cd179d7c4b48f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a062212d815f834770edb424487bec4c4"><td class="memTemplParams" colspan="2"><a id="a062212d815f834770edb424487bec4c4"></a>
template&lt;class T &gt; </td></tr>
<tr class="memitem:a062212d815f834770edb424487bec4c4"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><b>io_request</b> = <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__request.html">io_handle::io_request</a>&lt; T &gt;</td></tr>
<tr class="separator:a062212d815f834770edb424487bec4c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6dbc56b017dfde90bc9df067838bc6b6"><td class="memTemplParams" colspan="2"><a id="a6dbc56b017dfde90bc9df067838bc6b6"></a>
template&lt;class T &gt; </td></tr>
<tr class="memitem:a6dbc56b017dfde90bc9df067838bc6b6"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><b>io_result</b> = <a class="el" href="structllfio__v2__xxx_1_1io__handle_1_1io__result.html">io_handle::io_result</a>&lt; T &gt;</td></tr>
<tr class="separator:a6dbc56b017dfde90bc9df067838bc6b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0b7b07cb1282c369b1b663d21c1df3c"><td class="memItemLeft" align="right" valign="top"><a id="ab0b7b07cb1282c369b1b663d21c1df3c"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>target_handle_type</b> = Target</td></tr>
<tr class="separator:ab0b7b07cb1282c369b1b663d21c1df3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad9c333e01114cddbed807c7bda522860"><td class="memItemLeft" align="right" valign="top"><a id="ad9c333e01114cddbed807c7bda522860"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>source_handle_type</b> = Source</td></tr>
<tr class="separator:ad9c333e01114cddbed807c7bda522860"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:aa69b0a7e5b852b6e1b065469c96634b1"><td class="memItemLeft" align="right" valign="top"><a id="aa69b0a7e5b852b6e1b065469c96634b1"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#aa69b0a7e5b852b6e1b065469c96634b1">combining_handle_adapter</a> ()=default</td></tr>
<tr class="memdesc:aa69b0a7e5b852b6e1b065469c96634b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:aa69b0a7e5b852b6e1b065469c96634b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1709516df5d85349325940187f57712"><td class="memTemplParams" colspan="2"><a id="ad1709516df5d85349325940187f57712"></a>
template&lt;class... Args&gt; </td></tr>
<tr class="memitem:ad1709516df5d85349325940187f57712"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#ad1709516df5d85349325940187f57712">combining_handle_adapter</a> (target_handle_type *a, source_handle_type *b, <a class="el" href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dca">mode</a> _mode=<a class="el" href="classllfio__v2__xxx_1_1handle.html#aa3930273a2d4cabbac309e0b75701dcaaefb2a684e4afb7d55e6147fbe5a332ee">mode::write</a>, flag flags=flag::none, Args &amp;&amp;... args)</td></tr>
<tr class="memdesc:ad1709516df5d85349325940187f57712"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor, passing any extra arguments to <code>Op::override</code>. <br /></td></tr>
<tr class="separator:ad1709516df5d85349325940187f57712"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae54760bdd0fa784866e9f0e355c62077"><td class="memItemLeft" align="right" valign="top"><a id="ae54760bdd0fa784866e9f0e355c62077"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#ae54760bdd0fa784866e9f0e355c62077">combining_handle_adapter</a> (<a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a> &amp;&amp;o) noexcept</td></tr>
<tr class="memdesc:ae54760bdd0fa784866e9f0e355c62077"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implicit move construction of combining_handle_adapter permitted. <br /></td></tr>
<tr class="separator:ae54760bdd0fa784866e9f0e355c62077"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29adaaf07569fbc92039fb3f2d17e479"><td class="memItemLeft" align="right" valign="top"><a id="a29adaaf07569fbc92039fb3f2d17e479"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#a29adaaf07569fbc92039fb3f2d17e479">combining_handle_adapter</a> (const <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a> &amp;)=delete</td></tr>
<tr class="memdesc:a29adaaf07569fbc92039fb3f2d17e479"><td class="mdescLeft">&#160;</td><td class="mdescRight">No copy construction (use <code>clone()</code>) <br /></td></tr>
<tr class="separator:a29adaaf07569fbc92039fb3f2d17e479"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e767cbccf4130478b49012693168f5c"><td class="memItemLeft" align="right" valign="top"><a id="a9e767cbccf4130478b49012693168f5c"></a>
<a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#a9e767cbccf4130478b49012693168f5c">operator=</a> (<a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a> &amp;&amp;o) noexcept</td></tr>
<tr class="memdesc:a9e767cbccf4130478b49012693168f5c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move assignment of combining_handle_adapter permitted. <br /></td></tr>
<tr class="separator:a9e767cbccf4130478b49012693168f5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fad139bec35264b356c2e057318db3e"><td class="memItemLeft" align="right" valign="top"><a id="a6fad139bec35264b356c2e057318db3e"></a>
<a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#a6fad139bec35264b356c2e057318db3e">operator=</a> (const <a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a> &amp;)=delete</td></tr>
<tr class="memdesc:a6fad139bec35264b356c2e057318db3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">No copy assignment. <br /></td></tr>
<tr class="separator:a6fad139bec35264b356c2e057318db3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aefc25feff3ba060a3b3092a69cf4d5cc"><td class="memItemLeft" align="right" valign="top"><a id="aefc25feff3ba060a3b3092a69cf4d5cc"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html#aefc25feff3ba060a3b3092a69cf4d5cc">swap</a> (<a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a> &amp;o) noexcept</td></tr>
<tr class="memdesc:aefc25feff3ba060a3b3092a69cf4d5cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap with another instance. <br /></td></tr>
<tr class="separator:aefc25feff3ba060a3b3092a69cf4d5cc"><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;template&lt; class, class &gt; class Op, class Target, class Source&gt;<br />
class llfio_v2_xxx::algorithm::combining_handle_adapter&lt; Op, Target, Source &gt;</h3>

<p>A handle combining the data from one or two other handles. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Op</td><td>Policy class determining what kind of combination ought to be performed. </td></tr>
    <tr><td class="paramname">Target</td><td>The type of the target handle. </td></tr>
    <tr><td class="paramname">Source</td><td>The type of an optional additional source handle, or <code>void</code> to disable.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section warning"><dt>Warning</dt><dd>This class is still in development, do not use.</dd></dl>
<p>This adapter class is a handle implementation which combines one or two other handle implementations in some way determined by <code>Op</code> which must match the form of:</p>
<div class="fragment"><div class="line"><span class="keyword">template</span>&lt;<span class="keyword">class</span> Target, <span class="keyword">class</span> Source&gt; <span class="keyword">struct </span>Op</div><div class="line">{</div><div class="line">  <span class="keyword">using</span> buffer_type = <span class="keyword">typename</span> Target::buffer_type;</div><div class="line">  <span class="keyword">using</span> const_buffer_type = <span class="keyword">typename</span> Target::const_buffer_type;</div><div class="line"></div><div class="line">  <span class="comment">// Called by default implementation of read() to perform combines of reads</span></div><div class="line">  <span class="keyword">static</span> result&lt;buffer_type&gt; do_read(buffer_type out, buffer_type t, buffer_type s) noexcept;</div><div class="line">  <span class="comment">// Called by default implementation of write() to perform combines of writes</span></div><div class="line">  <span class="keyword">static</span> result&lt;const_buffer_type&gt; do_write(buffer_type t, buffer_type s, const_buffer_type in) noexcept;</div><div class="line">  <span class="comment">// Called by default implementation of write() to adjust returned buffers</span></div><div class="line">  <span class="keyword">static</span> result&lt;const_buffers_type&gt; adjust_written_buffers(const_buffers_type out, const_buffer_type twritten, const_buffer_type toriginal) noexcept;</div><div class="line"></div><div class="line">  <span class="comment">// Inherited into the resulting combining_handle_adapter</span></div><div class="line">  <span class="comment">// Used to inject/override custom member functions and/or eliminate the need for</span></div><div class="line">  <span class="comment">// do_read and do_write</span></div><div class="line">  <span class="keyword">template</span>&lt;<span class="keyword">class</span> Base&gt; <span class="keyword">struct </span>override : <span class="keyword">public</span> Base { <span class="keyword">using</span> Base::Base; };</div><div class="line">};</div></div><!-- fragment --><p>If both input handle types have a base of <code>file_handle</code>, <code>combining_handle_adapter</code> inherits from <code>file_handle</code> and provides the extra member functions which <code>file_handle</code> provides over <code>io_handle</code>. If not, it inherits from <code>io_handle</code>, and provides that class' reduced functionality instead.</p>
<p>The default implementation of <code>read()</code> and <code>write()</code> allocate temporary buffers, and run <code>Op::do_read()</code> and <code>Op::do_write()</code> on each individual buffer issued by the end user of the combined handles. If each total request is below a page size, the stack is used, else <code>map_handle::map()</code> is used to get whole pages.</p>
<dl class="section note"><dt>Note</dt><dd>If OpenMP is available, <code>LLFIO_DISABLE_OPENMP</code> is not defined, and <code>flag::disable_parallelism</code> is not set, the buffer fill from the two attached handles will be done concurrently.</dd></dl>
<p>Combined reads may read less than inputs, but note that offset and buffers fetched from inputs are those of the request. Combined writes may write less than inputs, but again offset used is that of the request. In other words, this adapter is intended for bulk, mostly 1-to-1, combination and transformation of scatter gather buffers. It is not intended for processing scatter gather buffers.</p>
<p>If just one handle type is supplied (the additional source type is <code>void</code>), then instead of combining, this handle adapter is transforming. <code>Op::do_read()</code> and <code>Op::do_write()</code> will be called with the second of the input buffers empty.</p>
<p>The defaults for the virtual functions may not suit your use case, in which case you can override them in the <code>Op::override</code> class.</p>
<p>Destroying the adapter does not destroy the attached handles. Closing the adapter does close the attached handles.</p>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000004">Todo:</a></b></dt><dd>I have been lazy and used public inheritance from <code>io_handle</code> and <code>file_handle</code>. I should use protected inheritance to prevent slicing, and expose all the public functions by hand. </dd></dl>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>include/llfio/v2.0/algorithm/handle_adapter/<a class="el" href="combining_8hpp.html">combining.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespacellfio__v2__xxx.html">llfio_v2_xxx</a></li><li class="navelem"><a class="el" href="namespacellfio__v2__xxx_1_1algorithm.html">algorithm</a></li><li class="navelem"><a class="el" href="classllfio__v2__xxx_1_1algorithm_1_1combining__handle__adapter.html">combining_handle_adapter</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>