Imported Upstream version 1.64.0
[platform/upstream/boost.git] / libs / fiber / doc / html / fiber / fiber_mgmt.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Fiber management</title>
5 <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../index.html" title="Chapter&#160;1.&#160;Fiber">
8 <link rel="up" href="../index.html" title="Chapter&#160;1.&#160;Fiber">
9 <link rel="prev" href="overview.html" title="Overview">
10 <link rel="next" href="fiber_mgmt/fiber.html" title="Class fiber">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="overview.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="fiber_mgmt/fiber.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="fiber.fiber_mgmt"></a><a class="link" href="fiber_mgmt.html" title="Fiber management">Fiber management</a>
28 </h2></div></div></div>
29 <div class="toc"><dl class="toc">
30 <dt><span class="section"><a href="fiber_mgmt/fiber.html">Class
31       <code class="computeroutput"><span class="identifier">fiber</span></code></a></span></dt>
32 <dt><span class="section"><a href="fiber_mgmt/id.html">Class fiber::id</a></span></dt>
33 <dt><span class="section"><a href="fiber_mgmt/this_fiber.html">Namespace this_fiber</a></span></dt>
34 </dl></div>
35 <h4>
36 <a name="fiber.fiber_mgmt.h0"></a>
37       <span class="phrase"><a name="fiber.fiber_mgmt.synopsis"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.synopsis">Synopsis</a>
38     </h4>
39 <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">fiber</span><span class="special">/</span><span class="identifier">all</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
40
41 <span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
42 <span class="keyword">namespace</span> <span class="identifier">fibers</span> <span class="special">{</span>
43
44 <span class="keyword">class</span> <span class="identifier">fiber</span><span class="special">;</span>
45 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">fiber</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
46 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span> <span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="identifier">l</span><span class="special">,</span> <span class="identifier">fiber</span> <span class="special">&amp;</span> <span class="identifier">r</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
47
48 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">SchedAlgo</span><span class="special">,</span> <span class="keyword">typename</span> <span class="special">...</span> <span class="identifier">Args</span> <span class="special">&gt;</span>
49 <span class="keyword">void</span> <span class="identifier">use_scheduling_algorithm</span><span class="special">(</span> <span class="identifier">Args</span> <span class="special">&amp;&amp;</span> <span class="special">...</span> <span class="identifier">args</span><span class="special">);</span>
50 <span class="keyword">bool</span> <span class="identifier">has_ready_fibers</span><span class="special">();</span>
51
52 <span class="keyword">namespace</span> <span class="identifier">algo</span> <span class="special">{</span>
53
54 <span class="keyword">struct</span> <span class="identifier">algorithm</span><span class="special">;</span>
55 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">&gt;</span>
56 <span class="keyword">struct</span> <span class="identifier">algorithm_with_properties</span><span class="special">;</span>
57 <span class="keyword">class</span> <span class="identifier">round_robin</span><span class="special">;</span>
58 <span class="keyword">class</span> <span class="identifier">shared_round_robin</span><span class="special">;</span>
59
60 <span class="special">}</span>
61
62 <span class="keyword">namespace</span> <span class="identifier">this_fiber</span> <span class="special">{</span>
63
64 <span class="identifier">fibers</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span>
65 <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">();</span>
66 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Duration</span> <span class="special">&gt;</span>
67 <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special">&lt;</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span> <span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">abs_time</span><span class="special">)</span>
68 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Period</span> <span class="special">&gt;</span>
69 <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special">&lt;</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span> <span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">rel_time</span><span class="special">);</span>
70 <span class="keyword">template</span><span class="special">&lt;</span> <span class="keyword">typename</span> <span class="identifier">PROPS</span> <span class="special">&gt;</span>
71 <span class="identifier">PROPS</span> <span class="special">&amp;</span> <span class="identifier">properties</span><span class="special">();</span>
72
73 <span class="special">}}</span>
74 </pre>
75 <h4>
76 <a name="fiber.fiber_mgmt.h1"></a>
77       <span class="phrase"><a name="fiber.fiber_mgmt.tutorial"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.tutorial">Tutorial</a>
78     </h4>
79 <p>
80       Each <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> represents a micro-thread which will be launched and managed
81       cooperatively by a scheduler. Objects of type <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> are move-only.
82     </p>
83 <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f1</span><span class="special">;</span> <span class="comment">// not-a-fiber</span>
84
85 <span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{</span>
86     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f2</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">);</span>
87
88     <span class="identifier">f1</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">move</span><span class="special">(</span> <span class="identifier">f2</span><span class="special">);</span> <span class="comment">// f2 moved to f1</span>
89 <span class="special">}</span>
90 </pre>
91 <h4>
92 <a name="fiber.fiber_mgmt.h2"></a>
93       <span class="phrase"><a name="fiber.fiber_mgmt.launching"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.launching">Launching</a>
94     </h4>
95 <p>
96       A new fiber is launched by passing an object of a callable type that can be
97       invoked with no parameters. If the object must not be copied or moved, then
98       <span class="emphasis"><em>std::ref</em></span> can be used to pass in a reference to the function
99       object. In this case, the user must ensure that the referenced object outlives
100       the newly-created fiber.
101     </p>
102 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">callable</span> <span class="special">{</span>
103     <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()();</span>
104 <span class="special">};</span>
105
106 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">copies_are_safe</span><span class="special">()</span> <span class="special">{</span>
107     <span class="identifier">callable</span> <span class="identifier">x</span><span class="special">;</span>
108     <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">x</span><span class="special">);</span>
109 <span class="special">}</span> <span class="comment">// x is destroyed, but the newly-created fiber has a copy, so this is OK</span>
110
111 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">oops</span><span class="special">()</span> <span class="special">{</span>
112     <span class="identifier">callable</span> <span class="identifier">x</span><span class="special">;</span>
113     <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span> <span class="identifier">x</span><span class="special">)</span> <span class="special">);</span>
114 <span class="special">}</span> <span class="comment">// x is destroyed, but the newly-created fiber still has a reference</span>
115   <span class="comment">// this leads to undefined behaviour</span>
116 </pre>
117 <p>
118       The spawned <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> does not immediately start running. It is enqueued
119       in the list of ready-to-run fibers, and will run when the scheduler gets around
120       to it.
121     </p>
122 <a name="exceptions"></a><h4>
123 <a name="fiber.fiber_mgmt.h3"></a>
124       <span class="phrase"><a name="fiber.fiber_mgmt.exceptions"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.exceptions">Exceptions</a>
125     </h4>
126 <p>
127       An exception escaping from the function or callable object passed to the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a>
128 constructor
129       calls <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>.
130       If you need to know which exception was thrown, use <a class="link" href="synchronization/futures/future.html#class_future"><code class="computeroutput">future&lt;&gt;</code></a> or
131       <a class="link" href="synchronization/futures/packaged_task.html#class_packaged_task"><code class="computeroutput">packaged_task&lt;&gt;</code></a>.
132     </p>
133 <h4>
134 <a name="fiber.fiber_mgmt.h4"></a>
135       <span class="phrase"><a name="fiber.fiber_mgmt.detaching"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.detaching">Detaching</a>
136     </h4>
137 <p>
138       A <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> can be detached by explicitly invoking the <a class="link" href="fiber_mgmt/fiber.html#fiber_detach"><code class="computeroutput">fiber::detach()</code></a> member
139       function. After <a class="link" href="fiber_mgmt/fiber.html#fiber_detach"><code class="computeroutput">fiber::detach()</code></a> is called on a fiber object, that
140       object represents <span class="emphasis"><em>not-a-fiber</em></span>. The fiber object may then
141       safely be destroyed.
142     </p>
143 <pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">).</span><span class="identifier">detach</span><span class="special">();</span>
144 </pre>
145 <p>
146       <span class="bold"><strong>Boost.Fiber</strong></span> provides a number of ways to wait
147       for a running fiber to complete. You can coordinate even with a detached fiber
148       using a <a class="link" href="synchronization/mutex_types.html#class_mutex"><code class="computeroutput">mutex</code></a>, or <a class="link" href="synchronization/conditions.html#class_condition_variable"><code class="computeroutput">condition_variable</code></a>, or
149       any of the other <a class="link" href="synchronization.html#synchronization">synchronization objects</a>
150       provided by the library.
151     </p>
152 <p>
153       If a detached fiber is still running when the thread&#8217;s main fiber terminates,
154       the thread will not shut down.
155     </p>
156 <h4>
157 <a name="fiber.fiber_mgmt.h5"></a>
158       <span class="phrase"><a name="fiber.fiber_mgmt.joining"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.joining">Joining</a>
159     </h4>
160 <p>
161       In order to wait for a fiber to finish, the <a class="link" href="fiber_mgmt/fiber.html#fiber_join"><code class="computeroutput">fiber::join()</code></a> member function
162       of the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object can be used. <a class="link" href="fiber_mgmt/fiber.html#fiber_join"><code class="computeroutput">fiber::join()</code></a> will block
163       until the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object has completed.
164     </p>
165 <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">some_fn</span><span class="special">()</span> <span class="special">{</span>
166     <span class="special">...</span>
167 <span class="special">}</span>
168
169 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">);</span>
170 <span class="special">...</span>
171 <span class="identifier">f</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span>
172 </pre>
173 <p>
174       If the fiber has already completed, then <a class="link" href="fiber_mgmt/fiber.html#fiber_join"><code class="computeroutput">fiber::join()</code></a> returns immediately
175       and the joined <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object becomes <span class="emphasis"><em>not-a-fiber</em></span>.
176     </p>
177 <h4>
178 <a name="fiber.fiber_mgmt.h6"></a>
179       <span class="phrase"><a name="fiber.fiber_mgmt.destruction"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.destruction">Destruction</a>
180     </h4>
181 <p>
182       When a <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object representing a valid execution context (the fiber
183       is <a class="link" href="fiber_mgmt/fiber.html#fiber_joinable"><code class="computeroutput">fiber::joinable()</code></a>) is destroyed, the program terminates. If
184       you intend the fiber to outlive the <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> object that launched it,
185       use the <a class="link" href="fiber_mgmt/fiber.html#fiber_detach"><code class="computeroutput">fiber::detach()</code></a> method.
186     </p>
187 <pre class="programlisting"><span class="special">{</span>
188     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f</span><span class="special">(</span> <span class="identifier">some_fn</span><span class="special">);</span>
189 <span class="special">}</span> <span class="comment">// std::terminate() will be called</span>
190
191 <span class="special">{</span>
192     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">fibers</span><span class="special">::</span><span class="identifier">fiber</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">some_fn</span><span class="special">);</span>
193     <span class="identifier">f</span><span class="special">.</span><span class="identifier">detach</span><span class="special">();</span>
194 <span class="special">}</span> <span class="comment">// okay, program continues</span>
195 </pre>
196 <a name="class_fiber_id"></a><h4>
197 <a name="fiber.fiber_mgmt.h7"></a>
198       <span class="phrase"><a name="fiber.fiber_mgmt.fiber_ids"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.fiber_ids">Fiber
199       IDs</a>
200     </h4>
201 <p>
202       Objects of class <a class="link" href="fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a> can be
203       used to identify fibers. Each running <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a> has a unique <a class="link" href="fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a> obtainable
204       from the corresponding <a class="link" href="fiber_mgmt/fiber.html#class_fiber"><code class="computeroutput">fiber</code></a>
205 by calling the <a class="link" href="fiber_mgmt/fiber.html#fiber_get_id"><code class="computeroutput">fiber::get_id()</code></a> member
206       function. Objects of class <a class="link" href="fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a> can be
207       copied, and used as keys in associative containers: the full range of comparison
208       operators is provided. They can also be written to an output stream using the
209       stream insertion operator, though the output format is unspecified.
210     </p>
211 <p>
212       Each instance of <a class="link" href="fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a> either
213       refers to some fiber, or <span class="emphasis"><em>not-a-fiber</em></span>. Instances that refer
214       to <span class="emphasis"><em>not-a-fiber</em></span> compare equal to each other, but not equal
215       to any instances that refer to an actual fiber. The comparison operators on
216       <a class="link" href="fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a> yield a total order for every non-equal
217       <a class="link" href="fiber_mgmt.html#class_fiber_id"><code class="computeroutput"><span class="identifier">fiber</span><span class="special">::</span><span class="identifier">id</span></code></a>.
218     </p>
219 <a name="class_launch"></a><h4>
220 <a name="fiber.fiber_mgmt.h8"></a>
221       <span class="phrase"><a name="fiber.fiber_mgmt.enumeration__code__phrase_role__identifier__launch__phrase___code_"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt.enumeration__code__phrase_role__identifier__launch__phrase___code_">Enumeration
222       <code class="computeroutput"><span class="identifier">launch</span></code></a>
223     </h4>
224 <p>
225       <code class="computeroutput"><span class="identifier">launch</span></code> specifies whether control
226       passes immediately into a newly-launched fiber.
227     </p>
228 <pre class="programlisting"><span class="keyword">enum</span> <span class="keyword">class</span> <span class="identifier">launch</span> <span class="special">{</span>
229     <span class="identifier">dispatch</span><span class="special">,</span>
230     <span class="identifier">post</span>
231 <span class="special">};</span>
232 </pre>
233 <h4>
234 <a name="fiber.fiber_mgmt.h9"></a>
235       <span class="phrase"><a name="fiber.fiber_mgmt._code__phrase_role__identifier__dispatch__phrase___code_"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt._code__phrase_role__identifier__dispatch__phrase___code_"><code class="computeroutput"><span class="identifier">dispatch</span></code></a>
236     </h4>
237 <div class="variablelist">
238 <p class="title"><b></b></p>
239 <dl class="variablelist">
240 <dt><span class="term">Effects:</span></dt>
241 <dd><p>
242             A fiber launched with <code class="computeroutput"><span class="identifier">launch</span>
243             <span class="special">==</span> <span class="identifier">dispatch</span></code>
244             is entered immediately. In other words, launching a fiber with <code class="computeroutput"><span class="identifier">dispatch</span></code> suspends the caller (the previously-running
245             fiber) until the fiber scheduler has a chance to resume it later.
246           </p></dd>
247 </dl>
248 </div>
249 <h4>
250 <a name="fiber.fiber_mgmt.h10"></a>
251       <span class="phrase"><a name="fiber.fiber_mgmt._code__phrase_role__identifier__post__phrase___code_"></a></span><a class="link" href="fiber_mgmt.html#fiber.fiber_mgmt._code__phrase_role__identifier__post__phrase___code_"><code class="computeroutput"><span class="identifier">post</span></code></a>
252     </h4>
253 <div class="variablelist">
254 <p class="title"><b></b></p>
255 <dl class="variablelist">
256 <dt><span class="term">Effects:</span></dt>
257 <dd><p>
258             A fiber launched with <code class="computeroutput"><span class="identifier">launch</span>
259             <span class="special">==</span> <span class="identifier">post</span></code>
260             is passed to the fiber scheduler as ready, but it is not yet entered.
261             The caller (the previously-running fiber) continues executing. The newly-launched
262             fiber will be entered when the fiber scheduler has a chance to resume
263             it later.
264           </p></dd>
265 <dt><span class="term">Note:</span></dt>
266 <dd><p>
267             If <code class="computeroutput"><span class="identifier">launch</span></code> is not explicitly
268             specified, <code class="computeroutput"><span class="identifier">post</span></code> is the
269             default.
270           </p></dd>
271 </dl>
272 </div>
273 </div>
274 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
275 <td align="left"></td>
276 <td align="right"><div class="copyright-footer">Copyright &#169; 2013 Oliver Kowalke<p>
277         Distributed under the Boost Software License, Version 1.0. (See accompanying
278         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
279       </p>
280 </div></td>
281 </tr></table>
282 <hr>
283 <div class="spirit-nav">
284 <a accesskey="p" href="overview.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="fiber_mgmt/fiber.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
285 </div>
286 </body>
287 </html>