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

classasync__file__handle.html - github.com/windirstat/llfio.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 0e9bff37aaf444df2d2f0e4cc24639b31a49e301 (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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
<!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: async_file_handle Class 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('classasync__file__handle.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="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="#pro-types">Protected Types</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classasync__file__handle-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">async_file_handle Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>An asynchronous handle to an open something.  
 <a href="classasync__file__handle.html#details">More...</a></p>

<p><code>#include &quot;async_file_handle.hpp&quot;</code></p>
<div class="dynheader">
Inheritance diagram for async_file_handle:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classasync__file__handle.png" usemap="#async_5Ffile_5Fhandle_map" alt=""/>
  <map id="async_5Ffile_5Fhandle_map" name="async_5Ffile_5Fhandle_map">
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structasync__file__handle_1_1__erased__completion__handler.html">_erased_completion_handler</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structasync__file__handle_1_1__erased__io__state__type.html">_erased_io_state_type</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structasync__file__handle_1_1__io__state__deleter.html">_io_state_deleter</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Type sugar to tell <code>co_await</code> what to do.  <a href="classasync__file__handle_1_1awaitable.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:a0731e50ba19e8c5edcc3c3e514c41999"><td class="memItemLeft" align="right" valign="top"><a id="a0731e50ba19e8c5edcc3c3e514c41999"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>dev_t</b> = file_handle::dev_t</td></tr>
<tr class="separator:a0731e50ba19e8c5edcc3c3e514c41999"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a723958d76d16fbea78ce775d950881c4"><td class="memItemLeft" align="right" valign="top"><a id="a723958d76d16fbea78ce775d950881c4"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>ino_t</b> = file_handle::ino_t</td></tr>
<tr class="separator:a723958d76d16fbea78ce775d950881c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac99213e56d893edb38fc557b1de7f4e8"><td class="memItemLeft" align="right" valign="top"><a id="ac99213e56d893edb38fc557b1de7f4e8"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>path_view_type</b> = file_handle::path_view_type</td></tr>
<tr class="separator:ac99213e56d893edb38fc557b1de7f4e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a440575efbea782166c833bf6dff9edec"><td class="memItemLeft" align="right" valign="top"><a id="a440575efbea782166c833bf6dff9edec"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>path_type</b> = io_handle::path_type</td></tr>
<tr class="separator:a440575efbea782166c833bf6dff9edec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a03acd6464a8831905242587fdef40e00"><td class="memItemLeft" align="right" valign="top"><a id="a03acd6464a8831905242587fdef40e00"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>extent_type</b> = io_handle::extent_type</td></tr>
<tr class="separator:a03acd6464a8831905242587fdef40e00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6963f0913ade20782a2bc4f62bafc84d"><td class="memItemLeft" align="right" valign="top"><a id="a6963f0913ade20782a2bc4f62bafc84d"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>size_type</b> = io_handle::size_type</td></tr>
<tr class="separator:a6963f0913ade20782a2bc4f62bafc84d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6af3a0bf68b5e3e19f2ca152be10c599"><td class="memItemLeft" align="right" valign="top"><a id="a6af3a0bf68b5e3e19f2ca152be10c599"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>mode</b> = io_handle::mode</td></tr>
<tr class="separator:a6af3a0bf68b5e3e19f2ca152be10c599"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cec6e2493471db2bd4e4641143fd242"><td class="memItemLeft" align="right" valign="top"><a id="a2cec6e2493471db2bd4e4641143fd242"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>creation</b> = io_handle::creation</td></tr>
<tr class="separator:a2cec6e2493471db2bd4e4641143fd242"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a084d50f7e9db3d5b6b75a78b410151f7"><td class="memItemLeft" align="right" valign="top"><a id="a084d50f7e9db3d5b6b75a78b410151f7"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>caching</b> = io_handle::caching</td></tr>
<tr class="separator:a084d50f7e9db3d5b6b75a78b410151f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4357d0e6d59cf5be3533b6addeaa5206"><td class="memItemLeft" align="right" valign="top"><a id="a4357d0e6d59cf5be3533b6addeaa5206"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>flag</b> = io_handle::flag</td></tr>
<tr class="separator:a4357d0e6d59cf5be3533b6addeaa5206"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0135b616970d67b98edda82e2581877f"><td class="memItemLeft" align="right" valign="top"><a id="a0135b616970d67b98edda82e2581877f"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>buffer_type</b> = io_handle::buffer_type</td></tr>
<tr class="separator:a0135b616970d67b98edda82e2581877f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a585f9927a67ecf4624fde73c1b0b8c11"><td class="memItemLeft" align="right" valign="top"><a id="a585f9927a67ecf4624fde73c1b0b8c11"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>const_buffer_type</b> = io_handle::const_buffer_type</td></tr>
<tr class="separator:a585f9927a67ecf4624fde73c1b0b8c11"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9e8642bf1a0b9cac9bdcdf914022ea13"><td class="memItemLeft" align="right" valign="top"><a id="a9e8642bf1a0b9cac9bdcdf914022ea13"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>buffers_type</b> = io_handle::buffers_type</td></tr>
<tr class="separator:a9e8642bf1a0b9cac9bdcdf914022ea13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa57bf3f93d4f680521815d2d63bf6c0d"><td class="memItemLeft" align="right" valign="top"><a id="aa57bf3f93d4f680521815d2d63bf6c0d"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>const_buffers_type</b> = io_handle::const_buffers_type</td></tr>
<tr class="separator:aa57bf3f93d4f680521815d2d63bf6c0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7075f671f1e27e77b1168d7fd59b4918"><td class="memTemplParams" colspan="2"><a id="a7075f671f1e27e77b1168d7fd59b4918"></a>
template&lt;class T &gt; </td></tr>
<tr class="memitem:a7075f671f1e27e77b1168d7fd59b4918"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><b>io_request</b> = io_handle::io_request&lt; T &gt;</td></tr>
<tr class="separator:a7075f671f1e27e77b1168d7fd59b4918"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ec710dbe9f6654aff90df7fa6ddd106"><td class="memTemplParams" colspan="2"><a id="a2ec710dbe9f6654aff90df7fa6ddd106"></a>
template&lt;class T &gt; </td></tr>
<tr class="memitem:a2ec710dbe9f6654aff90df7fa6ddd106"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><b>io_result</b> = io_handle::io_result&lt; T &gt;</td></tr>
<tr class="separator:a2ec710dbe9f6654aff90df7fa6ddd106"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a576dc26eb58e4d196363f4323973f7ed"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a576dc26eb58e4d196363f4323973f7ed">io_state_ptr</a> = std::unique_ptr&lt; <a class="el" href="structasync__file__handle_1_1__erased__io__state__type.html">_erased_io_state_type</a>, <a class="el" href="structasync__file__handle_1_1__io__state__deleter.html">_io_state_deleter</a> &gt;</td></tr>
<tr class="separator:a576dc26eb58e4d196363f4323973f7ed"><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:a53bc06cc6aabb58fb2ae56d49ee83168"><td class="memItemLeft" align="right" valign="top"><a id="a53bc06cc6aabb58fb2ae56d49ee83168"></a>
constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a53bc06cc6aabb58fb2ae56d49ee83168">async_file_handle</a> ()</td></tr>
<tr class="memdesc:a53bc06cc6aabb58fb2ae56d49ee83168"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:a53bc06cc6aabb58fb2ae56d49ee83168"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a296149bdd55004b4b7c802f79fc23198"><td class="memItemLeft" align="right" valign="top"><a id="a296149bdd55004b4b7c802f79fc23198"></a>
constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a296149bdd55004b4b7c802f79fc23198">async_file_handle</a> (io_service *service, native_handle_type h, dev_t devid, ino_t inode, caching caching=caching::none, flag flags=flag::none)</td></tr>
<tr class="memdesc:a296149bdd55004b4b7c802f79fc23198"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a handle from a supplied native handle. <br /></td></tr>
<tr class="separator:a296149bdd55004b4b7c802f79fc23198"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b13ce5de0a5ff0aa30e73666be4f45a"><td class="memItemLeft" align="right" valign="top"><a id="a5b13ce5de0a5ff0aa30e73666be4f45a"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a5b13ce5de0a5ff0aa30e73666be4f45a">async_file_handle</a> (<a class="el" href="classasync__file__handle.html">async_file_handle</a> &amp;&amp;o) noexcept=default</td></tr>
<tr class="memdesc:a5b13ce5de0a5ff0aa30e73666be4f45a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implicit move construction of async_file_handle permitted. <br /></td></tr>
<tr class="separator:a5b13ce5de0a5ff0aa30e73666be4f45a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abfbfde3109f45a1a00adc712830afccf"><td class="memItemLeft" align="right" valign="top"><a id="abfbfde3109f45a1a00adc712830afccf"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#abfbfde3109f45a1a00adc712830afccf">async_file_handle</a> (const <a class="el" href="classasync__file__handle.html">async_file_handle</a> &amp;)=delete</td></tr>
<tr class="memdesc:abfbfde3109f45a1a00adc712830afccf"><td class="mdescLeft">&#160;</td><td class="mdescRight">No copy construction (use <code>clone()</code>) <br /></td></tr>
<tr class="separator:abfbfde3109f45a1a00adc712830afccf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f25701630c4fec0a1df0bc52a1816e3"><td class="memItemLeft" align="right" valign="top"><a id="a7f25701630c4fec0a1df0bc52a1816e3"></a>
constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a7f25701630c4fec0a1df0bc52a1816e3">async_file_handle</a> (file_handle &amp;&amp;o) noexcept</td></tr>
<tr class="memdesc:a7f25701630c4fec0a1df0bc52a1816e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Explicit conversion from file_handle permitted. <br /></td></tr>
<tr class="separator:a7f25701630c4fec0a1df0bc52a1816e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe9fd2b1952b5a01ef872a0991aec8a8"><td class="memItemLeft" align="right" valign="top"><a id="abe9fd2b1952b5a01ef872a0991aec8a8"></a>
constexpr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#abe9fd2b1952b5a01ef872a0991aec8a8">async_file_handle</a> (handle &amp;&amp;o, io_service *service, dev_t devid, ino_t inode) noexcept</td></tr>
<tr class="memdesc:abe9fd2b1952b5a01ef872a0991aec8a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Explicit conversion from handle and io_handle permitted. <br /></td></tr>
<tr class="separator:abe9fd2b1952b5a01ef872a0991aec8a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f1c4c62f4db521a419ee6f97d9f354d"><td class="memItemLeft" align="right" valign="top"><a id="a7f1c4c62f4db521a419ee6f97d9f354d"></a>
<a class="el" href="classasync__file__handle.html">async_file_handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a7f1c4c62f4db521a419ee6f97d9f354d">operator=</a> (<a class="el" href="classasync__file__handle.html">async_file_handle</a> &amp;&amp;o) noexcept</td></tr>
<tr class="memdesc:a7f1c4c62f4db521a419ee6f97d9f354d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move assignment of async_file_handle permitted. <br /></td></tr>
<tr class="separator:a7f1c4c62f4db521a419ee6f97d9f354d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf73850864cba19f50551cfac50b2efc"><td class="memItemLeft" align="right" valign="top"><a id="abf73850864cba19f50551cfac50b2efc"></a>
<a class="el" href="classasync__file__handle.html">async_file_handle</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#abf73850864cba19f50551cfac50b2efc">operator=</a> (const <a class="el" href="classasync__file__handle.html">async_file_handle</a> &amp;)=delete</td></tr>
<tr class="memdesc:abf73850864cba19f50551cfac50b2efc"><td class="mdescLeft">&#160;</td><td class="mdescRight">No copy assignment. <br /></td></tr>
<tr class="separator:abf73850864cba19f50551cfac50b2efc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab559cd8baf2222a5270366a7fb3d9c74"><td class="memItemLeft" align="right" valign="top"><a id="ab559cd8baf2222a5270366a7fb3d9c74"></a>
LLFIO_MAKE_FREE_FUNCTION void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#ab559cd8baf2222a5270366a7fb3d9c74">swap</a> (<a class="el" href="classasync__file__handle.html">async_file_handle</a> &amp;o) noexcept</td></tr>
<tr class="memdesc:ab559cd8baf2222a5270366a7fb3d9c74"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swap with another instance. <br /></td></tr>
<tr class="separator:ab559cd8baf2222a5270366a7fb3d9c74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab155660bb07642550206b9ccb4eda4e6"><td class="memItemLeft" align="right" valign="top"><a id="ab155660bb07642550206b9ccb4eda4e6"></a>
LLFIO_MAKE_FREE_FUNCTION <a class="el" href="group__config.html#ga40c15a3fc44361077b478acbfaca18ee">LLFIO_HEADERS_ONLY_VIRTUAL_SPEC</a> io_result&lt; const_buffers_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>barrier</b> (io_request&lt; const_buffers_type &gt; reqs=io_request&lt; const_buffers_type &gt;(), bool wait_for_device=false, bool and_metadata=false, deadline d=deadline()) noexcept override</td></tr>
<tr class="separator:ab155660bb07642550206b9ccb4eda4e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67326a2f1e482b6c66b0bb18b67a6826"><td class="memItemLeft" align="right" valign="top">result&lt; <a class="el" href="classasync__file__handle.html">async_file_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a67326a2f1e482b6c66b0bb18b67a6826">clone</a> (io_service &amp;service, mode mode_=mode::unchanged, caching caching_=caching::unchanged, deadline d=std::chrono::seconds(30)) const noexcept</td></tr>
<tr class="separator:a67326a2f1e482b6c66b0bb18b67a6826"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa388b106a798471c95a91daa40824033"><td class="memItemLeft" align="right" valign="top"><a id="aa388b106a798471c95a91daa40824033"></a>
<a class="el" href="group__config.html#ga40c15a3fc44361077b478acbfaca18ee">LLFIO_HEADERS_ONLY_VIRTUAL_SPEC</a> result&lt; file_handle &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>clone</b> (mode mode_=mode::unchanged, caching caching_=caching::unchanged, deadline d=std::chrono::seconds(30)) const noexcept override</td></tr>
<tr class="separator:aa388b106a798471c95a91daa40824033"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76d3948cfdedbeab89f5e0440c3a68d7"><td class="memTemplParams" colspan="2">template&lt;class CompletionRoutine &gt; </td></tr>
<tr class="memitem:a76d3948cfdedbeab89f5e0440c3a68d7"><td class="memTemplItemLeft" align="right" valign="top">LLFIO_MAKE_FREE_FUNCTION&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a76d3948cfdedbeab89f5e0440c3a68d7">LLFIO_REQUIRES</a> (detail::is_invocable_r&lt; void, CompletionRoutine, <a class="el" href="classasync__file__handle.html">async_file_handle</a> *, io_result&lt; const_buffers_type &gt; &amp;&gt;::value) result&lt; <a class="el" href="classasync__file__handle.html#a576dc26eb58e4d196363f4323973f7ed">io_state_ptr</a> &gt; <a class="el" href="async__file__handle_8hpp.html#a3bf1163850b6d27940efa090dd5234e9">async_barrier</a>(io_request&lt; const_buffers_type &gt; reqs</td></tr>
<tr class="memdesc:a76d3948cfdedbeab89f5e0440c3a68d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Schedule a barrier to occur asynchronously.  <a href="#a76d3948cfdedbeab89f5e0440c3a68d7">More...</a><br /></td></tr>
<tr class="separator:a76d3948cfdedbeab89f5e0440c3a68d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41a513ecb6883de42a1bfb255e3d3f17"><td class="memItemLeft" align="right" valign="top"><a id="a41a513ecb6883de42a1bfb255e3d3f17"></a>
<a class="el" href="group__config.html#ga40c15a3fc44361077b478acbfaca18ee">LLFIO_HEADERS_ONLY_VIRTUAL_SPEC</a> io_result&lt; buffers_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>read</b> (io_request&lt; buffers_type &gt; reqs, deadline d=deadline()) noexcept override</td></tr>
<tr class="separator:a41a513ecb6883de42a1bfb255e3d3f17"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af92775174e77fc7dbaa2b224ff009648"><td class="memItemLeft" align="right" valign="top"><a id="af92775174e77fc7dbaa2b224ff009648"></a>
<a class="el" href="group__config.html#ga40c15a3fc44361077b478acbfaca18ee">LLFIO_HEADERS_ONLY_VIRTUAL_SPEC</a> io_result&lt; const_buffers_type &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>write</b> (io_request&lt; const_buffers_type &gt; reqs, deadline d=deadline()) noexcept override</td></tr>
<tr class="separator:af92775174e77fc7dbaa2b224ff009648"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51e4032fd025d04213386ed2973fb8c7"><td class="memItemLeft" align="right" valign="top">LLFIO_MAKE_FREE_FUNCTION result&lt; <a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt; buffers_type &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a51e4032fd025d04213386ed2973fb8c7">co_read</a> (io_request&lt; buffers_type &gt; reqs) noexcept</td></tr>
<tr class="memdesc:a51e4032fd025d04213386ed2973fb8c7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Schedule a read to occur asynchronously.  <a href="#a51e4032fd025d04213386ed2973fb8c7">More...</a><br /></td></tr>
<tr class="separator:a51e4032fd025d04213386ed2973fb8c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d7c5be5a207988990c73e9a04dbcf45"><td class="memItemLeft" align="right" valign="top">LLFIO_MAKE_FREE_FUNCTION result&lt; <a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt; buffers_type &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a7d7c5be5a207988990c73e9a04dbcf45">co_read</a> (extent_type offset, std::initializer_list&lt; buffer_type &gt; lst) noexcept</td></tr>
<tr class="separator:a7d7c5be5a207988990c73e9a04dbcf45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3189fb435df6f0beab09efbc71effc44"><td class="memItemLeft" align="right" valign="top">LLFIO_MAKE_FREE_FUNCTION result&lt; <a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt; const_buffers_type &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a3189fb435df6f0beab09efbc71effc44">co_write</a> (io_request&lt; const_buffers_type &gt; reqs) noexcept</td></tr>
<tr class="memdesc:a3189fb435df6f0beab09efbc71effc44"><td class="mdescLeft">&#160;</td><td class="mdescRight">Schedule a write to occur asynchronously.  <a href="#a3189fb435df6f0beab09efbc71effc44">More...</a><br /></td></tr>
<tr class="separator:a3189fb435df6f0beab09efbc71effc44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3885669e0d7ef5f2986dce5297fe50a"><td class="memItemLeft" align="right" valign="top">LLFIO_MAKE_FREE_FUNCTION result&lt; <a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt; const_buffers_type &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#af3885669e0d7ef5f2986dce5297fe50a">co_write</a> (extent_type offset, std::initializer_list&lt; const_buffer_type &gt; lst) noexcept</td></tr>
<tr class="separator:af3885669e0d7ef5f2986dce5297fe50a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:aa2c709be14026d9acf306b964bc83099"><td class="memItemLeft" align="right" valign="top">static LLFIO_MAKE_FREE_FUNCTION <a class="el" href="group__config.html#gad270840dbd547a75ad62d48e93412ca7">LLFIO_HEADERS_ONLY_MEMFUNC_SPEC</a> result&lt; <a class="el" href="classasync__file__handle.html">async_file_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#aa2c709be14026d9acf306b964bc83099">async_file</a> (io_service &amp;service, const path_handle &amp;base, path_view_type _path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::only_metadata, flag flags=flag::none) noexcept</td></tr>
<tr class="separator:aa2c709be14026d9acf306b964bc83099"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5055bafbff7e2277e836b10d5173f674"><td class="memItemLeft" align="right" valign="top">static LLFIO_MAKE_FREE_FUNCTION result&lt; <a class="el" href="classasync__file__handle.html">async_file_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a5055bafbff7e2277e836b10d5173f674">async_random_file</a> (io_service &amp;service, const path_handle &amp;dirpath, mode _mode=mode::write, caching _caching=caching::only_metadata, flag flags=flag::none) noexcept</td></tr>
<tr class="separator:a5055bafbff7e2277e836b10d5173f674"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23be7dcb955f7f7396db3f723ba38971"><td class="memItemLeft" align="right" valign="top">static LLFIO_MAKE_FREE_FUNCTION result&lt; <a class="el" href="classasync__file__handle.html">async_file_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a23be7dcb955f7f7396db3f723ba38971">async_temp_file</a> (io_service &amp;service, path_view_type name=path_view_type(), mode _mode=mode::write, creation _creation=creation::if_needed, caching _caching=caching::only_metadata, flag flags=flag::unlink_on_first_close) noexcept</td></tr>
<tr class="separator:a23be7dcb955f7f7396db3f723ba38971"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a823ff9a0f930eb5d696127283a44fa82"><td class="memItemLeft" align="right" valign="top">static LLFIO_MAKE_FREE_FUNCTION <a class="el" href="group__config.html#gad270840dbd547a75ad62d48e93412ca7">LLFIO_HEADERS_ONLY_MEMFUNC_SPEC</a> result&lt; <a class="el" href="classasync__file__handle.html">async_file_handle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classasync__file__handle.html#a823ff9a0f930eb5d696127283a44fa82">async_temp_inode</a> (io_service &amp;service, const path_handle &amp;dir=path_discovery::storage_backed_temporary_files_directory(), mode _mode=mode::write, flag flags=flag::none) noexcept</td></tr>
<tr class="separator:a823ff9a0f930eb5d696127283a44fa82"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:a590b5faed5868b07090ddae93c28901c"><td class="memItemLeft" align="right" valign="top"><a id="a590b5faed5868b07090ddae93c28901c"></a>
LLFIO_MAKE_FREE_FUNCTION CompletionRoutine &amp;&amp;&#160;</td><td class="memItemRight" valign="bottom"><b>completion</b></td></tr>
<tr class="separator:a590b5faed5868b07090ddae93c28901c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3a4f0617a012520659bf506c9a67a0d"><td class="memItemLeft" align="right" valign="top"><a id="aa3a4f0617a012520659bf506c9a67a0d"></a>
LLFIO_MAKE_FREE_FUNCTION CompletionRoutine bool&#160;</td><td class="memItemRight" valign="bottom"><b>wait_for_device</b> = false</td></tr>
<tr class="separator:aa3a4f0617a012520659bf506c9a67a0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1a6acb0fd6bec948565dd90fa39fb0f"><td class="memItemLeft" align="right" valign="top"><a id="af1a6acb0fd6bec948565dd90fa39fb0f"></a>
LLFIO_MAKE_FREE_FUNCTION CompletionRoutine bool bool&#160;</td><td class="memItemRight" valign="bottom"><b>and_metadata</b> = false</td></tr>
<tr class="separator:af1a6acb0fd6bec948565dd90fa39fb0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae53459ee1c31a1da1ed14c2be28e9782"><td class="memItemLeft" align="right" valign="top"><a id="ae53459ee1c31a1da1ed14c2be28e9782"></a>
LLFIO_MAKE_FREE_FUNCTION CompletionRoutine bool bool span&lt; char &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>mem</b></td></tr>
<tr class="separator:ae53459ee1c31a1da1ed14c2be28e9782"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-types"></a>
Protected Types</h2></td></tr>
<tr class="memitem:acd75c2d28d3c481c0e39c65a81ca4b23"><td class="memItemLeft" align="right" valign="top"><a id="acd75c2d28d3c481c0e39c65a81ca4b23"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>operation_t</b> { <br />
&#160;&#160;<b>read</b>, 
<b>write</b>, 
<b>fsync_sync</b>, 
<b>dsync_sync</b>, 
<br />
&#160;&#160;<b>fsync_async</b>, 
<b>dsync_async</b>
<br />
 }</td></tr>
<tr class="separator:acd75c2d28d3c481c0e39c65a81ca4b23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34c5410c2bc3277e562800c5a64b5f22"><td class="memItemLeft" align="right" valign="top"><a id="a34c5410c2bc3277e562800c5a64b5f22"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><b>shared_size_type</b> = size_type</td></tr>
<tr class="separator:a34c5410c2bc3277e562800c5a64b5f22"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a70d62efb5dec9634dc4105a1cd5a22ac"><td class="memTemplParams" colspan="2"><a id="a70d62efb5dec9634dc4105a1cd5a22ac"></a>
template&lt;class BuffersType , class IORoutine &gt; </td></tr>
<tr class="memitem:a70d62efb5dec9634dc4105a1cd5a22ac"><td class="memTemplItemLeft" align="right" valign="top">result&lt; <a class="el" href="classasync__file__handle.html#a576dc26eb58e4d196363f4323973f7ed">io_state_ptr</a> &gt; <a class="el" href="group__config.html#gad270840dbd547a75ad62d48e93412ca7">LLFIO_HEADERS_ONLY_MEMFUNC_SPEC</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><b>_begin_io</b> (span&lt; char &gt; mem, operation_t operation, io_request&lt; BuffersType &gt; reqs, <a class="el" href="structasync__file__handle_1_1__erased__completion__handler.html">_erased_completion_handler</a> &amp;&amp;completion, IORoutine &amp;&amp;ioroutine) noexcept</td></tr>
<tr class="separator:a70d62efb5dec9634dc4105a1cd5a22ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab74eeda06f83be56406879dda2352df"><td class="memItemLeft" align="right" valign="top"><a id="aab74eeda06f83be56406879dda2352df"></a>
<a class="el" href="group__config.html#gad270840dbd547a75ad62d48e93412ca7">LLFIO_HEADERS_ONLY_MEMFUNC_SPEC</a> result&lt; <a class="el" href="classasync__file__handle.html#a576dc26eb58e4d196363f4323973f7ed">io_state_ptr</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>_begin_io</b> (span&lt; char &gt; mem, operation_t operation, io_request&lt; const_buffers_type &gt; reqs, <a class="el" href="structasync__file__handle_1_1__erased__completion__handler.html">_erased_completion_handler</a> &amp;&amp;completion) noexcept</td></tr>
<tr class="separator:aab74eeda06f83be56406879dda2352df"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:ae9f4f5f9cc386f5188a9977145edbe6c"><td class="memItemLeft" align="right" valign="top"><a id="ae9f4f5f9cc386f5188a9977145edbe6c"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><b>io_service</b></td></tr>
<tr class="separator:ae9f4f5f9cc386f5188a9977145edbe6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>An asynchronous handle to an open something. </p>
<dl class="section note"><dt>Note</dt><dd>Unlike the others, <code>async_file_handle</code> defaults to <code>only_metadata</code> caching as that is the only use case where using async i/o makes sense given the other options below.</dd></dl>
<table class="doxtable">
<tr>
<th></th><th>Cost of opening</th><th>Cost of i/o</th><th>Concurrency and Atomicity</th><th>Other remarks </th></tr>
<tr>
<td><code>file_handle</code></td><td>Least</td><td>Syscall</td><td>POSIX guarantees (usually)</td><td>Least gotcha </td></tr>
<tr>
<td><code>async_file_handle</code></td><td>More</td><td>Most (syscall + malloc/free + reactor)</td><td>POSIX guarantees (usually)</td><td>Makes no sense to use with cached i/o as it's a very expensive way to call <code>memcpy()</code> </td></tr>
<tr>
<td><code>mapped_file_handle</code></td><td>Most</td><td>Least</td><td>None</td><td>Cannot be used with uncached i/o </td></tr>
</table>
<dl class="section warning"><dt>Warning</dt><dd>i/o initiated by this class MUST be on the same kernel thread as which created the owning <code>io_service</code> which MUST also be the same kernel thread as which runs the i/o service's <code>run()</code> function.</dd></dl>
<div class="fragment"><div class="line">  <span class="keyword">namespace </span>llfio = <a class="code" href="group__config.html#gac9f7f0153adb9034d26c4554728f817a">LLFIO_V2_NAMESPACE</a>;</div><div class="line"></div><div class="line">  <span class="comment">// Create an i/o service for this thread</span></div><div class="line">  llfio::io_service service;</div><div class="line"></div><div class="line">  <span class="comment">// Create an async file i/o handle attached to the i/o service for this thread</span></div><div class="line">  llfio::async_file_handle h = <a class="code" href="async__file__handle_8hpp.html#a2f1958f5d16f237b02599b7222c6d1ba">llfio::async_file_handle::async_file</a>(service, {}, <span class="stringliteral">&quot;temp&quot;</span>, <a class="code" href="namespacellfio__v2__xxx.html#a5a8908704c9988bbecc69c2359e6fd4a">llfio::file_handle::mode::write</a>, llfio::file_handle::creation::if_needed, llfio::file_handle::caching::only_metadata, llfio::file_handle::flag::unlink_on_first_close).value();</div><div class="line"></div><div class="line">  <span class="comment">// Truncate to 1Mb</span></div><div class="line">  h.truncate(1024 * 4096);</div><div class="line"></div><div class="line">  <span class="comment">// Launch 8 coroutines, each writing 4Kb of chars 0-8 to every 32Kb block</span></div><div class="line">  <span class="keyword">auto</span> coroutine = [&amp;h](<span class="keywordtype">size_t</span> no) -&gt; std::future&lt;void&gt; {</div><div class="line">    std::vector&lt;llfio::byte, llfio::utils::page_allocator&lt;llfio::byte&gt;&gt; buffer(4096);</div><div class="line">    memset(buffer.data(), (int) (<span class="charliteral">&#39;0&#39;</span> + no), 4096);</div><div class="line">    llfio::async_file_handle::const_buffer_type bt{buffer.data(), buffer.size()};</div><div class="line">    <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 128; n++)</div><div class="line">    {</div><div class="line">      <span class="comment">// This will initiate the i/o, and suspend the coroutine until completion.</span></div><div class="line">      <span class="comment">// The caller will thus resume execution with a valid unsignaled future.</span></div><div class="line">      <span class="keyword">auto</span> written = co_await h.co_write({bt, n * 32768 + no * 4096}).value();</div><div class="line">      written.value();</div><div class="line">    }</div><div class="line">  };</div><div class="line">  std::vector&lt;std::future&lt;void&gt;&gt; coroutines;</div><div class="line">  <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> n = 0; n &lt; 8; n++)</div><div class="line">  {</div><div class="line">    <span class="comment">// Construct each coroutine, initiating the i/o, then suspending.</span></div><div class="line">    coroutines.push_back(coroutine(n));</div><div class="line">  }</div><div class="line">  <span class="comment">// Pump the i/o, multiplexing the coroutines, until no more work remains.</span></div><div class="line">  <span class="keywordflow">while</span>(service.run().value())</div><div class="line">    ;</div><div class="line">  <span class="comment">// Make sure nothing went wrong by fetching the futures.</span></div><div class="line">  <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp;i : coroutines)</div><div class="line">  {</div><div class="line">    i.get();</div><div class="line">  }</div></div><!-- fragment --></div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="a576dc26eb58e4d196363f4323973f7ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a576dc26eb58e4d196363f4323973f7ed">&#9670;&nbsp;</a></span>io_state_ptr</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classasync__file__handle.html#a576dc26eb58e4d196363f4323973f7ed">async_file_handle::io_state_ptr</a> =  std::unique_ptr&lt;<a class="el" href="structasync__file__handle_1_1__erased__io__state__type.html">_erased_io_state_type</a>, <a class="el" href="structasync__file__handle_1_1__io__state__deleter.html">_io_state_deleter</a>&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Smart pointer to state of an i/o in progress. Destroying this before an i/o has completed is <b>blocking</b> because the i/o must be cancelled before the destructor can safely exit. </p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="aa2c709be14026d9acf306b964bc83099"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa2c709be14026d9acf306b964bc83099">&#9670;&nbsp;</a></span>async_file()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static LLFIO_MAKE_FREE_FUNCTION <a class="el" href="group__config.html#gad270840dbd547a75ad62d48e93412ca7">LLFIO_HEADERS_ONLY_MEMFUNC_SPEC</a> result&lt;<a class="el" href="classasync__file__handle.html">async_file_handle</a>&gt; async_file_handle::async_file </td>
          <td>(</td>
          <td class="paramtype">io_service &amp;&#160;</td>
          <td class="paramname"><em>service</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const path_handle &amp;&#160;</td>
          <td class="paramname"><em>base</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">path_view_type&#160;</td>
          <td class="paramname"><em>_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">mode&#160;</td>
          <td class="paramname"><em>_mode</em> = <code>mode::read</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">creation&#160;</td>
          <td class="paramname"><em>_creation</em> = <code>creation::open_existing</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">caching&#160;</td>
          <td class="paramname"><em>_caching</em> = <code>caching::only_metadata</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">flag&#160;</td>
          <td class="paramname"><em>flags</em> = <code>flag::none</code>&#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 class="mlabel">static</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Create an async file handle opening access to a file on path using the given io_service. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">service</td><td>The <code>io_service</code> to use. </td></tr>
    <tr><td class="paramname">base</td><td>Handle to a base location on the filing system. Pass <code>{}</code> to indicate that path will be absolute. </td></tr>
    <tr><td class="paramname">_path</td><td>The path relative to base to open. </td></tr>
    <tr><td class="paramname">_mode</td><td>How to open the file. </td></tr>
    <tr><td class="paramname">_creation</td><td>How to create the file. </td></tr>
    <tr><td class="paramname">_caching</td><td>How to ask the kernel to cache the file. </td></tr>
    <tr><td class="paramname">flags</td><td>Any additional custom behaviours.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
<div class="fragment"><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  {</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="comment">// Open it overlapped, otherwise no difference.</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    OUTCOME_TRY(v, <a class="code" href="namespacellfio__v2__xxx.html#af31a062639499a79ef5cc8aed16ba65d">file_handle::file</a>(std::move(base), _path, _mode, _creation, _caching, flags | flag::overlapped));</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <a class="code" href="classasync__file__handle.html">async_file_handle</a> ret(std::move(v));</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    ret._service = &amp;service;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <span class="keywordflow">return</span> std::move(ret);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  }</div><div class="ttc" id="classasync__file__handle_html"><div class="ttname"><a href="classasync__file__handle.html">async_file_handle</a></div><div class="ttdoc">An asynchronous handle to an open something. </div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:63</div></div>
<div class="ttc" id="namespacellfio__v2__xxx_html_af31a062639499a79ef5cc8aed16ba65d"><div class="ttname"><a href="namespacellfio__v2__xxx.html#af31a062639499a79ef5cc8aed16ba65d">llfio_v2_xxx::file</a></div><div class="ttdeci">result&lt; file_handle &gt; file(const path_handle &amp;base, file_handle::path_view_type path, file_handle::mode _mode=file_handle::mode::read, file_handle::creation _creation=file_handle::creation::open_existing, file_handle::caching _caching=file_handle::caching::all, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:317</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a5055bafbff7e2277e836b10d5173f674"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5055bafbff7e2277e836b10d5173f674">&#9670;&nbsp;</a></span>async_random_file()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static LLFIO_MAKE_FREE_FUNCTION result&lt;<a class="el" href="classasync__file__handle.html">async_file_handle</a>&gt; async_file_handle::async_random_file </td>
          <td>(</td>
          <td class="paramtype">io_service &amp;&#160;</td>
          <td class="paramname"><em>service</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const path_handle &amp;&#160;</td>
          <td class="paramname"><em>dirpath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">mode&#160;</td>
          <td class="paramname"><em>_mode</em> = <code>mode::write</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">caching&#160;</td>
          <td class="paramname"><em>_caching</em> = <code>caching::only_metadata</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">flag&#160;</td>
          <td class="paramname"><em>flags</em> = <code>flag::none</code>&#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 class="mlabel">static</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Create an async file handle creating a randomly named file on a path. The file is opened exclusively with <code>creation::only_if_not_exist</code> so it will never collide with nor overwrite any existing file.</p>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
<div class="fragment"><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;  {</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    {</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;      <span class="keywordflow">for</span>(;;)</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;      {</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;        <span class="keyword">auto</span> randomname = <a class="code" href="namespacellfio__v2__xxx_1_1utils.html#a6a29cf29a4b097411f6c1e5274bfb417">utils::random_string</a>(32);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        randomname.append(<span class="stringliteral">&quot;.random&quot;</span>);</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        result&lt;async_file_handle&gt; ret = <a class="code" href="classasync__file__handle.html#aa2c709be14026d9acf306b964bc83099">async_file</a>(service, dirpath, randomname, _mode, creation::only_if_not_exist, _caching, flags);</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        <span class="keywordflow">if</span>(ret || (!ret &amp;&amp; ret.error() != errc::file_exists))</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        {</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;          <span class="keywordflow">return</span> ret;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        }</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      }</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    }</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    {</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      <span class="keywordflow">return</span> error_from_exception();</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    }</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;  }</div><div class="ttc" id="namespacellfio__v2__xxx_1_1utils_html_a6a29cf29a4b097411f6c1e5274bfb417"><div class="ttname"><a href="namespacellfio__v2__xxx_1_1utils.html#a6a29cf29a4b097411f6c1e5274bfb417">llfio_v2_xxx::utils::random_string</a></div><div class="ttdeci">std::string random_string(size_t randomlen)</div><div class="ttdoc">Returns a cryptographically random string capable of being used as a filename. Essentially random_fil...</div><div class="ttdef"><b>Definition:</b> utils.hpp:131</div></div>
<div class="ttc" id="classasync__file__handle_html_aa2c709be14026d9acf306b964bc83099"><div class="ttname"><a href="classasync__file__handle.html#aa2c709be14026d9acf306b964bc83099">async_file_handle::async_file</a></div><div class="ttdeci">static LLFIO_MAKE_FREE_FUNCTION LLFIO_HEADERS_ONLY_MEMFUNC_SPEC result&lt; async_file_handle &gt; async_file(io_service &amp;service, const path_handle &amp;base, path_view_type _path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::only_metadata, flag flags=flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:138</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a23be7dcb955f7f7396db3f723ba38971"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a23be7dcb955f7f7396db3f723ba38971">&#9670;&nbsp;</a></span>async_temp_file()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static LLFIO_MAKE_FREE_FUNCTION result&lt;<a class="el" href="classasync__file__handle.html">async_file_handle</a>&gt; async_file_handle::async_temp_file </td>
          <td>(</td>
          <td class="paramtype">io_service &amp;&#160;</td>
          <td class="paramname"><em>service</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">path_view_type&#160;</td>
          <td class="paramname"><em>name</em> = <code>path_view_type()</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">mode&#160;</td>
          <td class="paramname"><em>_mode</em> = <code>mode::write</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">creation&#160;</td>
          <td class="paramname"><em>_creation</em> = <code>creation::if_needed</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">caching&#160;</td>
          <td class="paramname"><em>_caching</em> = <code>caching::only_metadata</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">flag&#160;</td>
          <td class="paramname"><em>flags</em> = <code>flag::unlink_on_first_close</code>&#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 class="mlabel">static</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Create an async file handle creating the named file on some path which the OS declares to be suitable for temporary files. Most OSs are very lazy about flushing changes made to these temporary files. Note the default flags are to have the newly created file deleted on first handle close. Note also that an empty name is equivalent to calling <code>async_random_file(path_discovery::storage_backed_temporary_files_directory())</code> and the creation parameter is ignored.</p>
<dl class="section note"><dt>Note</dt><dd>If the temporary file you are creating is not going to have its path sent to another process for usage, this is the WRONG function to use. Use <code>temp_inode()</code> instead, it is far more secure.</dd></dl>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
<div class="fragment"><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  {</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <span class="keyword">auto</span> &amp;tempdirh = <a class="code" href="namespacellfio__v2__xxx_1_1path__discovery.html#a2dd74ea752f3f511d58ccccdcac7f4fd">path_discovery::storage_backed_temporary_files_directory</a>();</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    <span class="keywordflow">return</span> name.empty() ? <a class="code" href="classasync__file__handle.html#a5055bafbff7e2277e836b10d5173f674">async_random_file</a>(service, tempdirh, _mode, _caching, flags) : <a class="code" href="classasync__file__handle.html#aa2c709be14026d9acf306b964bc83099">async_file</a>(service, tempdirh, name, _mode, _creation, _caching, flags);</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  }</div><div class="ttc" id="classasync__file__handle_html_a5055bafbff7e2277e836b10d5173f674"><div class="ttname"><a href="classasync__file__handle.html#a5055bafbff7e2277e836b10d5173f674">async_file_handle::async_random_file</a></div><div class="ttdeci">static LLFIO_MAKE_FREE_FUNCTION result&lt; async_file_handle &gt; async_random_file(io_service &amp;service, const path_handle &amp;dirpath, mode _mode=mode::write, caching _caching=caching::only_metadata, flag flags=flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:154</div></div>
<div class="ttc" id="namespacellfio__v2__xxx_1_1path__discovery_html_a2dd74ea752f3f511d58ccccdcac7f4fd"><div class="ttname"><a href="namespacellfio__v2__xxx_1_1path__discovery.html#a2dd74ea752f3f511d58ccccdcac7f4fd">llfio_v2_xxx::path_discovery::storage_backed_temporary_files_directory</a></div><div class="ttdeci">const path_handle &amp; storage_backed_temporary_files_directory() noexcept</div><div class="ttdoc">Returns a reference to an open handle to a verified temporary directory where files created are store...</div></div>
<div class="ttc" id="classasync__file__handle_html_aa2c709be14026d9acf306b964bc83099"><div class="ttname"><a href="classasync__file__handle.html#aa2c709be14026d9acf306b964bc83099">async_file_handle::async_file</a></div><div class="ttdeci">static LLFIO_MAKE_FREE_FUNCTION LLFIO_HEADERS_ONLY_MEMFUNC_SPEC result&lt; async_file_handle &gt; async_file(io_service &amp;service, const path_handle &amp;base, path_view_type _path, mode _mode=mode::read, creation _creation=creation::open_existing, caching _caching=caching::only_metadata, flag flags=flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:138</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a823ff9a0f930eb5d696127283a44fa82"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a823ff9a0f930eb5d696127283a44fa82">&#9670;&nbsp;</a></span>async_temp_inode()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static LLFIO_MAKE_FREE_FUNCTION <a class="el" href="group__config.html#gad270840dbd547a75ad62d48e93412ca7">LLFIO_HEADERS_ONLY_MEMFUNC_SPEC</a> result&lt;<a class="el" href="classasync__file__handle.html">async_file_handle</a>&gt; async_file_handle::async_temp_inode </td>
          <td>(</td>
          <td class="paramtype">io_service &amp;&#160;</td>
          <td class="paramname"><em>service</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const path_handle &amp;&#160;</td>
          <td class="paramname"><em>dir</em> = <code>path_discovery::storage_backed_temporary_files_directory()</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">mode&#160;</td>
          <td class="paramname"><em>_mode</em> = <code>mode::write</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">flag&#160;</td>
          <td class="paramname"><em>flags</em> = <code>flag::none</code>&#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 class="mlabel">static</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p><em>Securely</em> create an async file handle creating a temporary anonymous inode in the filesystem referred to by <em>dirpath</em>. The inode created has no name nor accessible path on the filing system and ceases to exist as soon as the last handle is closed, making it ideal for use as a temporary file where other processes do not need to have access to its contents via some path on the filing system (a classic use case is for backing shared memory maps).</p>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX open() or CreateFile() can return. </dd></dl>
<div class="fragment"><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;  {</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="comment">// Open it overlapped, otherwise no difference.</span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    OUTCOME_TRY(v, <a class="code" href="namespacellfio__v2__xxx.html#ac8d9dc908fe39f9c896e99f6b7a39d81">file_handle::temp_inode</a>(dir, _mode, flags | flag::overlapped));</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <a class="code" href="classasync__file__handle.html">async_file_handle</a> ret(std::move(v));</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    ret._service = &amp;service;</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    <span class="keywordflow">return</span> std::move(ret);</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;  }</div><div class="ttc" id="namespacellfio__v2__xxx_html_ac8d9dc908fe39f9c896e99f6b7a39d81"><div class="ttname"><a href="namespacellfio__v2__xxx.html#ac8d9dc908fe39f9c896e99f6b7a39d81">llfio_v2_xxx::temp_inode</a></div><div class="ttdeci">result&lt; file_handle &gt; temp_inode(const path_handle &amp;dirh=path_discovery::storage_backed_temporary_files_directory(), file_handle::mode _mode=file_handle::mode::write, file_handle::flag flags=file_handle::flag::none) noexcept</div><div class="ttdef"><b>Definition:</b> file_handle.hpp:364</div></div>
<div class="ttc" id="classasync__file__handle_html"><div class="ttname"><a href="classasync__file__handle.html">async_file_handle</a></div><div class="ttdoc">An asynchronous handle to an open something. </div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:63</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a67326a2f1e482b6c66b0bb18b67a6826"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67326a2f1e482b6c66b0bb18b67a6826">&#9670;&nbsp;</a></span>clone()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">result&lt;<a class="el" href="classasync__file__handle.html">async_file_handle</a>&gt; async_file_handle::clone </td>
          <td>(</td>
          <td class="paramtype">io_service &amp;&#160;</td>
          <td class="paramname"><em>service</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">mode&#160;</td>
          <td class="paramname"><em>mode_</em> = <code>mode::unchanged</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">caching&#160;</td>
          <td class="paramname"><em>caching_</em> = <code>caching::unchanged</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">deadline&#160;</td>
          <td class="paramname"><em>d</em> = <code>std::chrono::seconds(30)</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Clone this handle to a different io_service (copy constructor is disabled to avoid accidental copying)</p>
<dl class="section user"><dt>Errors returnable</dt><dd>Any of the values POSIX dup() or DuplicateHandle() can return. </dd></dl>
<div class="fragment"><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;  {</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    OUTCOME_TRY(v, file_handle::clone(mode_, caching_, d));</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <a class="code" href="classasync__file__handle.html">async_file_handle</a> ret(std::move(v));</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    ret._service = &amp;service;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordflow">return</span> std::move(ret);</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  }</div><div class="ttc" id="classasync__file__handle_html"><div class="ttname"><a href="classasync__file__handle.html">async_file_handle</a></div><div class="ttdoc">An asynchronous handle to an open something. </div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:63</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a51e4032fd025d04213386ed2973fb8c7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a51e4032fd025d04213386ed2973fb8c7">&#9670;&nbsp;</a></span>co_read() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">LLFIO_MAKE_FREE_FUNCTION result&lt;<a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt;buffers_type&gt; &gt; async_file_handle::co_read </td>
          <td>(</td>
          <td class="paramtype">io_request&lt; buffers_type &gt;&#160;</td>
          <td class="paramname"><em>reqs</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Schedule a read to occur asynchronously. </p>
<dl class="section return"><dt>Returns</dt><dd>An awaitable, which when <code>co_await</code>ed upon, suspends execution of the coroutine until the operation has completed, resuming with the buffers read, which may not be the buffers input. The size of each scatter-gather buffer is updated with the number of bytes of that buffer transferred, and the pointer to the data may be <em>completely</em> different to what was submitted (e.g. it may point into a memory map). </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">reqs</td><td>A scatter-gather and offset request. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section user"><dt>Errors returnable</dt><dd>As for read(), plus ENOMEM. </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>One calloc, one free. </dd></dl>
<div class="fragment"><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;  {</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    OUTCOME_TRY(r, <a class="code" href="async__file__handle_8hpp.html#a0688362e7e397f8072f2934ab3d5a07a">async_read</a>(reqs, awaitable_state&lt;buffers_type&gt;()));</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="keywordflow">return</span> awaitable&lt;buffers_type&gt;(std::move(r));</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;  }</div><div class="ttc" id="async__file__handle_8hpp_html_a0688362e7e397f8072f2934ab3d5a07a"><div class="ttname"><a href="async__file__handle_8hpp.html#a0688362e7e397f8072f2934ab3d5a07a">async_read</a></div><div class="ttdeci">result&lt; async_file_handle::io_state_ptr &gt; async_read(async_file_handle &amp;self, async_file_handle::io_request&lt; async_file_handle::buffers_type &gt; reqs, CompletionRoutine &amp;&amp;completion, span&lt; char &gt; mem={}) noexcept</div><div class="ttdoc">Schedule a read to occur asynchronously. </div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:734</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a7d7c5be5a207988990c73e9a04dbcf45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7d7c5be5a207988990c73e9a04dbcf45">&#9670;&nbsp;</a></span>co_read() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">LLFIO_MAKE_FREE_FUNCTION result&lt;<a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt;buffers_type&gt; &gt; async_file_handle::co_read </td>
          <td>(</td>
          <td class="paramtype">extent_type&#160;</td>
          <td class="paramname"><em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::initializer_list&lt; buffer_type &gt;&#160;</td>
          <td class="paramname"><em>lst</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 class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
<div class="fragment"><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;  {</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(buffer_type) * lst.size()));</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(buffer_type) * lst.size());</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    io_request&lt;buffers_type&gt; reqs(buffers_type(_reqs, lst.size()), offset);</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classasync__file__handle.html#a51e4032fd025d04213386ed2973fb8c7">co_read</a>(reqs);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;  }</div><div class="ttc" id="classasync__file__handle_html_a51e4032fd025d04213386ed2973fb8c7"><div class="ttname"><a href="classasync__file__handle.html#a51e4032fd025d04213386ed2973fb8c7">async_file_handle::co_read</a></div><div class="ttdeci">LLFIO_MAKE_FREE_FUNCTION result&lt; awaitable&lt; buffers_type &gt; &gt; co_read(io_request&lt; buffers_type &gt; reqs) noexcept</div><div class="ttdoc">Schedule a read to occur asynchronously. </div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:562</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a3189fb435df6f0beab09efbc71effc44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3189fb435df6f0beab09efbc71effc44">&#9670;&nbsp;</a></span>co_write() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">LLFIO_MAKE_FREE_FUNCTION result&lt;<a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt;const_buffers_type&gt; &gt; async_file_handle::co_write </td>
          <td>(</td>
          <td class="paramtype">io_request&lt; const_buffers_type &gt;&#160;</td>
          <td class="paramname"><em>reqs</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Schedule a write to occur asynchronously. </p>
<dl class="section return"><dt>Returns</dt><dd>An awaitable, which when <code>co_await</code>ed upon, suspends execution of the coroutine until the operation has completed, resuming with the buffers written, which may not be the buffers input. The size of each scatter-gather buffer is updated with the number of bytes of that buffer transferred. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">reqs</td><td>A scatter-gather and offset request. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section user"><dt>Errors returnable</dt><dd>As for write(), plus ENOMEM. </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>One calloc, one free. </dd></dl>
<div class="fragment"><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;  {</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    OUTCOME_TRY(r, <a class="code" href="async__file__handle_8hpp.html#a8de83ef804e0d3d01764e253274cbb4f">async_write</a>(reqs, awaitable_state&lt;const_buffers_type&gt;()));</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    <span class="keywordflow">return</span> awaitable&lt;const_buffers_type&gt;(std::move(r));</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;  }</div><div class="ttc" id="async__file__handle_8hpp_html_a8de83ef804e0d3d01764e253274cbb4f"><div class="ttname"><a href="async__file__handle_8hpp.html#a8de83ef804e0d3d01764e253274cbb4f">async_write</a></div><div class="ttdeci">result&lt; async_file_handle::io_state_ptr &gt; async_write(async_file_handle &amp;self, async_file_handle::io_request&lt; async_file_handle::const_buffers_type &gt; reqs, CompletionRoutine &amp;&amp;completion, span&lt; char &gt; mem={}) noexcept</div><div class="ttdoc">Schedule a write to occur asynchronously. </div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:757</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="af3885669e0d7ef5f2986dce5297fe50a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af3885669e0d7ef5f2986dce5297fe50a">&#9670;&nbsp;</a></span>co_write() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">LLFIO_MAKE_FREE_FUNCTION result&lt;<a class="el" href="classasync__file__handle_1_1awaitable.html">awaitable</a>&lt;const_buffers_type&gt; &gt; async_file_handle::co_write </td>
          <td>(</td>
          <td class="paramtype">extent_type&#160;</td>
          <td class="paramname"><em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::initializer_list&lt; const_buffer_type &gt;&#160;</td>
          <td class="paramname"><em>lst</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 class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </p>
<div class="fragment"><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;  {</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    const_buffer_type *_reqs = <span class="keyword">reinterpret_cast&lt;</span>const_buffer_type *<span class="keyword">&gt;</span>(alloca(<span class="keyword">sizeof</span>(const_buffer_type) * lst.size()));</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;    memcpy(_reqs, lst.begin(), <span class="keyword">sizeof</span>(const_buffer_type) * lst.size());</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    io_request&lt;const_buffers_type&gt; reqs(const_buffers_type(_reqs, lst.size()), offset);</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="classasync__file__handle.html#a3189fb435df6f0beab09efbc71effc44">co_write</a>(reqs);</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;  }</div><div class="ttc" id="classasync__file__handle_html_a3189fb435df6f0beab09efbc71effc44"><div class="ttname"><a href="classasync__file__handle.html#a3189fb435df6f0beab09efbc71effc44">async_file_handle::co_write</a></div><div class="ttdeci">LLFIO_MAKE_FREE_FUNCTION result&lt; awaitable&lt; const_buffers_type &gt; &gt; co_write(io_request&lt; const_buffers_type &gt; reqs) noexcept</div><div class="ttdoc">Schedule a write to occur asynchronously. </div><div class="ttdef"><b>Definition:</b> async_file_handle.hpp:588</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a76d3948cfdedbeab89f5e0440c3a68d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76d3948cfdedbeab89f5e0440c3a68d7">&#9670;&nbsp;</a></span>LLFIO_REQUIRES()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;class CompletionRoutine &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">LLFIO_MAKE_FREE_FUNCTION async_file_handle::LLFIO_REQUIRES </td>
          <td>(</td>
          <td class="paramtype">detail::is_invocable_r&lt; void, CompletionRoutine, <a class="el" href="classasync__file__handle.html">async_file_handle</a> *, io_result&lt; const_buffers_type &gt; &amp;&gt;::value&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Schedule a barrier to occur asynchronously. </p>
<dl class="section note"><dt>Note</dt><dd>All the caveats and exclusions which apply to <code>barrier()</code> also apply here. Note that Microsoft Windows does not support asynchronously executed barriers, and this call will fail on that operating system.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>Either an io_state_ptr to the i/o in progress, or an error code. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">reqs</td><td>A scatter-gather and offset request for what range to barrier. May be ignored on some platforms which always write barrier the entire file. Supplying a default initialised reqs write barriers the entire file. </td></tr>
    <tr><td class="paramname">completion</td><td>A callable to call upon i/o completion. Spec is <code>void(async_file_handle *, io_result&lt;const_buffers_type&gt; &amp;)</code>. Note that buffers returned may not be buffers input, see documentation for <code>barrier()</code>. </td></tr>
    <tr><td class="paramname">wait_for_device</td><td>True if you want the call to wait until data reaches storage and that storage has acknowledged the data is physically written. Slow. </td></tr>
    <tr><td class="paramname">and_metadata</td><td>True if you want the call to sync the metadata for retrieving the writes before the barrier after a sudden power loss event. Slow. </td></tr>
    <tr><td class="paramname">mem</td><td>Optional span of memory to use to avoid using <code>calloc()</code>. Note span MUST be all bits zero on entry. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section user"><dt>Errors returnable</dt><dd>As for <code>barrier()</code>, plus <code>ENOMEM</code>. </dd></dl>
<dl class="section user"><dt>Memory Allocations</dt><dd>If mem is not set, one calloc, one free. The allocation is unavoidable due to the need to store a type erased completion handler of unknown type and state per buffers input. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/llfio/v2.0/<a class="el" href="async__file__handle_8hpp.html">async_file_handle.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="classasync__file__handle.html">async_file_handle</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>