Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r56768 - in sandbox/async/libs/async/doc: . html html/toward_boost_async html/toward_boost_async/appendices html/toward_boost_async/examples html/toward_boost_async/overview html/toward_boost_async/reference html/toward_boost_async/users_guide
From: vicente.botet_at_[hidden]
Date: 2009-10-13 02:51:24


Author: viboes
Date: 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
New Revision: 56768
URL: http://svn.boost.org/trac/boost/changeset/56768

Log:
TBoost.Async:
* Added doc

Added:
   sandbox/async/libs/async/doc/html/
   sandbox/async/libs/async/doc/html/index.html (contents, props changed)
   sandbox/async/libs/async/doc/html/standalone_HTML.manifest (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/acknowledgments.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/changes.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/implementation.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/rationale.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/tests.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/tickets.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/appendices/todo.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/examples/
   sandbox/async/libs/async/doc/html/toward_boost_async/examples.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/examples/from_a_single_to_a_multi_threaded_application.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/examples/parallel_sort.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/overview/
   sandbox/async/libs/async/doc/html/toward_boost_async/overview.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/overview/motivation.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/reference/
   sandbox/async/libs/async/doc/html/toward_boost_async/reference.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/reference/ae_act_framework_reference.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/reference/ae_act_models_reference.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/reference/concepts.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/users_guide/
   sandbox/async/libs/async/doc/html/toward_boost_async/users_guide.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/users_guide/bibliography.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/users_guide/getting_started.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/users_guide/glosary.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/users_guide/glossary.html (contents, props changed)
   sandbox/async/libs/async/doc/html/toward_boost_async/users_guide/tutorial.html (contents, props changed)
Text files modified:
   sandbox/async/libs/async/doc/async.qbk | 2 ++
   1 files changed, 2 insertions(+), 0 deletions(-)

Modified: sandbox/async/libs/async/doc/async.qbk
==============================================================================
--- sandbox/async/libs/async/doc/async.qbk (original)
+++ sandbox/async/libs/async/doc/async.qbk 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -10,6 +10,8 @@
     [quickbook 1.4]
     [authors [Botet Escriba, Vicente J.]]
     [copyright 2008-2009 Vicente J. Botet Escriba]
+ [id boost.async]
+ [dirname async]
     [purpose C++ Asynchronous executors and asyncronous completion tokes framework with threaders/joiners, launcher.]
     [category text]
     [license

Added: sandbox/async/libs/async/doc/html/index.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/index.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,102 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Toward Boost Async</title>
+<link rel="stylesheet" href="../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="index.html" title="Toward Boost Async">
+<link rel="next" href="toward_boost_async/overview.html" title=" Overview">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="toward_boost_async/overview.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
+<div class="article" lang="en">
+<div class="titlepage">
+<div>
+<div><h2 class="title">
+<a name="boost.async"></a>Toward Boost Async</h2></div>
+<div><div class="authorgroup"><div class="author"><h3 class="author">
+<span class="firstname">Vicente J.</span> <span class="surname">Botet Escriba</span>
+</h3></div></div></div>
+<div><p class="copyright">Copyright © 2008 -2009 Vicente J. Botet Escriba</p></div>
+<div><div class="legalnotice">
+<a name="id4803230"></a><p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></div>
+</div>
+<hr>
+</div>
+<div class="toc">
+<p><b>Table of Contents</b></p>
+<dl>
+<dt><span class="section"> Overview</span></dt>
+<dd><dl><dt><span class="section"> Motivation</span></dt></dl></dd>
+<dt><span class="section"> Users'Guide</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="toward_boost_async/users_guide/getting_started.html"> Getting
+ Started</a></span></dt>
+<dt><span class="section"> Tutorial</span></dt>
+<dt><span class="section"> References</span></dt>
+<dt><span class="section"> Glossary</span></dt>
+</dl></dd>
+<dt><span class="section"> Reference</span></dt>
+<dd><dl>
+<dt><span class="section">Concepts</span></dt>
+<dt><span class="section"><a href="toward_boost_async/reference/ae_act_framework_reference.html">AE/ACT
+ Framework Reference</a></span></dt>
+<dt><span class="section"><a href="toward_boost_async/reference/ae_act_models_reference.html">AE/ACT
+ Models Reference</a></span></dt>
+</dl></dd>
+<dt><span class="section">Examples</span></dt>
+<dd><dl>
+<dt><span class="section">Parallel sort</span></dt>
+<dt><span class="section"><a href="toward_boost_async/examples/from_a_single_to_a_multi_threaded_application.html">From
+ a single to a multi threaded application</a></span></dt>
+</dl></dd>
+<dt><span class="section">Appendices</span></dt>
+<dd><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dt><span class="section"><a href="toward_boost_async/appendices/rationale.html"> Appendix B:
+ Rationale</a></span></dt>
+<dt><span class="section"><a href="toward_boost_async/appendices/implementation.html"> Appendix
+ C: Implementation Notes</a></span></dt>
+<dt><span class="section"><a href="toward_boost_async/appendices/acknowledgments.html"> Appendix
+ D: Acknowledgments</a></span></dt>
+<dt><span class="section"> Appendix E: Tests</span></dt>
+<dt><span class="section"> Appendix F: Tickets</span></dt>
+<dt><span class="section"><a href="toward_boost_async/appendices/todo.html"> Appendix G: Future
+ plans</a></span></dt>
+</dl></dd>
+</dl>
+</div>
+<div class="warning"><table border="0" summary="Warning">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../doc/html/images/warning.png"></td>
+<th align="left">Warning</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ Async is not a part of the Boost libraries.
+ </p></td></tr>
+</table></div>
+<p>
+ [/
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"><p><small>Last revised: October 05, 2009 at 16:50:16 GMT</small></p></td>
+<td align="right"><div class="copyright-footer"></div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav"><a accesskey="n" href="toward_boost_async/overview.html"><img src="../../../../doc/html/images/next.png" alt="Next"></a></div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/standalone_HTML.manifest
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/standalone_HTML.manifest 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,23 @@
+index.html
+toward_boost_async/overview.html
+toward_boost_async/overview/motivation.html
+toward_boost_async/users_guide.html
+toward_boost_async/users_guide/getting_started.html
+toward_boost_async/users_guide/tutorial.html
+toward_boost_async/users_guide/bibliography.html
+toward_boost_async/users_guide/glossary.html
+toward_boost_async/reference.html
+toward_boost_async/reference/concepts.html
+toward_boost_async/reference/ae_act_framework_reference.html
+toward_boost_async/reference/ae_act_models_reference.html
+toward_boost_async/examples.html
+toward_boost_async/examples/parallel_sort.html
+toward_boost_async/examples/from_a_single_to_a_multi_threaded_application.html
+toward_boost_async/appendices.html
+toward_boost_async/appendices/changes.html
+toward_boost_async/appendices/rationale.html
+toward_boost_async/appendices/implementation.html
+toward_boost_async/appendices/acknowledgments.html
+toward_boost_async/appendices/tests.html
+toward_boost_async/appendices/tickets.html
+toward_boost_async/appendices/todo.html

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,71 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Appendices</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../index.html" title="Toward Boost Async">
+<link rel="up" href="../index.html" title="Toward Boost Async">
+<link rel="prev" href="examples/from_a_single_to_a_multi_threaded_application.html" title="From
+ a single to a multi threaded application">
+<link rel="next" href="appendices/changes.html" title=" Appendix A: History">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="examples/from_a_single_to_a_multi_threaded_application.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/changes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_async.appendices"></a>Appendices
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/changes.html#toward_boost_async.appendices.changes.__version_0_2__may_07__2009__adding_immediate_asynchronous_executor___adaptation_to_boost_1_39"><span class="bold"><strong>Version 0.2, May 07, 2009</strong></span> Adding immediate asynchronous
+ executor + Adaptation to Boost 1.39</a></span></dt>
+<dt><span class="section"><a href="appendices/changes.html#toward_boost_async.appendices.changes.__version_0_1__april_29__2009__extraction_of_the_ae_act_frameworks_from_boost_async"><span class="bold"><strong>Version 0.1, April 29, 2009</strong></span> Extraction of the AE/ACT
+ frameworks from Boost.Async</a></span></dt>
+<dt><span class="section">Bugs</span></dt>
+</dl></dd>
+<dt><span class="section"><a href="appendices/rationale.html"> Appendix B:
+ Rationale</a></span></dt>
+<dt><span class="section"><a href="appendices/implementation.html"> Appendix
+ C: Implementation Notes</a></span></dt>
+<dt><span class="section"><a href="appendices/acknowledgments.html"> Appendix
+ D: Acknowledgments</a></span></dt>
+<dt><span class="section"> Appendix E: Tests</span></dt>
+<dd><dl><dt><span class="section">AE/ACT</span></dt></dl></dd>
+<dt><span class="section"> Appendix F: Tickets</span></dt>
+<dt><span class="section"><a href="appendices/todo.html"> Appendix G: Future
+ plans</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="appendices/todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review">Tasks
+ to do before review</a></span></dt>
+<dt><span class="section"><a href="appendices/todo.html#toward_boost_async.appendices.todo.for_later_releases">For
+ later releases</a></span></dt>
+</dl></dd>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="examples/from_a_single_to_a_multi_threaded_application.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="appendices/changes.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices/acknowledgments.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices/acknowledgments.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,57 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Appendix
+ D: Acknowledgments</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="implementation.html" title=" Appendix
+ C: Implementation Notes">
+<link rel="next" href="tests.html" title=" Appendix E: Tests">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="implementation.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tests.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.appendices.acknowledgments"></a><a href="acknowledgments.html" title=" Appendix
+ D: Acknowledgments"> Appendix
+ D: Acknowledgments</a>
+</h3></div></div></div>
+<p>
+ The Threader|Joiner design has been taken from <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1883.pdf" target="_top">N1833
+ - Preliminary Threading Library Proposal for TR2</a> Many thanks to Kevlin
+ Henney to make evident to me the separation between asynchronous executors,
+ and asynchronous completion tokens. Thanks to Alan Patterson for the idea
+ of the immediate executor.
+ </p>
+<p>
+ You can help me to make this library better! Any feedback is very welcome.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="implementation.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tests.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices/changes.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices/changes.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,151 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Appendix A: History</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="../appendices.html" title="Appendices">
+<link rel="next" href="rationale.html" title=" Appendix B:
+ Rationale">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../appendices.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.appendices.changes"></a> Appendix A: History
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="changes.html#toward_boost_async.appendices.changes.__version_0_2__may_07__2009__adding_immediate_asynchronous_executor___adaptation_to_boost_1_39"><span class="bold"><strong>Version 0.2, May 07, 2009</strong></span> Adding immediate asynchronous
+ executor + Adaptation to Boost 1.39</a></span></dt>
+<dt><span class="section"><a href="changes.html#toward_boost_async.appendices.changes.__version_0_1__april_29__2009__extraction_of_the_ae_act_frameworks_from_boost_async"><span class="bold"><strong>Version 0.1, April 29, 2009</strong></span> Extraction of the AE/ACT
+ frameworks from Boost.Async</a></span></dt>
+<dt><span class="section">Bugs</span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.appendices.changes.__version_0_2__may_07__2009__adding_immediate_asynchronous_executor___adaptation_to_boost_1_39"></a><a href="changes.html#toward_boost_async.appendices.changes.__version_0_2__may_07__2009__adding_immediate_asynchronous_executor___adaptation_to_boost_1_39" title="Version 0.2, May 07, 2009 Adding immediate asynchronous
+ executor + Adaptation to Boost 1.39"><span class="bold"><strong>Version 0.2, May 07, 2009</strong></span> Adding immediate asynchronous
+ executor + Adaptation to Boost 1.39</a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ Immediate asynchronous executor
+ </li></ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.appendices.changes.__version_0_1__april_29__2009__extraction_of_the_ae_act_frameworks_from_boost_async"></a><a href="changes.html#toward_boost_async.appendices.changes.__version_0_1__april_29__2009__extraction_of_the_ae_act_frameworks_from_boost_async" title="Version 0.1, April 29, 2009 Extraction of the AE/ACT
+ frameworks from Boost.Async"><span class="bold"><strong>Version 0.1, April 29, 2009</strong></span> Extraction of the AE/ACT
+ frameworks from Boost.Async</a>
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ An asynchronous execution framework working with <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ It includes some generic functions and several <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>:
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ fork and fork_all to execute asynchronously functions
+ </li>
+<li>
+ fork_after: request an <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ to execute a function asynchronously once each one of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> in
+ the dependency tuple parameter are ready. It is similar to the async_with_dependencies
+ proposed Peter Dimov.
+ </li>
+<li>
+ generic get, join, ... free functions to synchronize on an <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+</li>
+<li>
+ generic get_all, join_all, ... free functions to synchronize on multiple
+ <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+</li>
+<li>
+ generic wait_for_all, wait_for_any to execute asynchronously functions
+ and wait for the completion of all or any of them.
+ </li>
+</ul></div>
+</li>
+<li>
+ Some <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ models
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ basic_threader: can be seen as a thread factory executing asynchronously
+ a function on the returned thread.
+ </li>
+<li>
+ launchers: Launchers can be seen as a future factory executing asynchronously
+ a function on a hidden thread.
+ </li>
+<li>
+ threader/joiner: A Threader runs a unary function in its own thread.
+ A Threader can be seen as a Joiner factory executing asynchronously
+ a function on a thread encapsulated on the returned Joiner. The joiner
+ is used to synchronize with and pick up the result from a function
+ or to manage the encapsulated thread.
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span></code> and <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">task</span></code>
+ customization as an <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and an <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ respectively. <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span></code>
+ can be seen as a <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">task</span></code>
+ factory executing asynchronously a function on a pool of threads.
+ </li>
+<li>
+ a generic asynchronous_executor_decorator which allows to decorate
+ the function to be evaluated asynchronously.
+ </li>
+</ul></div>
+</li>
+</ul></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.appendices.changes.__bugs_"></a>Bugs
+</h4></div></div></div>
+<a name="toward_boost_async.appendices.changes.__bugs_._emphasis_role__bold__open_bugs___emphasis_"></a><h5>
+<a name="id4892622"></a>
+ Open Bugs:
+ </h5>
+<a name="toward_boost_async.appendices.changes.__bugs_._emphasis_role__bold__fixed_bugs___emphasis_"></a><h5>
+<a name="id4892649"></a>
+ Fixed Bugs:
+ </h5>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../appendices.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="rationale.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices/implementation.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices/implementation.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,51 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Appendix
+ C: Implementation Notes</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="rationale.html" title=" Appendix B:
+ Rationale">
+<link rel="next" href="acknowledgments.html" title=" Appendix
+ D: Acknowledgments">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rationale.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.appendices.implementation"></a><a href="implementation.html" title=" Appendix
+ C: Implementation Notes"> Appendix
+ C: Implementation Notes</a>
+</h3></div></div></div>
+<p>
+ TBC
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="rationale.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="acknowledgments.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices/rationale.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices/rationale.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,50 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Appendix B:
+ Rationale</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="changes.html" title=" Appendix A: History">
+<link rel="next" href="implementation.html" title=" Appendix
+ C: Implementation Notes">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="changes.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.appendices.rationale"></a><a href="rationale.html" title=" Appendix B:
+ Rationale"> Appendix B:
+ Rationale</a>
+</h3></div></div></div>
+<p>
+ TBC
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="changes.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="implementation.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices/tests.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices/tests.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,1663 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Appendix E: Tests</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="acknowledgments.html" title=" Appendix
+ D: Acknowledgments">
+<link rel="next" href="tickets.html" title=" Appendix F: Tickets">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="acknowledgments.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tickets.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.appendices.tests"></a> Appendix E: Tests
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">AE/ACT</span></dt></dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.appendices.tests.ae_act"></a>AE/ACT
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Pool
+ </p>
+ </th>
+<th>
+ <p>
+ BaTh
+ </p>
+ </th>
+<th>
+ <p>
+ ShLa
+ </p>
+ </th>
+<th>
+ <p>
+ ShTh
+ </p>
+ </th>
+<th>
+ <p>
+ UnLa
+ </p>
+ </th>
+<th>
+ <p>
+ UnLa
+ </p>
+ </th>
+<th>
+ <p>
+ Ticket
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ do_test_member_fork
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and get
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_member_fork_m
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and get
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_member_fork_bind
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and get
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_member_fork_bind_m
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and get
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_fork
+ </p>
+ </td>
+<td>
+ <p>
+ Forks a nullary function and get
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_fork_1
+ </p>
+ </td>
+<td>
+ <p>
+ Forks a unary function and get
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_fork_1_m
+ </p>
+ </td>
+<td>
+ <p>
+ Forks a unary function and get
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_creation_through_functor
+ </p>
+ </td>
+<td>
+ <p>
+ Forks a functor
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_creation_through_reference_wrapper
+ </p>
+ </td>
+<td>
+ <p>
+ Forks a reference wrapper
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and waits
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_until
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and waits until a given time
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_for
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and waits for a given time
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_get
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and get
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_all
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and waits all
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_all_until
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and waits all until a given time
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_all_for
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and waits all for a given time
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_set_all
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and get all using set_all
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_get_all
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and get all
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Fail
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_for_all
+ </p>
+ </td>
+<td>
+ <p>
+ wait for all
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_for_any
+ </p>
+ </td>
+<td>
+ <p>
+ waits for any
+ </p>
+ </td>
+<td>
+ <p>
+ Fail
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_wait_for_any_fusion_sequence
+ </p>
+ </td>
+<td>
+ <p>
+ Wait for any in a fusion sequence
+ </p>
+ </td>
+<td>
+ <p>
+ Fail
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_member_fork_detach
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and detach
+ </p>
+ </td>
+<td>
+ <p>
+ Fail
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_thread_interrupts_at_interruption_point
+ </p>
+ </td>
+<td>
+ <p>
+ Interrupt
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_join
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and join
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_join_until
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and joins until a given time
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_join_for
+ </p>
+ </td>
+<td>
+ <p>
+ Forks and joins for a given time
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_join_all
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and join all
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_join_all_until
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and join all until a given time
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_join_all_for
+ </p>
+ </td>
+<td>
+ <p>
+ Forks several and join all for a given time
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ----
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_fork_after_join
+ </p>
+ </td>
+<td>
+ <p>
+ Fork after some dependent ACT and then join
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_fork_after_wait
+ </p>
+ </td>
+<td>
+ <p>
+ Fork after some dependent ACT and then wait
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ do_test_fork_after_get
+ </p>
+ </td>
+<td>
+ <p>
+ Fork after some dependent ACT and then get the value
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ XXXXXXXXXXXXXXXXXXXXXX
+ </p>
+ </td>
+<td>
+ <p>
+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+ </p>
+ </td>
+<td>
+ <p>
+ XXXX
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ ????
+ </p>
+ </td>
+<td>
+ <p>
+ #
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="acknowledgments.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="tickets.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices/tickets.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices/tickets.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,92 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Appendix F: Tickets</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="tests.html" title=" Appendix E: Tests">
+<link rel="next" href="todo.html" title=" Appendix G: Future
+ plans">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tests.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.appendices.tickets"></a> Appendix F: Tickets
+</h3></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<tbody><tr>
+<td>
+ <p>
+ Kind
+ </p>
+ </td>
+<td>
+ <p>
+ Identifier
+ </p>
+ </td>
+<td>
+ <p>
+ Description
+ </p>
+ </td>
+<td>
+ <p>
+ Resolution
+ </p>
+ </td>
+<td>
+ <p>
+ State
+ </p>
+ </td>
+<td>
+ <p>
+ Tests
+ </p>
+ </td>
+<td>
+ <p>
+ Version
+ </p>
+ </td>
+</tr></tbody>
+</table></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tests.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="todo.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/appendices/todo.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/appendices/todo.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,167 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Appendix G: Future
+ plans</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../appendices.html" title="Appendices">
+<link rel="prev" href="tickets.html" title=" Appendix F: Tickets">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tickets.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.appendices.todo"></a><a href="todo.html" title=" Appendix G: Future
+ plans"> Appendix G: Future
+ plans</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review">Tasks
+ to do before review</a></span></dt>
+<dt><span class="section"><a href="todo.html#toward_boost_async.appendices.todo.for_later_releases">For
+ later releases</a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review"></a><a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review" title="Tasks
+ to do before review">Tasks
+ to do before review</a>
+</h4></div></div></div>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.add_an_overloading_for_wait_for_all_in_sequence_ae__f__seq_"></a><h5>
+<a name="id4894972"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.add_an_overloading_for_wait_for_all_in_sequence_ae__f__seq_">Add
+ an overloading for wait_for_all_in_sequence(ae, f, seq)</a>
+ </h5>
+<p>
+ This will be quite useful on recursive algorithms evaluating asynchronously
+ the same function on different parts.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">DirectSolver</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Composer</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">AsynchronousExecutor</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Input</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">inplace_solve</span><span class="special">(</span><span class="identifier">AsynchronousExecutor</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">Problem</span><span class="special">&amp;</span> <span class="identifier">input</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// if (problem is small)
+</span> <span class="keyword">if</span> <span class="special">(</span><span class="identifier">size</span><span class="special">(</span><span class="identifier">range</span><span class="special">)</span> <span class="special">&lt;</span> <span class="identifier">concurrency_threshold</span><span class="special">)</span> <span class="special">{</span>
+ <span class="comment">// directly solve problem
+</span> <span class="identifier">DirectSolver</span><span class="special">()(</span><span class="identifier">input</span><span class="special">);</span>
+ <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
+ <span class="comment">// split problem into independent parts
+</span> <span class="identifier">BOOST_AUTO</span><span class="special">(</span><span class="identifier">partition</span><span class="special">,</span> <span class="identifier">partition_view</span><span class="special">(</span><span class="identifier">input</span><span class="special">));</span>
+ <span class="comment">// evaluates asynchronously inplace_solve on each element of the partition
+</span> <span class="comment">// using the asynchronous executor as scheduler
+</span> <span class="identifier">wait_for_all_in_sequence</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">inplace_solve</span><span class="special">,</span> <span class="identifier">partition</span><span class="special">);</span>
+ <span class="comment">// compose the result in place from subresults
+</span> <span class="identifier">Composer</span><span class="special">()(</span><span class="identifier">partition</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.add_polymorphic_act_and_adapters"></a><h5>
+<a name="id4895384"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.add_polymorphic_act_and_adapters">Add
+ polymorphic act and adapters</a>
+ </h5>
+<p>
+ When we need to chain <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ using the fork_after the nature of the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ can change over time, an why not change also its template parameter. So
+ at least we need to make polymorphic every function used by fork_after.
+ </p>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.complete_the_tests"></a><h5>
+<a name="id4895438"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.complete_the_tests">Complete
+ the tests</a>
+ </h5>
+<p>
+ Even if the current release include some test there is yet a long way before
+ been able to review the library.
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ change the test so they take less time using locks; conditions and variables.
+ </li>
+<li>
+ Complete the test for the AE/ACT framework
+ </li>
+<li>
+ Add test with functions throwing
+ </li>
+</ul></div>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.add_more_examples"></a><h5>
+<a name="id4895484"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.add_more_examples">Add
+ more examples</a>
+ </h5>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.complete_the_reference"></a><h5>
+<a name="id4895509"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.complete_the_reference">Complete
+ the reference</a>
+ </h5>
+<div class="itemizedlist"><ul type="disc"><li>
+ ae/act framework
+ </li></ul></div>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections"></a><h5>
+<a name="id4895542"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.change_the_rational_and_implementation_sections">Change
+ the rational and implementation sections</a>
+ </h5>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.use_boost_chrono"></a><h5>
+<a name="id4895567"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.use_boost_chrono">Use
+ Boost.Chrono</a>
+ </h5>
+<a name="toward_boost_async.appendices.todo.tasks_to_do_before_review.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise"></a><h5>
+<a name="id4895589"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.tasks_to_do_before_review.add_c__0x_move_semantics_on_compilers_supporting_it_and_use_the_boost_move_emulation_otherwise">Add
+ C++0x move semantics on compilers supporting it and use the Boost.Move
+ emulation otherwise</a>
+ </h5>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.appendices.todo.for_later_releases"></a><a href="todo.html#toward_boost_async.appendices.todo.for_later_releases" title="For
+ later releases">For
+ later releases</a>
+</h4></div></div></div>
+<a name="toward_boost_async.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocessor_otherwise"></a><h5>
+<a name="id4895639"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.for_later_releases.use_c__0x_variadic_templates_on_compilers_supporting_it_and_use_the_preprocessor_otherwise">Use
+ C++0x variadic templates on compilers supporting it and use the preprocessor
+ otherwise</a>
+ </h5>
+<a name="toward_boost_async.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise"></a><h5>
+<a name="id4895670"></a>
+ <a href="todo.html#toward_boost_async.appendices.todo.for_later_releases.use_c__0x_concepts_on_compilers_supporting_them_and_use_the_boost_conceptcheck_or_boost_concepttraits_otherwise">Use
+ C++0x Concepts on compilers supporting them and use the Boost.ConceptCheck
+ or Boost.ConceptTraits otherwise</a>
+ </h5>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="tickets.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../appendices.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/examples.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/examples.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,52 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Examples</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../index.html" title="Toward Boost Async">
+<link rel="up" href="../index.html" title="Toward Boost Async">
+<link rel="prev" href="reference/ae_act_models_reference.html" title="AE/ACT
+ Models Reference">
+<link rel="next" href="examples/parallel_sort.html" title="Parallel sort">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/ae_act_models_reference.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="examples/parallel_sort.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_async.examples"></a>Examples
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Parallel sort</span></dt>
+<dt><span class="section"><a href="examples/from_a_single_to_a_multi_threaded_application.html">From
+ a single to a multi threaded application</a></span></dt>
+</dl></div>
+<p>
+ This section do includes complete examples using the library.
+ </p>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="reference/ae_act_models_reference.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="examples/parallel_sort.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/examples/from_a_single_to_a_multi_threaded_application.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/examples/from_a_single_to_a_multi_threaded_application.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,44 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>From
+ a single to a multi threaded application</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../examples.html" title="Examples">
+<link rel="prev" href="parallel_sort.html" title="Parallel sort">
+<link rel="next" href="../appendices.html" title="Appendices">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="parallel_sort.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../appendices.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.examples.from_a_single_to_a_multi_threaded_application"></a><a href="from_a_single_to_a_multi_threaded_application.html" title="From
+ a single to a multi threaded application">From
+ a single to a multi threaded application</a>
+</h3></div></div></div></div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="parallel_sort.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../appendices.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/examples/parallel_sort.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/examples/parallel_sort.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,118 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Parallel sort</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../examples.html" title="Examples">
+<link rel="prev" href="../examples.html" title="Examples">
+<link rel="next" href="from_a_single_to_a_multi_threaded_application.html" title="From
+ a single to a multi threaded application">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../examples.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="from_a_single_to_a_multi_threaded_application.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.examples.parallel_sort"></a>Parallel sort
+</h3></div></div></div>
+<p>
+ Next follows a generic algorithm based on partitioning of a given problem
+ in smaller problems, and compose a solution from the solution of the smaller
+ problems.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">DirectSolver</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Composer</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Range</span>
+<span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">inplace_solve</span><span class="special">(</span> <span class="identifier">AE</span> <span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">Range</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">range</span><span class="special">,</span>
+ <span class="keyword">unsigned</span> <span class="identifier">cutoff</span> <span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">DirectSolver</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Composer</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Range</span>
+<span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">inplace_solve</span><span class="special">(</span> <span class="identifier">AE</span> <span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">Range</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">range</span><span class="special">,</span>
+ <span class="keyword">unsigned</span> <span class="identifier">cutoff</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">unsigned</span> <span class="identifier">size</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">size</span><span class="special">(</span><span class="identifier">range</span><span class="special">);</span>
+ <span class="comment">//std::cout &lt;&lt; "&lt;&lt;par_ " &lt;&lt; size;
+</span> <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">size</span> <span class="special">&lt;=</span> <span class="identifier">cutoff</span><span class="special">)</span> <span class="identifier">DirectSolver</span><span class="special">()(</span><span class="identifier">range</span><span class="special">);</span>
+ <span class="keyword">else</span> <span class="special">{</span>
+ <span class="identifier">partition</span><span class="special">&lt;</span><span class="identifier">Range</span><span class="special">&gt;</span> <span class="identifier">parts</span><span class="special">(</span><span class="identifier">range</span><span class="special">,</span> <span class="identifier">BOOST_PARTS</span><span class="special">);</span>
+
+ <span class="comment">// wait_for_all_in_sequence(ae, &amp;inplace_solve&lt;DirectSolver,Composer,AE,Range&gt;, parts);
+</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">list</span><span class="special">&lt;</span><span class="identifier">task_type</span><span class="special">&gt;</span> <span class="identifier">tasks</span><span class="special">;</span>
+ <span class="keyword">for</span> <span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span><span class="special">=</span><span class="number">0</span><span class="special">;</span><span class="identifier">i</span> <span class="special">&lt;</span> <span class="identifier">BOOST_PARTS</span><span class="special">-</span><span class="number">1</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">task_type</span> <span class="identifier">tmp</span><span class="special">(</span><span class="identifier">ae</span><span class="special">.</span><span class="identifier">submit</span><span class="special">(</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span>
+ <span class="special">&amp;</span><span class="identifier">inplace_solve</span><span class="special">&lt;</span><span class="identifier">DirectSolver</span><span class="special">,</span><span class="identifier">Composer</span><span class="special">,</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">Range</span><span class="special">&gt;,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">ae</span><span class="special">),</span>
+ <span class="identifier">parts</span><span class="special">[</span><span class="identifier">i</span><span class="special">],</span>
+ <span class="identifier">cutoff</span>
+ <span class="special">)));</span>
+ <span class="identifier">tasks</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">tmp</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="identifier">inplace_solve</span><span class="special">&lt;</span><span class="identifier">DirectSolver</span><span class="special">,</span><span class="identifier">Composer</span><span class="special">,</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">Range</span><span class="special">&gt;(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">parts</span><span class="special">[</span><span class="identifier">BOOST_PARTS</span><span class="special">-</span><span class="number">1</span><span class="special">],</span> <span class="identifier">cutoff</span><span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">tasks</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">async</span><span class="special">::</span><span class="identifier">wait_act</span><span class="special">&lt;</span><span class="identifier">task_type</span><span class="special">&gt;);</span>
+ <span class="comment">// wait_for_all_in_sequence
+</span>
+ <span class="identifier">Composer</span><span class="special">()(</span><span class="identifier">range</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">}</span>
+</pre>
+<p>
+ So parallel sort could be
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">sort_fct</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">RandomAccessRange</span><span class="special">&gt;</span>
+ <span class="identifier">RandomAccessRange</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">RandomAccessRange</span> <span class="identifier">rng</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sort</span><span class="special">(</span><span class="identifier">rng</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+
+<span class="keyword">struct</span> <span class="identifier">inplace_merge_fct</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">BidirectionalRange</span><span class="special">&gt;</span>
+ <span class="identifier">BidirectionalRange</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">()(</span> <span class="identifier">BidirectionalRange</span> <span class="identifier">rng</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">inplace_merge</span><span class="special">(</span><span class="identifier">rng</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">begin</span><span class="special">(</span><span class="identifier">rng</span><span class="special">)+(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">size</span><span class="special">(</span><span class="identifier">rng</span><span class="special">)/</span><span class="number">2</span><span class="special">));</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Range</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="identifier">parallel_sort</span><span class="special">(</span><span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">Range</span><span class="special">&amp;</span> <span class="identifier">range</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">cutoff</span><span class="special">=</span><span class="number">10000</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">iterator_range</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">range_iterator</span><span class="special">&lt;</span><span class="identifier">Range</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">rng</span><span class="special">(</span><span class="identifier">range</span><span class="special">);</span>
+ <span class="identifier">inplace_solve</span><span class="special">&lt;</span><span class="identifier">sort_fct</span><span class="special">,</span><span class="identifier">inplace_merge_fct</span><span class="special">,</span><span class="identifier">pool_type</span><span class="special">,</span><span class="identifier">Range</span><span class="special">&gt;(</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">rng</span><span class="special">,</span> <span class="identifier">cutoff</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../examples.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="from_a_single_to_a_multi_threaded_application.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/overview.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/overview.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,194 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Overview</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../index.html" title="Toward Boost Async">
+<link rel="up" href="../index.html" title="Toward Boost Async">
+<link rel="prev" href="../index.html" title="Toward Boost Async">
+<link rel="next" href="overview/motivation.html" title=" Motivation">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="overview/motivation.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_async.overview"></a> Overview
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Motivation</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="overview/motivation.html#toward_boost_async.overview.motivation.asynchronous_executors_and_asynchronous_completion_token_handles">Asynchronous
+ Executors and Asynchronous Completion Token Handles</a></span></dt>
+<dt><span class="section">Threader/Joiner</span></dt>
+</dl></dd>
+</dl></div>
+<a name="toward_boost_async.overview.description"></a><h3>
+<a name="id4803159"></a>
+ Description
+ </h3>
+<p>
+ Boost.Async is a C++ library to allow the calling of functions and functors
+ in an asynchronous manner, thereby making it easier to improve the level of
+ concurrency and parallelism in your applications. It provides:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ An asynchronous execution framework working with <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ It includes some generic functions and several <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>:
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ fork and fork_all to execute asynchronously functions
+ </li>
+<li>
+ fork_after: request an <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ to execute a function asynchronously once each one of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the dependency tuple parameter are ready. It is similar to the async_with_dependencies
+ proposed Peter Dimov.
+ </li>
+<li>
+ generic get, join, ... free functions to synchronize on an <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+</li>
+<li>
+ generic get_all, join_all, ... free functions to synchronize on multiple
+ <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+</li>
+<li>
+ generic wait_for_all, wait_for_any to execute asynchronously functions
+ and wait for the completion of all or any of them.
+ </li>
+</ul></div>
+</li>
+<li>
+ Some <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ models
+ <div class="itemizedlist"><ul type="circle">
+<li>
+ immediate executors: executes synchronously a function on the current
+ thread. Often used for test purposes
+ </li>
+<li>
+ basic_threader: can be seen as a thread factory executing asynchronously
+ a function on the returned thread.
+ </li>
+<li>
+ launchers: Lanchers can be seen as a future factory executing asynchronously
+ a function on a hidden thread.
+ </li>
+<li>
+ threader/joiner: A Threader runs a unary function in its own thread.
+ A Threader can be seen as a Joiner factory executing asynchronously a
+ function on a thread encapsulated on the returned Joiner. The joiner
+ is used to synchronize with and pick up the result from a function or
+ to manage the encapsulated thread.
+ </li>
+<li>
+<code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span></code> and <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">task</span></code>
+ customization as an <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ and an <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ respectively. <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span></code> can be seen as a <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">task</span></code> factory executing asynchronously
+ a function on a pool of threads.
+ </li>
+<li>
+ a generic asynchronous_executor_decorator which allows to decorate the
+ function to be evaluated asynchronously.
+ </li>
+</ul></div>
+</li>
+</ul></div>
+<p>
+ References
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ The threader-joiner classes are based on the original idea of Kevlin Henney
+ <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1883.pdf" target="_top">N1833
+ - Preliminary Threading Library Proposal for TR2</a>
+</li></ul></div>
+<a name="toward_boost_async.overview.how_to_use_this_documentation"></a><h3>
+<a name="id4764943"></a>
+ <a href="overview.html#toward_boost_async.overview.how_to_use_this_documentation">How
+ to Use This Documentation</a>
+ </h3>
+<p>
+ This documentation makes use of the following naming and formatting conventions.
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Code is in <code class="computeroutput"><span class="identifier">fixed</span> <span class="identifier">width</span>
+ <span class="identifier">font</span></code> and is syntax-highlighted.
+ </li>
+<li>
+ Replaceable text that you will need to supply is in
+ <em class="replaceable"><code>
+ italics
+ </code></em>
+ .
+ </li>
+<li>
+ If a name refers to a free function, it is specified like this: <code class="computeroutput"><span class="identifier">free_function</span><span class="special">()</span></code>;
+ that is, it is in code font and its name is followed by <code class="computeroutput"><span class="special">()</span></code>
+ to indicate that it is a free function.
+ </li>
+<li>
+ If a name refers to a class template, it is specified like this: <code class="computeroutput"><span class="identifier">class_template</span><span class="special">&lt;&gt;</span></code>;
+ that is, it is in code font and its name is followed by <code class="computeroutput"><span class="special">&lt;&gt;</span></code>
+ to indicate that it is a class template.
+ </li>
+<li>
+ If a name refers to a function-like macro, it is specified like this: <code class="computeroutput"><span class="identifier">MACRO</span><span class="special">()</span></code>;
+ that is, it is uppercase in code font and its name is followed by <code class="computeroutput"><span class="special">()</span></code> to indicate that it is a function-like
+ macro. Object-like macros appear without the trailing <code class="computeroutput"><span class="special">()</span></code>.
+ </li>
+<li>
+ Names that refer to <span class="emphasis"><em>concepts</em></span> in the generic programming
+ sense are specified in CamelCase.
+ </li>
+</ul></div>
+<div class="note"><table border="0" summary="Note">
+<tr>
+<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../doc/html/images/note.png"></td>
+<th align="left">Note</th>
+</tr>
+<tr><td align="left" valign="top"><p>
+ In addition, notes such as this one specify non-essential information that
+ provides additional background or rationale.
+ </p></td></tr>
+</table></div>
+<p>
+ Finally, you can mentally add the following to any code fragments in this document:
+ </p>
+<pre class="programlisting"><span class="comment">// Include all of Async
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">async</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="comment">// Create a namespace aliases
+</span><span class="keyword">namespace</span> <span class="identifier">basync</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">async</span><span class="special">;</span>
+</pre>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../index.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="overview/motivation.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/overview/motivation.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/overview/motivation.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,740 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Motivation</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../overview.html" title=" Overview">
+<link rel="prev" href="../overview.html" title=" Overview">
+<link rel="next" href="../users_guide.html" title=" Users'Guide">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../overview.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../users_guide.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.overview.motivation"></a> Motivation
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="motivation.html#toward_boost_async.overview.motivation.asynchronous_executors_and_asynchronous_completion_token_handles">Asynchronous
+ Executors and Asynchronous Completion Token Handles</a></span></dt>
+<dt><span class="section">Threader/Joiner</span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.overview.motivation.asynchronous_executors_and_asynchronous_completion_token_handles"></a><a href="motivation.html#toward_boost_async.overview.motivation.asynchronous_executors_and_asynchronous_completion_token_handles" title="Asynchronous
+ Executors and Asynchronous Completion Token Handles">Asynchronous
+ Executors and Asynchronous Completion Token Handles</a>
+</h4></div></div></div>
+<p>
+ In <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1883.pdf" target="_top">N1833
+ - Preliminary Threading Library Proposal for TR2</a> Kevlin Henney
+ introduces the concept of <code class="computeroutput"><span class="identifier">threader</span></code>
+ an asynchronous executor and a function <code class="computeroutput"><span class="identifier">thread</span><span class="special">()</span></code> that evaluates a function asynchronously
+ and returns an asynchronous completion token <code class="computeroutput"><span class="identifier">joiner</span></code>,
+ able to join but also to get the value of the function result.
+ </p>
+<p>
+ In <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2185.html" target="_top">N2185
+ - Proposed Text for Parallel Task Execution</a> Peter Dimov introduces
+ a <code class="computeroutput"><span class="identifier">fork</span><span class="special">()</span></code>
+ function able to evaluate a function asynchronously and returns a <code class="computeroutput"><span class="identifier">future</span></code> handle.
+ </p>
+<p>
+ In <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2276.html" target="_top">N2276
+ - Thread Pools and Futures</a> Anthony William introduces <code class="computeroutput"><span class="identifier">launch_in_thread</span></code> and <code class="computeroutput"><span class="identifier">launch_in_pool</span></code>
+ function templates which evaluates a function asynchronously either in
+ a specific <code class="computeroutput"><span class="identifier">thread</span></code> or a
+ thread pool and returns a <code class="computeroutput"><span class="identifier">unique_future</span></code>
+ handle.
+ </p>
+<p>
+ In Boost.ThreadPool
+ Oliver Kowalke proposes a complete implementation of a thread <code class="computeroutput"><span class="identifier">pool</span></code> with a <code class="computeroutput"><span class="identifier">submit</span><span class="special">()</span></code> function which evaluates a function asynchronously
+ and returns a <code class="computeroutput"><span class="identifier">task</span></code> handle.
+ </p>
+<p>
+ Behind all these proposals there is a concept of asynchronous executor,
+ fork-like function and the asynchronous completion token handle.
+ </p>
+<div class="table">
+<a name="id4765459"></a><p class="title"><b>Table 1. AE/ACT/fork-like relationship</b></p>
+<table class="table" summary="AE/ACT/fork-like relationship">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Proposal</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>executor</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>fork-like</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>ACT handle</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ Boost.Thread
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">thread</span></code> class
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">thread</span><span class="special">()</span></code>
+ constructor
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ Boost.ThreadPool
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">submit</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">task</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ N2276
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">launch_in_thread</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ N2276
+ </p>
+ </td>
+<td>
+ <p>
+ thread_pool
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">launch_in_pool</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ N2185
+ </p>
+ </td>
+<td>
+ <p>
+ thread pool
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">fork</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ N1833
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">threader</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">thread</span><span class="special">()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">joiner</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<p>
+ The asynchronous completion token models can follow two interfaces, the
+ thread interface and the future interface. Some asynchronous completion
+ tokens handle allow to recover the result of the evaluation of the function,
+ others allow to manage the underlying thread of execution.
+ </p>
+<p>
+ It seems natural to make a generic <span class="underline">_fork</span>_
+ function that will evaluate a function asynchronously with respect to the
+ calling thread and returns an ACT handle. The following meta-function associates
+ an ACT handle to an asynchronous executor.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">asynchronous_completion_token</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">handle</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ The result of forking a nullary function by an asynchronous executor is
+ given by the metafunction result_of::fork&lt;AE,F&gt;
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">__c_fork__</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">result_type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The default implementation of fork delegates on fork asynchronous executor
+ function.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span> <span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">fork</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">ae</span><span class="special">.</span><span class="identifier">fork</span><span class="special">(</span><span class="identifier">fn</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Forking n-ary functions rely on the nullary version and bind.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">An</span> <span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">(</span><span class="identifier">A1</span><span class="special">,...,</span> <span class="identifier">An</span><span class="special">)&gt;::</span><span class="identifier">type</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">fork</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span> <span class="identifier">an</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">ae</span><span class="special">.</span><span class="identifier">fork</span><span class="special">(</span> <span class="identifier">bind</span><span class="special">(</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">an</span> <span class="special">)</span> <span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ We can define a basic_threader which just returns a new thread as follows:
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">basic_threader</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">{</span>
+ <span class="identifier">thread</span> <span class="identifier">th</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span>
+ <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">th</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ The library includes also a launcher class that creates a thread and returns
+ a unique_future when forking
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">launcher</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+ <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="identifier">packaged_task</span><span class="special">&lt;</span><span class="identifier">result_type</span><span class="special">&gt;</span> <span class="identifier">tsk</span><span class="special">(</span><span class="identifier">f</span><span class="special">);</span>
+ <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">result_type</span><span class="special">&gt;</span> <span class="identifier">res</span> <span class="special">=</span> <span class="identifier">tsk</span><span class="special">.</span><span class="identifier">get_future</span><span class="special">();</span>
+ <span class="identifier">thread</span> <span class="identifier">th</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span><span class="identifier">tsk</span><span class="special">));</span>
+ <span class="keyword">return</span> <span class="identifier">res</span><span class="special">;</span>
+ <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ and a shared_launcher class that creates a thread and returns a shared_future
+ when forking.
+ </p>
+<p>
+ Given the sequential example:
+ </p>
+<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">f</span><span class="special">(</span> <span class="keyword">double</span> <span class="identifier">a</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">n</span> <span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">r</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
+
+ <span class="keyword">for</span><span class="special">(</span> <span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;=</span> <span class="identifier">n</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span>
+ <span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">x</span> <span class="special">=</span> <span class="number">1.0</span> <span class="special">/</span> <span class="identifier">i</span><span class="special">;</span>
+ <span class="identifier">r</span> <span class="special">+=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pow</span><span class="special">(</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">a</span> <span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="keyword">return</span> <span class="identifier">r</span><span class="special">;</span>
+<span class="special">}</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="keyword">double</span> <span class="identifier">m1</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">(</span> <span class="number">1.0</span><span class="special">,</span> <span class="number">1000000</span> <span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">m2</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">(</span> <span class="number">1.0</span><span class="special">,</span> <span class="number">5000000</span> <span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">m3</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">(</span> <span class="number">2.2</span><span class="special">,</span> <span class="number">1000000</span> <span class="special">);</span>
+ <span class="keyword">double</span> <span class="identifier">m4</span> <span class="special">=</span> <span class="identifier">f</span><span class="special">(</span> <span class="number">2.2</span><span class="special">,</span> <span class="number">5000000</span> <span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">m2</span> <span class="special">-</span> <span class="identifier">m1</span> <span class="special">+</span> <span class="identifier">m3</span> <span class="special">-</span> <span class="identifier">m4</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The library allows a programmer to switch to parallel execution as follows:
+ </p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">launcher</span> <span class="identifier">l</span><span class="special">;</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">fm1</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">1.0</span><span class="special">,</span> <span class="number">1000000</span> <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">fm2</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">1.0</span><span class="special">,</span> <span class="number">5000000</span> <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">fm3</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">2.2</span><span class="special">,</span> <span class="number">1000000</span> <span class="special">);</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">fm4</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">2.2</span><span class="special">,</span> <span class="number">5000000</span> <span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">fm2</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">-</span> <span class="identifier">fm1</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">fm3</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">-</span> <span class="identifier">fm4</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The question now is how we can adapt the example to an existing asynchronous
+ executor such as the Boost.ThreadPool library. We need to specialize the
+ template class asynchronous_completion_token to state which is the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> associate
+ to the <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Channel</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;</span><span class="identifier">Channel</span><span class="special">&gt;,</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">task</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+
+<span class="special">}}</span>
+</pre>
+<p>
+ and also to specialize the fork function as the default one requires a
+ fork member function and <code class="computeroutput"><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span></code>
+ provides a <code class="computeroutput"><span class="identifier">submit</span><span class="special">()</span></code>
+ member function`
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Channel</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span> <span class="special">&gt;</span>
+<span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;</span><span class="identifier">Channel</span><span class="special">&gt;,</span> <span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;</span><span class="identifier">Channel</span><span class="special">&gt;,</span><span class="identifier">F</span><span class="special">&gt;(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;</span><span class="identifier">Channel</span><span class="special">&gt;&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">ae</span><span class="special">.</span><span class="identifier">submit</span><span class="special">(</span><span class="identifier">fn</span><span class="special">);</span>
+<span class="special">}</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Evidently these specializations must be done on the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">async</span></code>
+ namespace.
+ </p>
+<p>
+ As the preceding is ilegal in C++03 we need to use an auxiliary class to
+ define the default behaviour of the fork function
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span><span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">ae</span><span class="special">.</span><span class="identifier">fork</span><span class="special">(</span><span class="identifier">fn</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span> <span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">fork</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span><span class="identifier">fn</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ And specialize partially the partial_specialization_workaround::fork class
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Channel</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;</span><span class="identifier">Channel</span><span class="special">&gt;,</span><span class="identifier">F</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;</span><span class="identifier">Channel</span><span class="special">&gt;,</span> <span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;</span><span class="identifier">Channel</span><span class="special">&gt;&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">ae</span><span class="special">.</span><span class="identifier">submit</span><span class="special">(</span><span class="identifier">fn</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+<span class="special">}}</span>
+</pre>
+<p>
+ Note that only the <span class="underline">_fork</span>_ function
+ needs to be specialized. The library provides the other overloadings.
+ </p>
+<p>
+ We can write the preceding main function in a more generic way
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">&gt;</span>
+<span class="keyword">void</span> <span class="keyword">do</span><span class="special">(</span><span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">)</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(*)(</span><span class="keyword">double</span><span class="special">,</span> <span class="keyword">int</span><span class="special">)</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">auto_type</span><span class="special">;</span>
+ <span class="identifier">auto_type</span> <span class="identifier">fm1</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">1.0</span><span class="special">,</span> <span class="number">1000000</span> <span class="special">);</span>
+ <span class="identifier">auto_type</span> <span class="identifier">fm2</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">1.0</span><span class="special">,</span> <span class="number">5000000</span> <span class="special">);</span>
+ <span class="identifier">auto_type</span> <span class="identifier">fm3</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">2.2</span><span class="special">,</span> <span class="number">1000000</span> <span class="special">);</span>
+ <span class="identifier">auto_type</span> <span class="identifier">fm4</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">2.2</span><span class="special">,</span> <span class="number">5000000</span> <span class="special">);</span>
+
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">fm2</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">-</span> <span class="identifier">fm1</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">fm3</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">-</span> <span class="identifier">fm4</span><span class="special">.</span><span class="identifier">get</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+<span class="special">}</span>
+
+<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">launcher</span> <span class="identifier">ae</span><span class="special">;</span>
+ <span class="keyword">do</span><span class="special">(</span><span class="identifier">ae</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ and we can switch from using the launcher or the tp::pool just by changing
+ one line
+ </p>
+<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
+<span class="special">{</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">pool</span><span class="special">&lt;&gt;</span> <span class="identifier">ae</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">tp</span><span class="special">::</span><span class="identifier">poolsize</span><span class="special">(</span><span class="number">6</span><span class="special">))</span>
+ <span class="keyword">do</span><span class="special">(</span><span class="identifier">ae</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<p>
+ Instead of defining a type, the user can make use of BOOST_AUTO once the
+ associated files included on the threadpool sub-directory.
+ </p>
+<pre class="programlisting"><span class="identifier">BOOST_AUTO</span><span class="special">(</span><span class="identifier">fm1</span><span class="special">,</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="number">1.0</span><span class="special">,</span> <span class="number">1000000</span> <span class="special">));</span>
+</pre>
+<p>
+ As a extreme case the library provides a immediate executor which allows
+ to execute synchronously the function on the current thread. This can be
+ used for test purposes. Note that this executor can not be used when there
+ are dependencies between the children <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ and the parent <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<p>
+ The library allows also to fork several functions at one time
+ </p>
+<pre class="programlisting"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">type</span> <span class="identifier">handles</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">h</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">res</span><span class="special">).</span><span class="identifier">get</span><span class="special">()</span> <span class="special">-</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">res</span><span class="special">).</span><span class="identifier">get</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;(</span><span class="identifier">res</span><span class="special">).</span><span class="identifier">get</span><span class="special">()</span> <span class="special">&lt;&
lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ The result of the fork_all operation is a fusion tuple of asynchronous
+ completion token handles. The user can apply any fusion algorithm on this
+ tuple as for example
+ </p>
+<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">b</span> <span class="special">=</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">none</span><span class="special">(</span><span class="identifier">handles</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">interruption_requested</span><span class="special">());</span>
+</pre>
+<p>
+ The asynchronous completion token models follows two interfaces, the thread
+ interface and the unique_/shared_future interface.
+ </p>
+<p>
+ To make common tasks easier the library provides some functors in the name
+ space fct: for the thread interface as
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ fct::join
+ </li>
+<li>
+ fct::join_until
+ </li>
+<li>
+ fct::join_for
+ </li>
+<li>
+ fct::detach
+ </li>
+<li>
+ fct::interrupt
+ </li>
+<li>
+ fct::interrupt_requested
+ </li>
+</ul></div>
+<p>
+ and for the future operations as
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ fct::get
+ </li>
+<li>
+ fct::wait
+ </li>
+<li>
+ fct::wait_until
+ </li>
+<li>
+ fct::wait_for
+ </li>
+<li>
+ fct::is_ready
+ </li>
+<li>
+ fct::has_value
+ </li>
+<li>
+ fct::has_exception
+ </li>
+</ul></div>
+<p>
+ Here is an example for get:
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">get</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">::</span><span class="identifier">result_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">get</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ In addition the library provides some non member functions that are the
+ result of applying these functors to the tuple using a fusion algorithm:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ join_all
+ </li>
+<li>
+ join_all_until
+ </li>
+<li>
+ join_all_for
+ </li>
+<li>
+ detach_all
+ </li>
+<li>
+ interrupt_all
+ </li>
+<li>
+ interrupt_requested_on_all
+ </li>
+<li>
+ get_all
+ </li>
+<li>
+ wait_all
+ </li>
+<li>
+ wait_all_until
+ </li>
+<li>
+ wait_all_for
+ </li>
+<li>
+ are_all_ready
+ </li>
+<li>
+ have_all_value
+ </li>
+<li>
+ have_all_exception
+ </li>
+</ul></div>
+<p>
+ Next follows how get_all is defined.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">MovableTuple</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">get_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">transform</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">get</span><span class="special">());</span>
+<span class="special">}</span>
+</pre>
+<p>
+ The library defines in a systematic way the result_of of a function as
+ a metafunction having the same name as the function on the namespace result_of,
+ as the Boost.Fusion library does.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">get_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">transform</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">get</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<p>
+ So the user can do the following
+ </p>
+<pre class="programlisting"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">type</span> <span class="identifier">res</span> <span class="special">=</span>
+ <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">h</span><span class="special">);</span>
+<span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">values</span> <span class="special">=</span>
+ <span class="identifier">basync</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">(</span><span class="identifier">handles</span><span class="special">);</span>
+</pre>
+<p>
+ or using a typedef
+ </p>
+<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">type</span> <span class="identifier">auto_type</span><span class="special">;</span>
+<span class="identifier">auto_type</span> <span class="identifier">handles</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">h</span><span class="special">);</span>
+<span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">auto_type</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">values</span><span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">(</span><span class="identifier">handles</span><span class="special">);</span>
+</pre>
+<p>
+ Note that the notation can be shortened by using the C++0x auto keyword.
+ </p>
+<pre class="programlisting"><span class="keyword">auto</span> <span class="identifier">res</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">h</span><span class="special">);</span>
+<span class="keyword">auto</span> <span class="identifier">values</span> <span class="special">=</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">(</span><span class="identifier">handles</span><span class="special">);</span>
+</pre>
+<p>
+ or using BOOST_AUTO
+ </p>
+<pre class="programlisting"><span class="identifier">BOOST_AUTO</span><span class="special">(</span><span class="identifier">res</span><span class="special">,</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">h</span><span class="special">));</span>
+<span class="identifier">BOOST_AUTO</span><span class="special">(</span><span class="identifier">values</span><span class="special">,</span> <span class="identifier">basync</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">(</span><span class="identifier">handles</span><span class="special">));</span>
+</pre>
+<p>
+ Last but not least the library provides also some sugaring functions like
+ wait_for_all that forks and wait for the completion of all the functions.
+ </p>
+<pre class="programlisting"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">type</span> <span class="identifier">res</span> <span class="special">=</span>
+ <span class="identifier">basync</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">h</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;(</span><span class="identifier">res</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;(</span><span class="identifier">res</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;(</span><span class="identifier">res</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ and wait_for_any, which works only with functions that return the same
+ type or are convertible to the same type, and return the index and the
+ value of any of the completed functions.
+ </p>
+<pre class="programlisting"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_any</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)(),</span> <span class="keyword">int</span><span class="special">(*)()&gt;::</span><span class="identifier">type</span> <span class="identifier">res</span> <span class="special">=</span>
+ <span class="identifier">basync</span><span class="special">::</span><span class="identifier">wait_for_any</span><span class="special">(</span><span class="identifier">ae</span><span class="special">,</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">g</span><span class="special">,</span> <span class="identifier">h</span><span class="special">);</span>
+<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"function "</span> <span class="special">&lt;&lt;</span> <span class="identifier">res</span><span class="special">.</span><span class="identifier">first</span>
+ <span class="special">&lt;&lt;</span> <span class="string">" finshed first with result="</span> <span class="special">&lt;&lt;</span> <span class="identifier">res</span><span class="special">.</span><span class="identifier">second</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
+</pre>
+<p>
+ The current implementation use the wait_for_any function so any AE must
+ provide a way to get a unique|shared_future from its <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<p>
+ The library defines a functor allowing the user to specialize it
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">get_future</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;&amp;</span> <span class="keyword">operator</span><span class="special">()(</span><span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span>
+ <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">get_future</span><span class="special">();</span> <span class="special">}</span>
+<span class="special">};</span>
+</pre>
+<p>
+ Resuming a simple way to define a new AsynchronousExecutor is to define
+ a class as
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">AsynchronousExecutor</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">implementation</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span><span class="special">-</span><span class="identifier">modeling</span><span class="special">-</span><span class="identifier">a</span><span class="special">-</span><span class="identifier">ACT</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">handle</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.overview.motivation.threader_joiner"></a>Threader/Joiner
+</h4></div></div></div>
+<p>
+ See the <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1883.pdf" target="_top">N1833
+ - Preliminary Threading Library Proposal for TR2</a> where Kevlin Henney
+ introduces the concept of threader as an asynchronous executor and a function
+ thread that evaluates a function asynchronously and returns an asynchronous
+ completion token joiner, able to join but also to get the value of the
+ function result.
+ </p>
+<p>
+ The main specificity is that here we make a difference between unique_joiner
+ (move-only) and shared_joiner and as consequence unique_threader and shared_threader.
+ </p>
+<p>
+ The second specificity concerns the fact joiners can detach, terminate,
+ ... on destruction.
+ </p>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="../overview.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../users_guide.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/reference.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/reference.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,94 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title> Reference</title>
+<link rel="stylesheet" href="../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../index.html" title="Toward Boost Async">
+<link rel="up" href="../index.html" title="Toward Boost Async">
+<link rel="prev" href="users_guide/glossary.html" title=" Glossary">
+<link rel="next" href="reference/concepts.html" title="Concepts">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="users_guide/glossary.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference/concepts.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="toward_boost_async.reference"></a> Reference
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">Concepts</span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/concepts.html#toward_boost_async.reference.concepts.asynchronous_completion_token_concepts">Asynchronous
+ Completion Token Concepts</a></span></dt>
+<dt><span class="section"><a href="reference/concepts.html#toward_boost_async.reference.concepts.asynchronous_executors_concepts">Asynchronous
+ Executors Concepts</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/ae_act_framework_reference.html">AE/ACT
+ Framework Reference</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.act_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">act_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations">AE
+ operations</a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.algorithm_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations">Future
+ based ACT operations</a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations">Thread
+ based ACT operations</a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html">AE/ACT
+ Models Reference</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.future_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">future_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">immediate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.basic_threader_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">basic_threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">launcher</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.scheduler_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">scheduler</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_futures_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">future</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_launcher_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">launcher</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_threader_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_basic_threaderr_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">basic_threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_scheduler_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">scheduler</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="reference/ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.asynchronous_executor_decorator_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">asynchronous_executor_decorator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></dd>
+</dl></div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="users_guide/glossary.html"><img src="../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="reference/concepts.html"><img src="../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/reference/ae_act_framework_reference.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/reference/ae_act_framework_reference.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,2965 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AE/ACT
+ Framework Reference</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../reference.html" title=" Reference">
+<link rel="prev" href="concepts.html" title="Concepts">
+<link rel="next" href="ae_act_models_reference.html" title="AE/ACT
+ Models Reference">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concepts.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="ae_act_models_reference.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference"></a><a href="ae_act_framework_reference.html" title="AE/ACT
+ Framework Reference">AE/ACT
+ Framework Reference</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.act_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">act_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations">AE
+ operations</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_after</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_any</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.algorithm_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations">Future
+ based ACT operations</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.is_ready_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">is_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_value_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_exception_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.are_all_ready_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_value_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_all_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_exception_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_some_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations">Thread
+ based ACT operations</a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.joinable_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.are_all_joinable_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_on_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested_on_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></dd>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.act_traits_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.act_traits_hpp" title="
+ Header &lt;boost/async/act_traits.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">act_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Includes all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ and <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ traits.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+<span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_movable</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_future_if</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_thread_if</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">asynchronous_completion_token</span><span class="special">;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">get_future</span><span class="special">;</span>
+
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations" title="AE
+ operations">AE
+ operations</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_after</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_any</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp" title="
+ Header &lt;boost/async/fork.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp.metafunction__result_of__fork_ae_f___">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp.non_member_function__fork___">Non
+ member function <code class="computeroutput"><span class="identifier">fork</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">An</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">(</span><span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span><span class="special">)&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">An</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">(</span><span class="identifier">A1</span><span class="special">,...,</span> <span class="identifier">An</span><span class="special">)&gt;::</span><span class="identifier">type</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">fork</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span> <span class="identifier">an</span> <span class="special">);</span>
+
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">An</span> <span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">default_asynchronous_executor</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">(</span><span class="identifier">A1</span><span class="special">,...,</span> <span class="identifier">An</span><span class="special">)&gt;::</span><span class="identifier">type</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">fork</span><span class="special">(</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span> <span class="identifier">an</span> <span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp.metafunction__result_of__fork_ae_f___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp.metafunction__result_of__fork_ae_f___" title="Metafunction
+ result_of::fork&lt;AE,F&gt; ">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;</span> </code></a>
+</h6></div></div></div>
+<p>
+ A metafunction returning the result type of applying <span class="underline">_fork</span>_
+ to an asynchronous executor and a Nullary functor.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">An</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">(</span><span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span><span class="special">)&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="table">
+<a name="id4830920"></a><p class="title"><b>Table 2. fork Parameters</b></p>
+<table class="table" summary="fork Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">F</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Ak</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ n-ary function argument type for argument k
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ result_of::fork&lt;AE,F,A1,...,An&gt;::type
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ AE::handle&lt;typename result_of&lt;F(A1,...,An)&gt; &gt;::type
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp.non_member_function__fork___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_hpp.non_member_function__fork___" title="Non
+ member function fork()">Non
+ member function <code class="computeroutput"><span class="identifier">fork</span><span class="special">()</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span> <span class="special">,</span> <span class="special">...</span> <span class="keyword">typename</span> <span class="identifier">An</span> <span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">,</span> <span class="identifier">A1</span><span class="special">,</span> <span class="identifier">An</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">fork</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="identifier">a1</span> <span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span> <span class="identifier">an</span> <span class="special">);</span>
+</pre>
+<div class="table">
+<a name="id4831417"></a><p class="title"><b>Table 3. fork Parameters</b></p>
+<table class="table" summary="fork Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">F</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Ak</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ n-ary function argument type for argument k
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Requires:</span></dt>
+<dd><p>
+ The expression fn(a1, ..., an) must be valid and have a type convertible
+ to R, where R is typename result_of&lt;F(A1, ..., An)&gt;::type..
+ </p></dd>
+<dt><span class="term">Efect:</span></dt>
+<dd><p>
+ Request the <code class="computeroutput"><span class="identifier">AE</span></code>
+ to creates a thread of execution for the function <code class="computeroutput"><span class="identifier">fn</span></code> Request the asynchronous evaluation
+ the expression <code class="computeroutput"><span class="identifier">fn</span><span class="special">(</span><span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span>
+ <span class="identifier">an</span><span class="special">)</span></code>
+ with respect to the calling thread to the asynchronous executor
+ <code class="computeroutput"><span class="identifier">ae</span></code> and places its
+ result in an object h of type AE::handle&lt;R&gt;::type as if by
+ using h.set_value( fn(a1, ..., an) ). If the expression fn() throws
+ an exception e, places e into h as if by using h.set_exception(
+ current_exception() ).
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the AE handle h.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp" title="
+ Header &lt;boost/async/fork_after.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_after</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.partial_specialization_template_class__act_traits_act_wrapper_act___">Partial
+ Specialization Template Class <code class="computeroutput"><span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.partial_specialization_template_class__is_movable_act_wrapper_act____">Partial
+ Specialization Template Class <code class="computeroutput"><span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.template_class__act_wrapper___">Template
+ Class <code class="computeroutput"><span class="identifier">act_wrapper</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.metafunction__result_of__fork_ae_f___">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.static_member_function__partial_specialization_workaround__fork_after____apply___">Static
+ Member Function <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">fork_after</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.non_member_function__fork_after___">Non
+ member function <code class="computeroutput"><span class="identifier">fork_after</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.non_member_function__after_completion_fork___">Non
+ member function <code class="computeroutput"><span class="identifier">after_completion_fork</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">fork_after</span></code>
+ which request the asynchronous evaluation a function with respect to
+ the calling thread to the asynchronous executor <code class="computeroutput"><span class="identifier">ae</span></code>
+ after the completion of some <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ The result is an <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ wrapping the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ associated to the <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>.
+ </p>
+<p>
+ The default implementation forks a helper task which waits the completion
+ of the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ 's only then evaluates the function. A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code> could want to
+ specialize the <code class="computeroutput"><span class="identifier">fork_after</span></code>
+ free function. As for the moment we can not partially specialize a function
+ a trick is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">fork_after</span></code>
+ member function <code class="computeroutput"><span class="identifier">fork_after</span></code>
+ calls to the static operation <code class="computeroutput"><span class="identifier">apply</span></code>
+ on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;;</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_wrapper</span><span class="special">;</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_after</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_after</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_after</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span><span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_after</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">fork_after</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">An</span> <span class="special">&gt;</span>
+ <span class="identifier">act_wrapper</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">(</span><span class="identifier">A1</span><span class="special">,...,</span> <span class="identifier">An</span><span class="special">)&gt;::</span><span class="identifier">type</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+ <span class="identifier">after_completion_fork</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span> <span class="identifier">an</span> <span class="special">);</span>
+
+
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.partial_specialization_template_class__act_traits_act_wrapper_act___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.partial_specialization_template_class__act_traits_act_wrapper_act___" title="Partial
+ Specialization Template Class act_traits&lt;act_wrapper&lt;ACT&gt;&gt;">Partial
+ Specialization Template Class <code class="computeroutput"><span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;&gt;</span></code></a>
+</h6></div></div></div>
+<p>
+ act_wrapper inherits the traits of its wrapped <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;{};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.partial_specialization_template_class__is_movable_act_wrapper_act____"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.partial_specialization_template_class__is_movable_act_wrapper_act____" title="Partial
+ Specialization Template Class is_movable&lt;act_wrapper&lt;ACT&gt; &gt;">Partial
+ Specialization Template Class <code class="computeroutput"><span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;</span></code></a>
+</h6></div></div></div>
+<p>
+ act_wrapper inherits the traits of its wrapped <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;{};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.template_class__act_wrapper___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.template_class__act_wrapper___" title="Template
+ Class act_wrapper&lt;&gt;">Template
+ Class <code class="computeroutput"><span class="identifier">act_wrapper</span><span class="special">&lt;&gt;</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">act_wrapper</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">move_dest_type</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+ <span class="identifier">act_wrapper</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">wait_initialized</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">other</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">set</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">);</span>
+
+ <span class="keyword">void</span> <span class="identifier">wait</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">wait_for</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="identifier">move_dest_type</span> <span class="identifier">get</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">is_ready</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">has_value</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">has_exception</span><span class="special">();</span>
+
+ <span class="keyword">void</span> <span class="identifier">detach</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">();</span>
+ <span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">join_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">join_for</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">();</span>
+<span class="special">};</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.metafunction__result_of__fork_ae_f___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.metafunction__result_of__fork_ae_f___" title="Metafunction
+ result_of::fork&lt;AE,F&gt; ">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;</span> </code></a>
+</h6></div></div></div>
+<p>
+ A metafunction returning the result type of applying <code class="computeroutput"><span class="identifier">fork_after</span></code> to an asynchronous executor
+ and a Nullary functor.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_after</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">act_wrapper</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="table">
+<a name="id4834572"></a><p class="title"><b>Table 4. fork Parameters</b></p>
+<table class="table" summary="fork Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">F</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ result_of::fork_after&lt;AE,F&gt;::type
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ act_wrapper&lt;typename asynchronous_completion_token&lt;AE, typename
+ boost::result_of&lt;F()&gt;::type&gt;::type&gt;
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.static_member_function__partial_specialization_workaround__fork_after____apply___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.static_member_function__partial_specialization_workaround__fork_after____apply___" title="Static
+ Member Function partial_specialization_workaround::fork_after&lt;&gt;::apply()">Static
+ Member Function <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">fork_after</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">()</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_after</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_after</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span><span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.non_member_function__fork_after___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.non_member_function__fork_after___" title="Non
+ member function fork_after()">Non
+ member function <code class="computeroutput"><span class="identifier">fork_after</span><span class="special">()</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_after</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F</span><span class="special">,</span><span class="identifier">D</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">fork_after</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">);</span>
+</pre>
+<div class="table">
+<a name="id4835249"></a><p class="title"><b>Table 5. fork Parameters</b></p>
+<table class="table" summary="fork Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">F</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">D</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of a fusion <code class="computeroutput"><span class="identifier">Sequence</span></code>
+ of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Dependent <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Requires:</span></dt>
+<dd><p>
+ The expression fn() must be valid and have a type convertible to
+ R, where R is typename result_of&lt;F()&gt;::type..
+ </p></dd>
+<dt><span class="term">Efect:</span></dt>
+<dd><p>
+ Request the asynchronous evaluation the expression <code class="computeroutput"><span class="identifier">fn</span><span class="special">()</span></code>
+ with respect to the calling thread to the asynchronous executor
+ <code class="computeroutput"><span class="identifier">ae</span></code> after the completion
+ of all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in <code class="computeroutput"><span class="identifier">d</span></code> and places
+ its result in an object h of type AE::handle&lt;R&gt;::type as
+ if by using h.set_value( fn() ). If the expression fn() throws
+ an exception e, places e into h as if by using h.set_exception(
+ current_exception() ).
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the AE handle h.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.non_member_function__after_completion_fork___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_after_hpp.non_member_function__after_completion_fork___" title="Non
+ member function after_completion_fork()">Non
+ member function <code class="computeroutput"><span class="identifier">after_completion_fork</span><span class="special">()</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">D</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">A1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">An</span> <span class="special">&gt;</span>
+<span class="identifier">act_wrapper</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">asynchronous_completion_token</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">(</span><span class="identifier">A1</span><span class="special">,...,</span> <span class="identifier">An</span><span class="special">)&gt;::</span><span class="identifier">type</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;</span>
+<span class="identifier">after_completion_fork</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">D</span><span class="special">&amp;</span> <span class="identifier">d</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">fn</span><span class="special">,</span> <span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">An</span> <span class="identifier">an</span> <span class="special">);</span>
+</pre>
+<div class="table">
+<a name="id4835911"></a><p class="title"><b>Table 6. fork Parameters</b></p>
+<table class="table" summary="fork Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">D</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of a fusion <code class="computeroutput"><span class="identifier">Sequence</span></code>
+ of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Dependent <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">F</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Ak</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of n-ary function
+ </p>
+ </td>
+<td>
+ <p>
+ n-ary function argument type for argument k
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Requires:</span></dt>
+<dd><p>
+ The expression fn(a1, ..., an) must be valid and have a type convertible
+ to R, where R is typename result_of&lt;Fn()&gt;::type..
+ </p></dd>
+<dt><span class="term">Efect:</span></dt>
+<dd><p>
+ Request the <code class="computeroutput"><span class="identifier">AE</span></code>
+ to creates a thread of execution for the function <code class="computeroutput"><span class="identifier">fn</span></code> Request the asynchronous evaluation
+ the expression <code class="computeroutput"><span class="identifier">fn</span><span class="special">(</span><span class="identifier">a1</span><span class="special">,</span> <span class="special">...,</span>
+ <span class="identifier">an</span><span class="special">)</span></code>
+ with respect to the calling thread to the asynchronous executor
+ <code class="computeroutput"><span class="identifier">ae</span></code> after the completion
+ of all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in <code class="computeroutput"><span class="identifier">d</span></code> and places
+ its result in an object h of type AE::handle&lt;R&gt;::type as
+ if by using h.set_value( fn(a1, ..., an) ). If the expression fn()
+ throws an exception e, places e into h as if by using h.set_exception(
+ current_exception() ).
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ the AE handle h.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp" title="
+ Header &lt;boost/async/fork_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp.metafunction__result_of__fork_all_ae_f1_______fn___">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp.non_member_function__fork_all___">Non
+ member function <code class="computeroutput"><span class="identifier">fork_all</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_all</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_all</span> <span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> <span class="special">&gt;{</span>
+ <span class="keyword">typedef</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="special">...</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">fork_all</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">default_asynchronous_executor</span><span class="special">,</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">fork_all</span><span class="special">(</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp.metafunction__result_of__fork_all_ae_f1_______fn___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp.metafunction__result_of__fork_all_ae_f1_______fn___" title="Metafunction
+ result_of::fork_all&lt;AE,F1, ..., Fn&gt; ">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a>
+</h6></div></div></div>
+<p>
+ A metafunction returning the result type of applying fork_all to an
+ asynchronous executor and n Nullary functors.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_all</span><span class="special">;</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">fork_all</span> <span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> <span class="special">&gt;{</span>
+ <span class="keyword">typedef</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="special">...</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="table">
+<a name="id4837625"></a><p class="title"><b>Table 7. fork_all Parameters</b></p>
+<table class="table" summary="fork_all Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchrousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Fk</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of nullary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,...,</span><span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ a fusion tuple of the result of forking each <code class="computeroutput"><span class="identifier">Fk</span></code>
+ by the <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp.non_member_function__fork_all___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.fork_all_hpp.non_member_function__fork_all___" title="Non
+ member function fork_all()">Non
+ member function <code class="computeroutput"><span class="identifier">fork_all</span><span class="special">()</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">fork_all</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+
+<span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">fork_all</span><span class="special">&lt;</span><span class="identifier">default_asynchronous_executor</span><span class="special">,</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">fork_all</span><span class="special">(</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+</pre>
+<div class="table">
+<a name="id4838288"></a><p class="title"><b>Table 8. fork Parameters</b></p>
+<table class="table" summary="fork Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchrousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Fk</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of nullary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ a fusion tuple of the result of forking each <code class="computeroutput"><span class="identifier">fk</span></code>
+ by the <code class="computeroutput"><span class="identifier">ae</span></code>
+ </p></dd>
+<dt><span class="term">Efect:</span></dt>
+<dd><p>
+ Request the <code class="computeroutput"><span class="identifier">AE</span></code>
+ to creates a n thread of execution one for the function <code class="computeroutput"><span class="identifier">fk</span></code>.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp" title="
+ Header &lt;boost/async/wait_for_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp.metafunction__result_of__wait_for_all_ae_f1_______fn___">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp.non_member_function__wait_for_all_">Non
+ member function <code class="computeroutput"><span class="identifier">wait_for_all</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+<span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_for_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="special">...</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">Fn</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">wait_for_all</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp.metafunction__result_of__wait_for_all_ae_f1_______fn___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp.metafunction__result_of__wait_for_all_ae_f1_______fn___" title="Metafunction
+ result_of::wait_for_all&lt;AE,F1, ..., Fn&gt; ">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a>
+</h6></div></div></div>
+<p>
+ A metafunction returning the result type of applying get_all to a Sequence
+ of asynchronous executor handles.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_for_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">tuple</span><span class="special">&lt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="special">...</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">Fn</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">,</span>
+ <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="table">
+<a name="id4839349"></a><p class="title"><b>Table 9. wait_for_all Parameters</b></p>
+<table class="table" summary="wait_for_all Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchrousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Fk</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of nullary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span>
+ <span class="identifier">F1</span><span class="special">,</span>
+ <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ a fusion tuple of the result of applying get to each one of the
+ asynchronous executors handles resulting of forking each function
+ <code class="computeroutput"><span class="identifier">Fk</span></code> by <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp.non_member_function__wait_for_all_"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_all_hpp.non_member_function__wait_for_all_" title="Non
+ member function wait_for_all">Non
+ member function <code class="computeroutput"><span class="identifier">wait_for_all</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">wait_for_all</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ a fusion tuple of the result of applying get to each one of the
+ asynchronous executors handles resulting of forking each function
+ <code class="computeroutput"><span class="identifier">fk</span></code> by <code class="computeroutput"><span class="identifier">ae</span></code>.
+ </p></dd>
+<dt><span class="term">Effect:</span></dt>
+<dd><p>
+ Request the <code class="computeroutput"><span class="identifier">AE</span></code>
+ to creates a n thread of execution one for the function <code class="computeroutput"><span class="identifier">fk</span></code> and blocks until all the AE
+ handles are ready.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp" title="
+ Header &lt;boost/async/wait_for_any.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_any</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp.metafunction__result_of__wait_for_all_ae_f1_______fn___">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp.non_member_function__wait_for_any_">Non
+ member function <code class="computeroutput"><span class="identifier">wait_for_any</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_for_any</span> <span class="special">{</span>
+ <span class="comment">// requires typename result_of&lt;F1()&gt;::type == typename result_of&lt;Fk()&gt;::type
+</span> <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">unsigned</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_any</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">wait_for_any</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp.metafunction__result_of__wait_for_all_ae_f1_______fn___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp.metafunction__result_of__wait_for_all_ae_f1_______fn___" title="Metafunction
+ result_of::wait_for_all&lt;AE,F1, ..., Fn&gt; ">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a>
+</h6></div></div></div>
+<p>
+ A metafunction returning the a pair: the index of the first function
+ executed by the AE and the result type of applying get on an asynchronous
+ executor handles.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_for_any</span> <span class="special">{</span>
+ <span class="comment">// requires typename result_of&lt;F1()&gt;::type == typename result_of&lt;Fk()&gt;::type
+</span> <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">unsigned</span><span class="special">,</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F1</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="table">
+<a name="id4840705"></a><p class="title"><b>Table 10. wait_for_all Parameters</b></p>
+<table class="table" summary="wait_for_all Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">AE</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of <code class="computeroutput"><span class="identifier">AsynchrousExecutor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Fk</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A model of nullary function
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_any</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span>
+ <span class="identifier">F1</span><span class="special">,</span>
+ <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ a pair: the index of the first function executed by the AE and
+ the result type of applying get on an asynchronous executor handles
+ created by <code class="computeroutput"><span class="identifier">ae</span></code> to
+ fork each <code class="computeroutput"><span class="identifier">fk</span></code>
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp.non_member_function__wait_for_any_"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.ae_operations.wait_for_any_hpp.non_member_function__wait_for_any_" title="Non
+ member function wait_for_any">Non
+ member function <code class="computeroutput"><span class="identifier">wait_for_any</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">Fn</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_for_any</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span> <span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">wait_for_any</span><span class="special">(</span> <span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">,</span> <span class="identifier">F1</span> <span class="identifier">f1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span> <span class="identifier">fn</span> <span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ a fusion tuple of the result of applying get to each one of the
+ asynchronous executors handles resulting of forking each function
+ <code class="computeroutput"><span class="identifier">fk</span></code> by <code class="computeroutput"><span class="identifier">ae</span></code>.
+ </p></dd>
+<dt><span class="term">Effect:</span></dt>
+<dd><p>
+ Request the <code class="computeroutput"><span class="identifier">AE</span></code>
+ to creates a n thread of execution one for the function <code class="computeroutput"><span class="identifier">fk</span></code> and blocks until all the AE
+ handles are ready.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.algorithm_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.algorithm_hpp" title="
+ Header &lt;boost/async/algorithm.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ Include all the <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>/<code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> framework
+ functions.
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="comment">//#include &lt;boost/async/lazy_fork.hpp&gt;
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_after</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">wait_for_any</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="comment">//#include &lt;boost/async/algorithm/join_all_for.hpp&gt;
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="comment">//#include &lt;boost/async/algorithm/join_all_for.hpp&gt;
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested_on_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="comment">//#include &lt;boost/async/algorithm/wait_all_for.hpp&gt;
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">is_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="comment">//#include &lt;boost/async/algorithm/wait_all_for.hpp&gt;
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="comment">//#include &lt;boost/async/algorithm/get_all_until.hpp&gt;
+</span><span class="comment">//#include &lt;boost/async/algorithm/get_all_for.hpp&gt;
+</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_all_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_all_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations" title="Future
+ based ACT operations">Future
+ based ACT operations</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.is_ready_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">is_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_value_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_exception_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.are_all_ready_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_value_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_all_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_exception_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_some_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_hpp" title="
+ Header &lt;boost/async/algorithm/wait.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">wait</span></code>
+ which waits the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">wait</span></code> member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>. A user
+ adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">wait</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a wait function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">wait</span></code>
+ member function, <code class="computeroutput"><span class="identifier">wait</span></code>
+ calls to the static operation apply on a class with the same name in
+ the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+<span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">wait</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">wait</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">act</span><span class="special">);</span>
+ <span class="special">}</span>
+
+<span class="special">}</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_until_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_until_hpp" title="
+ Header &lt;boost/async/algorithm/wait_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">wait_until</span></code>
+ which wait until the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter is ready or the given time is reached. The default
+ implementation applies the <code class="computeroutput"><span class="identifier">wait_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">wait_until</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a wait_until function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">wait_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">wait_until</span></code>
+ calls to the static operation apply on a class with the same name in
+ the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">wait_for</span></code>
+ which wait until the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter is ready or the given time is elapsed. The default
+ implementation applies the <code class="computeroutput"><span class="identifier">wait_for</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">wait_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">wait_for</span></code>
+ function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">wait_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">wait_for</span></code>
+ calls to the static operation apply on a class with the same name in
+ the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">wait_until</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">wait_for</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+<span class="special">}</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp" title="
+ Header &lt;boost/async/algorithm/get.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.metafunction__result_of__get_act___">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.static_member_function__partial_specialization_workaround__get____apply___">Static
+ Member Function <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.non_member_function__get___">Non
+ member function <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code></a></span></dt>
+</dl></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">get</span></code>
+ which obtain the stored value on the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">get</span></code> member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>. A user
+ adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">get</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a get function with the same prototype. As for the moment
+ we can not partially specialize a function a trick is used: instead of
+ calling directly to the <code class="computeroutput"><span class="identifier">get</span></code>
+ member function <code class="computeroutput"><span class="identifier">get</span></code> calls
+ to the static operation <code class="computeroutput"><span class="identifier">apply</span></code>
+ on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">get</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">move_dest_type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">get</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">get</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.metafunction__result_of__get_act___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.metafunction__result_of__get_act___" title="Metafunction
+ result_of::get&lt;ACT&gt; ">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;</span> </code></a>
+</h6></div></div></div>
+<p>
+ A metafunction returning the result type of applying get to an <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">get</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">move_dest_type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="table">
+<a name="id4846060"></a><p class="title"><b>Table 11. get Parameters</b></p>
+<table class="table" summary="get Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">ACT</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ An <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr></tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">S</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p></dd>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ Depending on the nature of the ACT returns a <code class="computeroutput"><span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">move_dest_type</span></code>.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.static_member_function__partial_specialization_workaround__get____apply___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.static_member_function__partial_specialization_workaround__get____apply___" title="Static
+ Member Function partial_specialization_workaround::get&lt;&gt;::apply()">Static
+ Member Function <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">()</span></code></a>
+</h6></div></div></div>
+<p>
+ The default implementation applies the 'get()' member function on the
+ <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">get</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.non_member_function__get___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_hpp.non_member_function__get___" title="Non
+ member function get()">Non
+ member function <code class="computeroutput"><span class="identifier">get</span><span class="special">()</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+<span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">get</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="special">&gt;::</span><span class="identifier">type</span>
+<span class="identifier">get</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ a fusion tuple of the result of applying <code class="computeroutput"><span class="identifier">get</span></code>
+ to each one of the asynchronous completion token handles in the
+ sequence.
+ </p></dd>
+<dt><span class="term">Effect:</span></dt>
+<dd><p>
+ Blocks until all the ACT handles in the Sequence are ready.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ if some of the ACT::get operation throws
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.is_ready_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.is_ready_hpp" title="
+ Header &lt;boost/async/algorithm/is_ready.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">is_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">is_ready</span></code>
+ which states if <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter is ready. The default implementation applies the
+ <code class="computeroutput"><span class="identifier">is_ready</span></code> member function
+ to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">is_ready</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a is_ready function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">is_ready</span></code>
+ member function <code class="computeroutput"><span class="identifier">is_ready</span></code>
+ calls to the static operation <code class="computeroutput"><span class="identifier">apply</span></code>
+ on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_ready</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">is_ready</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">is_ready</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">is_ready</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">is_ready</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">);</span>
+
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_value_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_value_hpp" title="
+ Header &lt;boost/async/algorithm/has_value.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">has_value</span></code>
+ which states if <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter has a value. The default implementation applies the
+ <code class="computeroutput"><span class="identifier">has_value</span></code> member function
+ to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">has_value</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a has_value function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">has_value</span></code>
+ member function <code class="computeroutput"><span class="identifier">has_value</span></code>
+ calls to the static operation <code class="computeroutput"><span class="identifier">apply</span></code>
+ on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">has_value</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">has_value</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">has_value</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">is_ready</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">has_value</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">);</span>
+
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_exception_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.has_exception_hpp" title="
+ Header &lt;boost/async/algorithm/has_exception.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">has_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">has_exception</span></code>
+ which states if <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter has an exception. The default implementation applies
+ the <code class="computeroutput"><span class="identifier">has_exception</span></code> member
+ function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">has_exception</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a has_exception function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">has_exception</span></code>
+ member function <code class="computeroutput"><span class="identifier">has_exception</span></code>
+ calls to the static operation <code class="computeroutput"><span class="identifier">apply</span></code>
+ on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+<span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">has_exception</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+
+<span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">have_all_exception</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">has_exception</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+
+<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="identifier">have_all_exception</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_hpp" title="
+ Header &lt;boost/async/algorithm/wait_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">wait_all</span></code>
+ which waits the completion of all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the sequence passed as parameter.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+<span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">wait</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">wait</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">wait_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+
+<span class="special">}</span>
+<span class="special">}</span> <span class="comment">// namespace boost
+</span></pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_until_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.wait_all_until_hpp" title="
+ Header &lt;boost/async/algorithm/wait_all_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">wait_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines two free function <code class="computeroutput"><span class="identifier">wait_all_until</span></code>
+ and <code class="computeroutput"><span class="identifier">wait_all_for</span></code> which
+ waits the completion of all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the sequence passed as parameter or a given time is reached or elapsed
+ respectively.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+<span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_until</span> <span class="special">{</span>
+ <span class="identifier">wait_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+
+ <span class="keyword">struct</span> <span class="identifier">wait_for</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="identifier">wait_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Duration</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_all_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_all_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_all_until</span><span class="special">&lt;</span><span class="identifier">Sequence</span> <span class="keyword">const</span><span class="special">&gt;</span>
+ <span class="identifier">wait_all_until</span><span class="special">(</span><span class="identifier">Sequence</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_all_for</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="identifier">wait_all_for</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Duration</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+
+<span class="special">}</span>
+<span class="special">}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp" title="
+ Header &lt;boost/async/algorithm/get_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">get_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.functor__fct__get___">Functor
+ <code class="computeroutput"><span class="identifier">fct</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.metafunction__result_of__get_all_ae_f1_______fn___">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.non_member_function__get_all_">Non
+ member function <code class="computeroutput"><span class="identifier">get_all</span></code></a></span></dt>
+</dl></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">get_all</span></code>
+ which waits the completion of all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the sequence passed as parameter, and returns a tuple with the value
+ stores in each one of the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">get</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">result_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">get_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">transform</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">get</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">get_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">mt</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.functor__fct__get___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.functor__fct__get___" title="Functor
+ fct::get&lt;&gt;">Functor
+ <code class="computeroutput"><span class="identifier">fct</span><span class="special">::</span><span class="identifier">get</span><span class="special">&lt;&gt;</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">get</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">AE</span><span class="special">::</span><span class="identifier">result_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">AE</span><span class="special">&amp;</span> <span class="identifier">ae</span><span class="special">);</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ The result of the AE::get().
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ if AE::get() throws.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.metafunction__result_of__get_all_ae_f1_______fn___"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.metafunction__result_of__get_all_ae_f1_______fn___" title="Metafunction
+ result_of::get_all&lt;AE,F1, ..., Fn&gt; ">Metafunction
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">AE</span><span class="special">,</span><span class="identifier">F1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">Fn</span><span class="special">&gt;</span> </code></a>
+</h6></div></div></div>
+<p>
+ A metafunction returning the result type of applying get_all to a Sequence
+ of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">get_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">transform</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">get</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+<span class="special">}</span>
+</pre>
+<div class="table">
+<a name="id4851111"></a><p class="title"><b>Table 12. fork_all Parameters</b></p>
+<table class="table" summary="fork_all Parameters">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ <span class="bold"><strong>Parameter</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Requirement</strong></span>
+ </p>
+ </th>
+<th>
+ <p>
+ <span class="bold"><strong>Description</strong></span>
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Sequence</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A sequence of of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>s
+ </p>
+ </td>
+<td>
+ <p>
+ Operation's argument
+ </p>
+ </td>
+</tr></tbody>
+</table>
+</div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">S</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ a fusion tuple of the result of applying get to each one of the
+ asynchronous executors in the sequence
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.non_member_function__get_all_"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.get_all_hpp.non_member_function__get_all_" title="Non
+ member function get_all">Non
+ member function <code class="computeroutput"><span class="identifier">get_all</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">algo</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">get_all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">get_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">mt</span><span class="special">);</span>
+<span class="special">}</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ a fusion tuple of the result of applying <code class="computeroutput"><span class="identifier">get</span></code>
+ to each one of the asynchronous completion token handles in the
+ sequence.
+ </p></dd>
+<dt><span class="term">Effect:</span></dt>
+<dd><p>
+ Blocks until all the ACT handles in the Sequence are ready.
+ </p></dd>
+<dt><span class="term">Throws:</span></dt>
+<dd><p>
+ if some of the ACT::get operation throws
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.are_all_ready_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.are_all_ready_hpp" title="
+ Header &lt;boost/async/algorithm/are_all_ready.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_ready</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">are_all_ready</span></code>
+ which states if all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in a sequence of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ are ready. The current implementation applies the <code class="computeroutput"><span class="identifier">is_ready</span></code>
+ free function for each <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">is_ready</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">are_all_ready</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">is_ready</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="identifier">are_all_ready</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_value_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_value_hpp" title="
+ Header &lt;boost/async/algorithm/have_all_value.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_all_value</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">have_all_value</span></code>
+ which states if all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in a sequence of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ have a value. The current implementation applies the <code class="computeroutput"><span class="identifier">has_value</span></code>
+ free function for each <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">has_value</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">have_all_value</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">has_value</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="identifier">have_all_value</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_exception_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.future_based_act_operations.have_all_exception_hpp" title="
+ Header &lt;boost/async/algorithm/have_some_exception.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">have_some_exception</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function __have_some<span class="underline">exception</span>_
+ which states if some of the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in a sequence of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ have a exception stored. The current implementation applies the <code class="computeroutput"><span class="identifier">has_exception</span></code> free function for each
+ <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">has_exception</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">have_some_exception</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">has_exception</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span> <span class="keyword">bool</span> <span class="identifier">have_some_exception</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations" title="Thread
+ based ACT operations">Thread
+ based ACT operations</a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.joinable_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.are_all_joinable_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_until_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_on_all_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested_on_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_hpp" title="
+ Header &lt;boost/async/algorithm/detach.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code> which <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code> the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code> free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> do not
+ provides a detach function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code> member function detach calls to the
+ static operation apply on a class with the same name in the namespace
+ <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">ThreadBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">detach</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">detach</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">detach</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span><span class="keyword">void</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">detach</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.joinable_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.joinable_hpp" title="
+ Header &lt;boost/async/algorithm/joinable.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">joinable</span></code>
+ which states if <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter is <code class="computeroutput"><span class="identifier">joinable</span></code>.
+ The default implementation applies the <code class="computeroutput"><span class="identifier">joinable</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">joinable</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a joinable function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">joinable</span></code>
+ member function <code class="computeroutput"><span class="identifier">joinable</span></code>
+ calls to the static operation <code class="computeroutput"><span class="identifier">apply</span></code>
+ on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">ThreadBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">joinable</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">joinable</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">joinable</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">joinable</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">joinable</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_hpp" title="
+ Header &lt;boost/async/algorithm/join.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code> which joins the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code> free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> do not
+ provides a join function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code> member function join calls to the static
+ operation apply on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">ThreadBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">join</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">act</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_until_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_until_hpp" title="
+ Header &lt;boost/async/algorithm/join_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">join_until</span></code>
+ which join until the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter is ready or the given time is reached. The default
+ implementation applies the <code class="computeroutput"><span class="identifier">join_until</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">join_until</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a join_until function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">join_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">join_until</span></code>
+ calls to the static operation apply on a class with the same name in
+ the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">join_for</span></code>
+ which join until the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter is ready or the given time is elapsed. The default
+ implementation applies the <code class="computeroutput"><span class="identifier">join_for</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">join_for</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a <code class="computeroutput"><span class="identifier">join_for</span></code>
+ function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">join_until</span></code>
+ member function, <code class="computeroutput"><span class="identifier">join_for</span></code>
+ calls to the static operation apply on a class with the same name in
+ the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">ThreadBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">ACT</span> <span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">join_until</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">join_for</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">abs_time</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">join_until</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">act</span><span class="special">,</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">join_for</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Duration</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">partial_specialization_workaround</span><span class="special">::</span><span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">(</span><span class="identifier">act</span><span class="special">,</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_hpp" title="
+ Header &lt;boost/async/algorithm/interrupt.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code> which interrupts the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> passed
+ as parameter. The default implementation applies the <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code> member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>. A user
+ adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code> free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> do not
+ provides a interrupt function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code> member function interrupt calls to
+ the static operation apply on a class with the same name in the namespace
+ <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">ThreadBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">interrupt</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">interrupt</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">interrupt</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">void</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">interrupt</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_hpp" title="
+ Header &lt;boost/async/algorithm/interruption_requested.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">interruption_requested</span></code>
+ which states if <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ passed as parameter has received un <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code> request. The default implementation
+ applies the <code class="computeroutput"><span class="identifier">interruption_requested</span></code>
+ member function to the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ A user adapting another <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ could need to specialize the <code class="computeroutput"><span class="identifier">interruption_requested</span></code>
+ free function if the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ do not provides a interruption_requested function with the same prototype.
+ </p>
+<p>
+ As for the moment we can not partially specialize a function a trick
+ is used: instead of calling directly to the <code class="computeroutput"><span class="identifier">interruption_requested</span></code>
+ member function <code class="computeroutput"><span class="identifier">interruption_requested</span></code>
+ calls to the static operation <code class="computeroutput"><span class="identifier">apply</span></code>
+ on a class with the same name in the namespace <code class="computeroutput"><span class="identifier">partial_specialization_workaround</span></code>.
+ So the user can specialize partially this class.
+ </p>
+<p>
+ The template parameter ACT must be a model of <code class="computeroutput"><span class="identifier">ThreadBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">interruption_requested</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">interruption_requested</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">interruption_requested</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span> <span class="special">);</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">enable_if</span><span class="special">&lt;</span><span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">ACT</span><span class="special">&gt;,</span>
+ <span class="keyword">bool</span>
+ <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.detach_all_hpp" title="
+ Header &lt;boost/async/algorithm/detach_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">detach_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">detach_all</span></code>
+ which detach all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the sequence passed as parameter.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">detach</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">detach_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">detach</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">detach_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_hpp" title="
+ Header &lt;boost/async/algorithm/join_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">join_all</span></code>
+ which waits the completion of all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the sequence passed as parameter.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">join</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">result_type</span><span class="special">;</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">join_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">join</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">join_all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">join_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.are_all_joinable_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.are_all_joinable_hpp" title="
+ Header &lt;boost/async/algorithm/are_all_joinable.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">are_all_joinable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">are_all_joinable</span></code>
+ which states if all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in a sequence of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ are <code class="computeroutput"><span class="identifier">joinable</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">joinable</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">are_all_joinable</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">joinable</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">are_all_joinable</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_until_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.join_all_until_hpp" title="
+ Header &lt;boost/async/algorithm/join_all_until.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">join_all_until</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">join_all_until</span></code>
+ and __join_all<span class="underline">for</span>_ which waits
+ the completion of all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the sequence passed as parameter or a given time is reached or elapsed
+ respectiviely.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">join_until</span> <span class="special">{</span>
+ <span class="identifier">join_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">struct</span> <span class="identifier">join_for</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="identifier">join_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Duration</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">join_all_until</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">join_all_for</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">join_all_until</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="identifier">join_all_until</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">);</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">join_all_for</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="identifier">join_all_for</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">Duration</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interrupt_all_hpp" title="
+ Header &lt;boost/async/algorithm/interrupt_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interrupt_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">interrupt_all</span></code>
+ which interrupts all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ in the sequence passed as parameter.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">interrupt</span> <span class="special">{</span>
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">interrupt_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">interrupt</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">void</span> <span class="identifier">interrupt_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_on_all_hpp"></a><a href="ae_act_framework_reference.html#toward_boost_async.reference.ae_act_framework_reference.thread_based_act_operations.interruption_requested_on_all_hpp" title="
+ Header &lt;boost/async/algorithm/interruption_requested_on_all.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">algorithm</span><span class="special">/</span><span class="identifier">interruption_requested_on_all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ Defines a free function <code class="computeroutput"><span class="identifier">interruption_requested_on_all</span></code>
+ which states if an interruption has been requested on all the <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code> in a sequence
+ of <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">namespace</span> <span class="identifier">fct</span> <span class="special">{</span>
+ <span class="keyword">struct</span> <span class="identifier">interruption_requested</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">bool</span> <span class="identifier">result_type</span><span class="special">;</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">ACT</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">ACT</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">result_of</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">interruption_requested_on_all</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">fusion</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">all</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">fct</span><span class="special">::</span><span class="identifier">interruption_requested</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">&gt;</span>
+ <span class="keyword">bool</span> <span class="identifier">interruption_requested_on_all</span><span class="special">(</span><span class="identifier">Sequence</span><span class="special">&amp;</span> <span class="identifier">t</span><span class="special">);</span>
+<span class="special">}}</span>
+</pre>
+</div>
+</div>
+</div>
+<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
+<td align="left"></td>
+<td align="right"><div class="copyright-footer">Copyright © 2008 -2009 Vicente J. Botet Escriba<p>
+ Distributed under the Boost Software License, Version 1.0. (See accompanying
+ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ </p>
+</div></td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="concepts.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="ae_act_models_reference.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+</body>
+</html>

Added: sandbox/async/libs/async/doc/html/toward_boost_async/reference/ae_act_models_reference.html
==============================================================================
--- (empty file)
+++ sandbox/async/libs/async/doc/html/toward_boost_async/reference/ae_act_models_reference.html 2009-10-13 02:51:21 EDT (Tue, 13 Oct 2009)
@@ -0,0 +1,2553 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>AE/ACT
+ Models Reference</title>
+<link rel="stylesheet" href="../../../../../../doc/html/boostbook.css" type="text/css">
+<meta name="generator" content="DocBook XSL Stylesheets V1.69.1">
+<link rel="start" href="../../index.html" title="Toward Boost Async">
+<link rel="up" href="../reference.html" title=" Reference">
+<link rel="prev" href="ae_act_framework_reference.html" title="AE/ACT
+ Framework Reference">
+<link rel="next" href="../examples.html" title="Examples">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table cellpadding="2" width="100%"><tr>
+<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
+<td align="center">Home</td>
+<td align="center">Libraries</td>
+<td align="center">People</td>
+<td align="center">FAQ</td>
+<td align="center">More</td>
+</tr></table>
+<hr>
+<div class="spirit-nav">
+<a accesskey="p" href="ae_act_framework_reference.html"><img src="../../../../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/html/images/home.png" alt="Home"></a><a accesskey="n" href="../examples.html"><img src="../../../../../../doc/html/images/next.png" alt="Next"></a>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference"></a><a href="ae_act_models_reference.html" title="AE/ACT
+ Models Reference">AE/ACT
+ Models Reference</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.future_traits_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">future_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">immediate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__">Class
+ <code class="computeroutput"><span class="identifier">unique_immediate</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__">Class
+ <code class="computeroutput"><span class="identifier">shared_immediate</span> </code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.basic_threader_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">basic_threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">launcher</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__">Class
+ <code class="computeroutput"><span class="identifier">launcher</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__">Class
+ <code class="computeroutput"><span class="identifier">shared_launcher</span> </code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp.template_class__unique_joiner___">Template
+ Class <code class="computeroutput"><span class="identifier">unique_joiner</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp.non_member_swap">
+ Non-member function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp.template_class__unique_threader_">Template
+ Class <code class="computeroutput"><span class="identifier">unique_threader</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp.template_class__shared_joiner___">Template
+ Class <code class="computeroutput"><span class="identifier">shared_joiner</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp.non_member_swap2">
+ Non-member function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.threader_hpp.template_class__shared_threader_">Template
+ Class <code class="computeroutput"><span class="identifier">shared_threader</span></code></a></span></dt>
+</dl></dd>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.scheduler_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">scheduler</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_futures_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">future</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_launcher_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">launcher</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_threader_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_basic_threaderr_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">basic_threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.typeof_scheduler_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">typeof</span><span class="special">/</span><span class="identifier">scheduler</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.asynchronous_executor_decorator_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">asynchronous_executor_decorator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.future_traits_hpp"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.future_traits_hpp" title="
+ Header &lt;boost/async/future_traits.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">future_traits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+<span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_HAS_RVALUE_REFS</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_fundamental</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">T</span><span class="special">&amp;&amp;&gt;::</span><span class="identifier">type</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+<span class="preprocessor">#else</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_convertible</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&l
t;</span><span class="identifier">T</span><span class="special">&gt;,</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+<span class="preprocessor">#endif</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+<span class="preprocessor">#ifdef</span> <span class="identifier">BOOST_HAS_RVALUE_REFS</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_fundamental</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">T</span><span class="special">&amp;&amp;&gt;::</span><span class="identifier">type</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+<span class="preprocessor">#else</span>
+ <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_convertible</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;,</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">detail</span><span class="special">::</span><span class="identifier">thread_move_t</span><span class="special">&l
t;</span><span class="identifier">T</span><span class="special">&gt;,</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+<span class="preprocessor">#endif</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&amp;&gt;</span> <span class="special">&gt;</span>
+ <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span><span class="special">{};</span>
+
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">is_movable</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_future_if</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">{};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">has_thread_if</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">:</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span><span class="special">{};</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.immediate_hpp"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp" title="
+ Header &lt;boost/async/immediate.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">immediate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__">Class
+ <code class="computeroutput"><span class="identifier">unique_immediate</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__">Class
+ <code class="computeroutput"><span class="identifier">shared_immediate</span> </code></a></span></dt>
+</dl></div>
+<p>
+ An immediate executor is an <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ executing the function on the current thread with a future as <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code> so we can get the value
+ associated to it.
+ </p>
+<p>
+ The library defines two kind of immediate executors: unique_immediate and
+ shared_immediate that respectively have a unique_future and a shared_future
+ as <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">immediate</span><span class="special">;</span>
+ <span class="keyword">class</span> <span class="identifier">shared_immediate</span><span class="special">;</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__" title="Class
+ unique_immediate ">Class
+ <code class="computeroutput"><span class="identifier">unique_immediate</span> </code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__.metafunction__unique_immediate__handle___">Metafunction
+ <code class="computeroutput"><span class="identifier">unique_immediate</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__.member_function__unique_immediate____fork_">Member
+ function <code class="computeroutput"><span class="identifier">unique_immediate</span><span class="special">&lt;&gt;::</span><span class="identifier">fork</span></code></a></span></dt>
+</dl></div>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">unique_immediate</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+ <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__.metafunction__unique_immediate__handle___"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__.metafunction__unique_immediate__handle___" title="Metafunction
+ unique_immediate::handle&lt;&gt;">Metafunction
+ <code class="computeroutput"><span class="identifier">unique_immediate</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a>
+</h6></div></div></div>
+<p>
+ Metafunction that returns the result type of the fork function applied
+ to a unique_immediate and the value type.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ L::handle&lt;T&gt;::type
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ A unique_future&lt;T&gt;.
+ </p></dd>
+<dt><span class="term">Complexity:</span></dt>
+<dd><p>
+ constant.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__.member_function__unique_immediate____fork_"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__unique_immediate__.member_function__unique_immediate____fork_" title="Member
+ function unique_immediate&lt;&gt;::fork">Member
+ function <code class="computeroutput"><span class="identifier">unique_immediate</span><span class="special">&lt;&gt;::</span><span class="identifier">fork</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+<span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+<span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ A unique_future to the result of calling a function F.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ create a thread executing the function f. The result of the function
+ will be stored on the resulting future.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__" title="Class
+ shared_immediate ">Class
+ <code class="computeroutput"><span class="identifier">shared_immediate</span> </code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__.metafunction__shared_immediate__handle___">Metafunction
+ <code class="computeroutput"><span class="identifier">shared_immediate</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__.member_function__shared_immediate__fork_">Member
+ function <code class="computeroutput"><span class="identifier">shared_immediate</span><span class="special">::</span><span class="identifier">fork</span></code></a></span></dt>
+</dl></div>
+<p>
+ Thread shared_immediate using a common configuration managed with the
+ thread attributes and returning on the fork operation a unique_future
+ to the resulting type of the call to the threaded function.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">shared_immediate</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_attr_type</span><span class="special">&amp;</span> <span class="identifier">attr</span><span class="special">();</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+ <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__.metafunction__shared_immediate__handle___"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__.metafunction__shared_immediate__handle___" title="Metafunction
+ shared_immediate::handle&lt;&gt;">Metafunction
+ <code class="computeroutput"><span class="identifier">shared_immediate</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a>
+</h6></div></div></div>
+<p>
+ Metafunction that returns the result type of the fork function applied
+ to a shared_immediate and the value type.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ L::handle&lt;T&gt;::type
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ A unique_future&lt;T&gt;.
+ </p></dd>
+<dt><span class="term">Complexity:</span></dt>
+<dd><p>
+ constant.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__.member_function__shared_immediate__fork_"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.immediate_hpp.class__shared_immediate__.member_function__shared_immediate__fork_" title="Member
+ function shared_immediate::fork">Member
+ function <code class="computeroutput"><span class="identifier">shared_immediate</span><span class="special">::</span><span class="identifier">fork</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+<span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+<span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ A unique_future to the result of calling a function F.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ create a thread executing the function f. The result of the function
+ will be stored on the resulting future.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.basic_threader_hpp"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.basic_threader_hpp" title="
+ Header &lt;boost/async/basic_threader.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">basic_threader</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">basic_threader</span></code> is an <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code> with a thread as
+ <code class="computeroutput"><span class="identifier">ThreadBasedACT</span></code>.
+ </p>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">basic_threader</span> <span class="special">{</span>
+ <span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_attr_type</span><span class="special">&amp;</span> <span class="identifier">attr</span><span class="special">();</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">thread</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span> <span class="identifier">thread</span> <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span><span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">act_traits</span><span class="special">&lt;</span><span class="identifier">thread</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">move_dest_type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">thread</span><span class="special">,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">thread</span><span class="special">&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+<span class="special">}}</span>
+</pre>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp" title="
+ Header &lt;boost/async/launcher.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">launcher</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__">Class
+ <code class="computeroutput"><span class="identifier">launcher</span> </code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__">Class
+ <code class="computeroutput"><span class="identifier">shared_launcher</span> </code></a></span></dt>
+</dl></div>
+<p>
+ A launcher is an <code class="computeroutput"><span class="identifier">AsynchronousExecutor</span></code>
+ with a future as <code class="computeroutput"><span class="identifier">FutureBasedACT</span></code>
+ so we can get the value associated to it.
+ </p>
+<p>
+ The library defines two kind of launchers: unique_launcher and shared_launcher
+ that respectively have a unique_future and a shared_future as <code class="computeroutput"><span class="identifier">AsynchronousCompletionToken</span></code>
+ </p>
+<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">async</span><span class="special">/</span><span class="identifier">fork</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
+<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">async</span> <span class="special">{</span>
+ <span class="keyword">class</span> <span class="identifier">launcher</span><span class="special">;</span>
+ <span class="keyword">class</span> <span class="identifier">shared_launcher</span><span class="special">;</span>
+
+ <span class="keyword">namespace</span> <span class="identifier">partial_specialization_workaround</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">join_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_until</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&amp;</span> <span class="identifier">abs_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait_until</span><span class="special">(</span><span class="identifier">abs_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span> <span class="identifier">Duration</span><span class="special">&gt;</span> <span class="special">{</span>
+ <span class="keyword">static</span> <span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="keyword">template</span> <span class="identifier">wait_for</span><span class="special">&lt;</span><span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Duration</span><span class="special">&gt;::</span><span class="identifier">type</span>
+ <span class="identifier">apply</span><span class="special">(</span> <span class="identifier">shared_future</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;&amp;</span> <span class="identifier">act</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="identifier">rel_time</span> <span class="special">)</span> <span class="special">{</span>
+ <span class="keyword">return</span> <span class="identifier">act</span><span class="special">.</span><span class="identifier">timed_wait</span><span class="special">(</span><span class="identifier">rel_time</span><span class="special">);</span>
+ <span class="special">}</span>
+ <span class="special">};</span>
+ <span class="special">}</span>
+
+<span class="special">}}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__" title="Class
+ launcher ">Class
+ <code class="computeroutput"><span class="identifier">launcher</span> </code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.member_function__launcher__attributes_">Member
+ function <code class="computeroutput"><span class="identifier">launcher</span><span class="special">::</span><span class="identifier">attributes</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.metafunction__launcher__handle___">Metafunction
+ <code class="computeroutput"><span class="identifier">launcher</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.member_function__lancher__fork_">Member
+ function <code class="computeroutput"><span class="identifier">lancher</span><span class="special">::</span><span class="identifier">fork</span></code></a></span></dt>
+</dl></div>
+<p>
+ Thread launcher using a common configuration managed with the thread
+ attributes and returning on the fork operation a unique_future to the
+ resulting type of the call to the threaded function.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">launcher</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_attr_type</span><span class="special">&amp;</span> <span class="identifier">attr</span><span class="special">();</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+ <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.member_function__launcher__attributes_"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.member_function__launcher__attributes_" title="Member
+ function launcher::attributes">Member
+ function <code class="computeroutput"><span class="identifier">launcher</span><span class="special">::</span><span class="identifier">attributes</span></code></a>
+</h6></div></div></div>
+<p>
+ Reference to the thread attributes accesor.
+ </p>
+<pre class="programlisting"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_attr_type</span><span class="special">&amp;</span> <span class="identifier">attributes</span><span class="special">();</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ A reference to the thread attributes.
+ </p></dd>
+<dt><span class="term">Complexity:</span></dt>
+<dd><p>
+ constant.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.metafunction__launcher__handle___"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.metafunction__launcher__handle___" title="Metafunction
+ launcher::handle&lt;&gt;">Metafunction
+ <code class="computeroutput"><span class="identifier">launcher</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a>
+</h6></div></div></div>
+<p>
+ Metafunction that returns the result type of the fork function applied
+ to a launcher and the value type.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ L::handle&lt;T&gt;::type
+ </p></dd>
+<dt><span class="term">Return type:</span></dt>
+<dd><p>
+ A unique_future&lt;T&gt;.
+ </p></dd>
+<dt><span class="term">Complexity:</span></dt>
+<dd><p>
+ constant.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.member_function__lancher__fork_"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__launcher__.member_function__lancher__fork_" title="Member
+ function lancher::fork">Member
+ function <code class="computeroutput"><span class="identifier">lancher</span><span class="special">::</span><span class="identifier">fork</span></code></a>
+</h6></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+<span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+<span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ A unique_future to the result of calling a function F.
+ </p></dd>
+<dt><span class="term">Effects:</span></dt>
+<dd><p>
+ create a thread executing the function f. The result of the function
+ will be stored on the resulting future.
+ </p></dd>
+</dl>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__" title="Class
+ shared_launcher ">Class
+ <code class="computeroutput"><span class="identifier">shared_launcher</span> </code></a>
+</h5></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__.member_function__shared_launcher__attributes_">Member
+ function <code class="computeroutput"><span class="identifier">shared_launcher</span><span class="special">::</span><span class="identifier">attributes</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__.metafunction__shared_launcher__handle___">Metafunction
+ <code class="computeroutput"><span class="identifier">shared_launcher</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__.member_function__lancher__fork_">Member
+ function <code class="computeroutput"><span class="identifier">lancher</span><span class="special">::</span><span class="identifier">fork</span></code></a></span></dt>
+</dl></div>
+<p>
+ Thread shared_launcher using a common configuration managed with the
+ thread attributes and returning on the fork operation a unique_future
+ to the resulting type of the call to the threaded function.
+ </p>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">shared_launcher</span> <span class="special">{</span>
+<span class="keyword">public</span><span class="special">:</span>
+ <span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_attr_type</span><span class="special">&amp;</span> <span class="identifier">attr</span><span class="special">();</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+ <span class="special">};</span>
+
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
+ <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">&lt;</span><span class="identifier">F</span><span class="special">()&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span>
+ <span class="identifier">fork</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span>
+<span class="special">};</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__.member_function__shared_launcher__attributes_"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__.member_function__shared_launcher__attributes_" title="Member
+ function shared_launcher::attributes">Member
+ function <code class="computeroutput"><span class="identifier">shared_launcher</span><span class="special">::</span><span class="identifier">attributes</span></code></a>
+</h6></div></div></div>
+<p>
+ Reference to the thread attributes accesor.
+ </p>
+<pre class="programlisting"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_attr_type</span><span class="special">&amp;</span> <span class="identifier">attributes</span><span class="special">();</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Returns:</span></dt>
+<dd><p>
+ A reference to the thread attributes.
+ </p></dd>
+<dt><span class="term">Complexity:</span></dt>
+<dd><p>
+ constant.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h6 class="title">
+<a name="toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__.metafunction__shared_launcher__handle___"></a><a href="ae_act_models_reference.html#toward_boost_async.reference.ae_act_models_reference.launcher_hpp.class__shared_launcher__.metafunction__shared_launcher__handle___" title="Metafunction
+ shared_launcher::handle&lt;&gt;">Metafunction
+ <code class="computeroutput"><span class="identifier">shared_launcher</span><span class="special">::</span><span class="identifier">handle</span><span class="special">&lt;&gt;</span></code></a>
+</h6></div></div></div>
+<p>
+ Metafunction that returns the result type of the fork function applied
+ to a shared_launcher and the value type.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">handle</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">unique_future</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl>
+<dt><span class="term">Expression:</span></dt>
+<dd><p>
+ L::handle&lt;T&gt;::type
+ </p>