]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/multi_index/doc/release_notes.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / multi_index / doc / release_notes.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
2
3 <html>
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
6 <title>Boost.MultiIndex Documentation - Release notes</title>
7 <link rel="stylesheet" href="style.css" type="text/css">
8 <link rel="start" href="index.html">
9 <link rel="prev" href="future_work.html">
10 <link rel="up" href="index.html">
11 <link rel="next" href="acknowledgements.html">
12 </head>
13
14 <body>
15 <h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align=
16 "middle" width="277" height="86">Boost.MultiIndex Release notes</h1>
17
18 <div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
19 Future work
20 </a></div>
21 <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
22 Index
23 </a></div>
24 <div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
25 Acknowledgements
26 </a></div><br clear="all" style="clear: all;">
27
28 <hr>
29
30 <h2>Contents</h2>
31
32 <ul>
33 <li><a href="#boost_1_60">Boost 1.60 release</a></li>
34 <li><a href="#boost_1_59">Boost 1.59 release</a></li>
35 <li><a href="#boost_1_58">Boost 1.58 release</a></li>
36 <li><a href="#boost_1_57">Boost 1.57 release</a></li>
37 <li><a href="#boost_1_56">Boost 1.56 release</a></li>
38 <li><a href="#boost_1_55">Boost 1.55 release</a></li>
39 <li><a href="#boost_1_54">Boost 1.54 release</a></li>
40 <li><a href="#boost_1_49">Boost 1.49 release</a></li>
41 <li><a href="#boost_1_48">Boost 1.48 release</a></li>
42 <li><a href="#boost_1_47">Boost 1.47 release</a></li>
43 <li><a href="#boost_1_44">Boost 1.44 release</a></li>
44 <li><a href="#boost_1_43">Boost 1.43 release</a></li>
45 <li><a href="#boost_1_42">Boost 1.42 release</a></li>
46 <li><a href="#boost_1_41">Boost 1.41 release</a></li>
47 <li><a href="#boost_1_38">Boost 1.38 release</a></li>
48 <li><a href="#boost_1_37">Boost 1.37 release</a></li>
49 <li><a href="#boost_1_36">Boost 1.36 release</a></li>
50 <li><a href="#boost_1_35">Boost 1.35 release</a></li>
51 <li><a href="#boost_1_34">Boost 1.34 release</a></li>
52 <li><a href="#boost_1_33_1">Boost 1.33.1 release</a></li>
53 <li><a href="#boost_1_33">Boost 1.33 release</a></li>
54 </ul>
55
56 <h2><a name="boost_1_60">Boost 1.60 release</a></h2>
57
58 <p>
59 <ul>
60 <li>Fixed an interoperability problem with <a href="http://www.qt.io/">Qt</a> due to the
61 optional definition of a macro with name <code>foreach</code> in this framework.</li>
62 <li>Maintenance fixes.</li>
63 </ul>
64 </p>
65
66 <h2><a name="boost_1_59">Boost 1.59 release</a></h2>
67
68 <p>
69 <ul>
70 <li>Added <a href="tutorial/indices.html#rnk_indices">ranked indices</a>.</li>
71 <li>Maintenance fixes.</li>
72 </ul>
73 </p>
74
75 <h2><a name="boost_1_58">Boost 1.58 release</a></h2>
76
77 <p>
78 <ul>
79 <li>The efficiency of lookup operations has improved in situations where they involve
80 the generation of temporary values of <code>key_type</code>. Consider for instance
81 the following code:
82 <blockquote><pre>
83 <span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
84 <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>,</span>
85 <span class=identifier>indexed_by</span><span class=special>&lt;</span>
86 <span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>identity</span><span class=special>&lt;</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>&gt;</span> <span class=special>&gt;</span>
87 <span class=special>&gt;</span>
88 <span class=special>&gt;</span> <span class=identifier>multi_t</span><span class=special>;</span>
89 <span class=special>...</span>
90 <span class=identifier>multi_t</span> <span class=identifier>m</span><span class=special>=...;</span>
91 <span class=identifier>m</span><span class=special>.</span><span class=identifier>find</span><span class=special>(</span><span class=string>&quot;boost&quot;</span><span class=special>);</span> <span class=comment>// passed a const char*, not a std::string</span>
92 </pre></blockquote>
93 In previous versions of the library, the <code>find</code> operation generates
94 several temporary <code>std::string</code>s (one every time an internal comparison is made).
95 In sufficiently advanced compilers, this is now avoided so that only one temporary is
96 created.
97 </li>
98 <li>Maintenance fixes.</li>
99 </ul>
100 </p>
101
102 <h2><a name="boost_1_57">Boost 1.57 release</a></h2>
103
104 <p>
105 <ul>
106 <li>When <code>std::tuple</code>s are available, these can be used for lookup operations
107 in indices equipped with composite keys. <code>boost::tuple</code>s are also supported
108 for backwards compatibility.
109 </li>
110 </ul>
111 </p>
112
113 <h2><a name="boost_1_56">Boost 1.56 release</a></h2>
114
115 <p>
116 <ul>
117 <li>The <code>erase(iterator)</code> member function of hashed indices
118 used to have poor performance under low load conditions due to the requirement
119 that an iterator to the next element must be returned (see ticket
120 <a href="https://svn.boost.org/trac/boost/ticket/4264">#4264</a>). In accordance with
121 the resolution of <a href="http://lwg.github.io/issues/lwg-closed.html#579">LWG
122 issue #579</a>, this problem has been fixed while maintaining the interface of
123 <code>erase</code>, at the expense of using one more
124 word of memory per element. In fact, C++ complexity requirements on unordered
125 associative containers have been improved for hashed indices so that
126 <ul>
127 <li>deletion of a given element is unconditionally constant-time,</li>
128 <li>worst-case performance is not <code>O(n)</code> but <code>O(n<sub>dist</sub>)</code>,
129 where <code>n<sub>dist</sub></code> is the number of non-equivalent elements in the index.
130 </li>
131 </ul>
132 Due to the fact that hashed indices rely on a new data structure, the internal representation of
133 their iterators and local iterators have changed, which affects serialization: their corresponding
134 serialization <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
135 bumped from 0 to 1. Old archives involving hashed index (local) iterators can be loaded
136 by Boost 1.56 version of Boost.MultiIndex, but not the other way around.
137 </li>
138 <li>Hashed indices now provide <code>reserve</code>.</li>
139 <li>Hashed indices can now be checked for equality and inequality following the
140 (suitably adapted) C++ standard specification in <b>[unord.req]</b>.</li>
141 <li>The public interface of Boost.MultiIndex provide <code>noexcept</code> specifications
142 where appropriate (for compliant compilers).
143 </li>
144 <li>Improved performance of failed insertions into a <code>multi_index_container</code>.</li>
145 <li>Much internal code aimed at supporting MSVC++ 7.0 and prior has been removed.
146 Compilation times without this legacy code might be slightly faster.
147 </li>
148 <li>Fixed a bug with insertion via iterators dereferencing to rvalues
149 (ticket <a href="https://svn.boost.org/trac/boost/ticket/9665">#9665</a>).
150 </li>
151 <li>Made Boost.MultiIndex compatible with <code>BOOST_BIND_NO_PLACEHOLDERS</code>
152 (ticket <a href="https://svn.boost.org/trac/boost/ticket/9798">#9798</a>).
153 </li>
154 <li>Maintenance fixes.</li>
155 </ul>
156 </p>
157
158 <h2><a name="boost_1_55">Boost 1.55 release</a></h2>
159
160 <p>
161 <ul>
162 <li>Boost.MultiIndex has been brought to a higher level of compliance
163 with C++11.
164 <ul>
165 <li><code>multi_index_container</code> is now efficiently movable.</li>
166 <li>Initializer lists supported.</li>
167 <li>Emplace functions provided.</li>
168 <li>Non-copyable elements (such as <code>std::unique_ptr&lt;T&gt;</code>) supported. This includes
169 insertion of a range [<code>first</code>,<code>last</code>) where the iterators point to a type that is
170 convertible to that of the element: no copy construction happens in the process.
171 </li>
172 <li>Random access indices provide <code>shrink_to_fit()</code>.</li>
173 </ul>
174 Refer to the <a href="compiler_specifics.html">compiler specifics</a> section for limitations
175 on pre-C++11 compilers.
176 </li>
177 <li>The following classes are deprecated:
178 <ul>
179 <li><a href="reference/key_extraction.html#member_offset"><code>member_offset</code></a>,</li>
180 <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>const_mem_fun_explicit</code></a>,</li>
181 <li><a href="reference/key_extraction.html#const_mem_fun_explicit"><code>mem_fun_explicit</code></a>,</li>
182 <li><a href="reference/key_extraction.html#composite_key_result_equal_to"><code>composite_key_result_equal_to</code></a>,</li>
183 <li><a href="reference/key_extraction.html#composite_key_result_less"><code>composite_key_result_less</code></a>,</li>
184 <li><a href="reference/key_extraction.html#composite_key_result_greater"><code>composite_key_result_greater</code></a>,</li>
185 <li><a href="reference/key_extraction.html#composite_key_result_hash"><code>composite_key_result_hash</code></a>.</li>
186 </ul>
187 </li>
188 <li>Maintenance fixes.</li>
189 </ul>
190 </p>
191
192 <h2><a name="boost_1_54">Boost 1.54 release</a></h2>
193
194 <p>
195 <ul>
196 <li>Suppressed some potential warnings described in
197 tickets <a href="https://svn.boost.org/trac/boost/ticket/8034">#8034</a> and <a href="https://svn.boost.org/trac/boost/ticket/8129">#8129</a>.
198 </li>
199 <li>Maintenance fixes.</li>
200 </ul>
201 </p>
202
203 <h2><a name="boost_1_49">Boost 1.49 release</a></h2>
204
205 <p>
206 <ul>
207 <li>Suppressed a potential narrow conversion warning described in
208 ticket <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>.
209 </li>
210 </ul>
211 </p>
212
213 <h2><a name="boost_1_48">Boost 1.48 release</a></h2>
214
215 <p>
216 <ul>
217 <li>Fixed a compatibility problem with
218 <a href="../../../doc/html/foreach.html">Boost.Foreach</a>
219 (ticket <a href="https://svn.boost.org/trac/boost/ticket/5741">#5741</a>).
220 </li>
221 </ul>
222 </p>
223
224 <h2><a name="boost_1_47">Boost 1.47 release</a></h2>
225
226 <p>
227 <ul>
228 <li>Fixed an ADL problem in
229 <a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
230 related with <a href="../../../doc/html/ref.html">Boost.Ref</a>.
231 </li>
232 <li>Maintenance fixes.</li>
233 </ul>
234 </p>
235
236 <h2><a name="boost_1_44">Boost 1.44 release</a></h2>
237
238 <p>
239 <ul>
240 <li>
241 Fixed a bug preventing the use of <code>modify_key</code> with
242 rollback in <a href="reference/ord_indices.html#modify_key">ordered</a> and
243 <a href="reference/hash_indices.html#modify_key">hashed</a> indices when
244 <code>Modifier</code> and <code>Rollback</code> are different types
245 (ticket <a href="https://svn.boost.org/trac/boost/ticket/4130">#4130</a>).
246 </li>
247 </ul>
248 </p>
249
250 <h2><a name="boost_1_43">Boost 1.43 release</a></h2>
251
252 <p>
253 <ul>
254 <li>
255 <a href="../../serialization/doc/serialization.html#constructors">Serialization
256 of non default constructible values</a> is now properly supported
257 through user-provided facilities <code>save_construct_data</code> and
258 <code>load_construct_data</code>.
259 <code>multi_index_container</code> serialization
260 <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
261 bumped from 1 to 2.
262 </li>
263 </ul>
264 </p>
265
266 <h2><a name="boost_1_42">Boost 1.42 release</a></h2>
267
268 <p>
269 <ul>
270 <li>Maintenance fixes.</li>
271 </ul>
272 </p>
273
274 <h2><a name="boost_1_41">Boost 1.41 release</a></h2>
275 <p>
276 <ul>
277 <li>Serialization now uses the portable
278 <a href="../../serialization/doc/wrappers.html#collection_size_type"><code>collection_size_type</code></a>
279 type instead of the original <code>std::size_t</code> (ticket
280 <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>).
281 <code>multi_index_container</code> serialization
282 <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been
283 bumped from 0 to 1.
284 </li>
285 <li>Fixed a concurrency bug in the implementation of
286 <a href="tutorial/debug.html#safe_mode">safe mode</a>
287 (ticket <a href="https://svn.boost.org/trac/boost/ticket/3462">#3462</a>).
288 </li>
289 </ul>
290 </p>
291
292 <h2><a name="boost_1_38">Boost 1.38 release</a></h2>
293
294 <p>
295 <ul>
296 <li>These constructs are deprecated:
297 <ul>
298 <li><code>nth_index_iterator&lt;MultiIndexContainer,N&gt;::type</code>,</li>
299 <li><code>multi_index_container&lt;...&gt;::nth_index_iterator&lt;N&gt;::type</code>,</li>
300 <li><code>nth_index_const_iterator&lt;MultiIndexContainer,N&gt;::type</code>,</li>
301 <li><code>multi_index_container&lt;...&gt;::nth_index_const_iterator&lt;N&gt;::type</code>,</li>
302 <li><code>index_iterator&lt;MultiIndexContainer,Tag&gt;::type</code>,</li>
303 <li><code>multi_index_container&lt;...&gt;::index_iterator&lt;Tag&gt;::type</code>,</li>
304 <li><code>index_const_iterator&lt;MultiIndexContainer,Tag&gt;::type</code>,</li>
305 <li><code>multi_index_container&lt;...&gt;::index_const_iterator&lt;Tag&gt;::type</code>.</li>
306 </ul>
307 Use the following instead:
308 <ul>
309 <li><code>nth_index&lt;MultiIndexContainer,N&gt;::type::iterator</code>,</li>
310 <li><code>multi_index_container&lt;...&gt;::nth_index&lt;N&gt;::type::iterator</code>,</li>
311 <li><code>nth_index&lt;MultiIndexContainer,N&gt;::type::const_iterator</code>,</li>
312 <li><code>multi_index_container&lt;...&gt;::nth_index&lt;N&gt;::type::const_iterator</code>,</li>
313 <li><code>index&lt;MultiIndexContainer,Tag&gt;::type::iterator</code>,</li>
314 <li><code>multi_index_container&lt;...&gt;::index&lt;Tag&gt;::type::iterator</code>,</li>
315 <li><code>index&lt;MultiIndexContainer,Tag&gt;::type::const_iterator</code>,</li>
316 <li><code>multi_index_container&lt;...&gt;::index&lt;Tag&gt;::type::const_iterator</code>.</li>
317 </ul>
318 </li>
319 <li>Maintenance fixes.</li>
320 </ul>
321 </p>
322
323 <h2><a name="boost_1_37">Boost 1.37 release</a></h2>
324
325 <p>
326 <ul>
327 <li>Maintenance fixes.</li>
328 </ul>
329 </p>
330
331 <h2><a name="boost_1_36">Boost 1.36 release</a></h2>
332
333 <p>
334 <ul>
335 <li><a name="stable_update">On prior versions of the library, the <a href="tutorial/indices.html#hash_updating">update
336 member functions</a> of hashed indices could alter the position of an element even if the
337 associated key did not change with the update. This is legal but probably unexpected behavior.
338 The functions have been rewritten to provide the additional guarantee that elements with
339 unmodified key will not change position in hashed indices, just as always was the case with
340 ordered indices. These guarantees are now documented in the reference.</a></li>
341 <li>Added the constructor <code>multi_index_container::multi_index_container(const allocator_type&amp;)</code>
342 to mimic the equivalent interface in STL sequence containers.
343 <li>Maintenance fixes.</li>
344 </ul>
345 </p>
346
347 <h2><a name="boost_1_35">Boost 1.35 release</a></h2>
348
349 <p>
350 <ul>
351 <li>New <a href="tutorial/key_extraction.html#global_fun"><code>global_fun</code></a>
352 predefined key extractor.
353 </li>
354 <li>Added <a href="tutorial/indices.html#iterator_to"><code>iterator_to</code></a>
355 facility.
356 </li>
357 <li>Included <a href="tutorial/creation.html#special_allocator">support for
358 non-standard allocators</a> such as those of
359 <a href="../../interprocess/index.html">Boost.Interprocess</a>, which makes
360 <code>multi_index_container</code>s placeable in shared memory.
361 </li>
362 <li>New versions of <code>modify</code> and <code>modify_key</code> with
363 rollback, as described in the
364 <a href="tutorial/basics.html#ord_updating">tutorial</a>.
365 </li>
366 <li>Indices provide the new <code>cbegin</code>, <code>cend</code> and,
367 when applicable, <code>crbegin</code> and <code>crend</code>
368 member functions, in accordance with the latest drafts of the next
369 revision of the C++ standard.
370 </li>
371 <li>Hinted insertion in ordered indices fully conforms to the resolutions of
372 C++ Standard Library
373 <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233">Defect
374 Report 233</a>. The new requirement that the point of insertion
375 be always as close as possible to the hint induces a different behavior than
376 exhibited in former releases of Boost.MultiIndex, which can potentially cause
377 backwards compatibility problems; in any case, the likelihood of these
378 compatibility issues arising in a real scenario is very low.
379 </li>
380 <li>Sequenced and random access indices now follow the requirements of the
381 C++ standard for sequence containers with respect to the operations
382 <code>assign(f,l)</code> and <code>insert(p,f,l)</code> (23.1.1/9): if
383 <code>f</code> and <code>l</code> are of the same integral type, the
384 iterator-based overloads of these member functions are avoided:
385 <blockquote><pre>
386 <span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
387 <span class=keyword>int</span><span class=special>,</span><span class=identifier>indexed_by</span><span class=special>&lt;</span><span class=identifier>sequenced</span><span class=special>&lt;&gt;</span> <span class=special>&gt;</span>
388 <span class=special>&gt;</span> <span class=identifier>sequenced_container</span><span class=special>;</span>
389
390 <span class=identifier>std</span><span class=special>::</span><span class=identifier>list</span><span class=special>&lt;</span><span class=keyword>int</span><span class=special>&gt;</span> <span class=identifier>l</span><span class=special>(...);</span>
391 <span class=identifier>sequenced_container</span> <span class=identifier>c</span><span class=special>;</span>
392
393 <span class=comment>// iterator-based overload of assign</span>
394 <span class=identifier>c</span><span class=special>.</span><span class=identifier>assign</span><span class=special>(</span><span class=identifier>l</span><span class=special>.</span><span class=identifier>begin</span><span class=special>(),</span><span class=identifier>l</span><span class=special>.</span><span class=identifier>end</span><span class=special>());</span>
395
396 <span class=comment>// The following is equivalent to
397 // c.assign(
398 // static_cast&lt;sequenced_container::size_type&gt;(10),100);
399 // that is, &quot;10&quot; and &quot;100&quot; are not taken to be iterators as
400 // in the previous expression.</span>
401 <span class=identifier>c</span><span class=special>.</span><span class=identifier>assign</span><span class=special>(</span><span class=number>10</span><span class=special>,</span><span class=number>100</span><span class=special>);</span>
402 </pre></blockquote>
403 </li>
404 <li>The performance of ordered indices <code>range</code> and
405 <code>equal_range</code> has been improved.
406 </li>
407 <li>Maintenance fixes.</li>
408 </ul>
409 </p>
410
411 <h2><a name="boost_1_34">Boost 1.34 release</a></h2>
412
413 <p>
414 <ul>
415 <li>Added <a href="tutorial/indices.html#rnd_indices">random access
416 indices</a>.
417 </li>
418 <li>Non key-based indices provide new
419 <a href="tutorial/indices.html#rearrange">rearrange facilities</a>
420 allowing for interaction with external mutating algorithms.
421 </li>
422 <li>All predefined Boost.MultiIndex key extractors
423 instantiated for a given type <code>T</code> can handle objects of types
424 derived from or convertible to <code>T</code> (and
425 <a href="reference/key_extraction.html#chained_pointers">chained pointers</a>
426 to those). Previously, only objects of the exact type specified (along with
427 <code>reference_wrapper</code>s and chained pointers to them) were accepted.
428 </li>
429 <li><a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a>
430 and related classes accept operands not included in tuples as if they were passed
431 in a tuple of length 1; this allows the user to omit tuple enclosing in
432 lookup operations involving composite keys when only the first key is provided.
433 </li>
434 <li>The core algorithms of ordered indices have been optimized, yielding
435 an estimated reduction of about 5% in insertion times.
436 </li>
437 <li>Size of ordered indices node headers have been reduced by 25% on
438 most platforms, using a well known
439 <a href="tutorial/indices.html#ordered_node_compression">optimization
440 technique</a>.
441 </li>
442 <li>The tutorial has been restructured, new examples added.</li>
443 <li>Maintenance fixes.</li>
444 </ul>
445 </p>
446
447 <h2><a name="boost_1_33_1">Boost 1.33.1 release</a></h2>
448
449 <p>
450 <ul>
451 <li>For ordered and hashed indices, <code>erase(it)</code> and
452 <code>erase(first,last)</code> now return an iterator to the element
453 following those being deleted (previously nothing was returned), in
454 accordance with the C++ Standard Library
455 <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#130">Defect
456 Report 130</a> and issue 6.19 of TR1
457 <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf">Issues
458 List</a>.
459 </li>
460 <li>Boost.MultiIndex offers the usual guarantees with respect to
461 multithreading code provided by most STL implementations:
462 <ol>
463 <li>Concurrent access to different containers is safe.</li>
464 <li>Concurrent read-only access to the same container is safe.</li>
465 </ol>
466 In previous versions of the library, the latter guarantee was not properly
467 maintained if the <a href="tutorial/debug.html#safe_mode">safe
468 mode</a> was set. This problem has been fixed now.
469 </li>
470 <li>Maintenance fixes.</li>
471 </ul>
472 </p>
473
474 <h2><a name="boost_1_33">Boost 1.33 release</a></h2>
475
476 <p>
477 <ul>
478 <li>Added <a href="tutorial/indices.html#hashed_indices">hashed indices</a>,
479 whose interface is based on the specification for unordered associative
480 containers by the C++ Standard Library Technical Report (TR1).
481 </li>
482 <li>Added <a href="tutorial/creation.html#serialization">serialization support</a>
483 for <a href="../../serialization/index.html">Boost.Serialization</a>.
484 </li>
485 <li>Destruction of <code>multi_index_container</code>s and <code>clear</code>
486 memfuns now perform faster.
487 </li>
488 <li>Internal changes aimed at reducing the length of symbol names generated
489 by the compiler; cuts of up to a 50% can be achieved with respect to the
490 Boost 1.32 release. This results in much shorter and more readable error
491 messages and has also a beneficial impact on compilers with strict limits on
492 symbol name lengths. Additionally, a section on further
493 <a href="compiler_specifics.html#symbol_reduction">reduction of symbol name
494 lengths</a> has been added.
495 </li>
496 <li>Restructured some parts of the documentation, new examples.</li>
497 <li>Maintenance fixes.</li>
498 </ul>
499 </p>
500
501 <hr>
502
503 <div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br>
504 Future work
505 </a></div>
506 <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
507 Index
508 </a></div>
509 <div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br>
510 Acknowledgements
511 </a></div><br clear="all" style="clear: all;">
512
513 <br>
514
515 <p>Revised October 19th 2015</p>
516
517 <p>&copy; Copyright 2003-2015 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
518 Distributed under the Boost Software
519 License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
520 LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
521 http://www.boost.org/LICENSE_1_0.txt</a>)
522 </p>
523
524 </body>
525 </html>