| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN"> |
| |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
| <title>Boost.MultiIndex Documentation - Release notes</title> |
| <link rel="stylesheet" href="style.css" type="text/css"> |
| <link rel="start" href="index.html"> |
| <link rel="prev" href="future_work.html"> |
| <link rel="up" href="index.html"> |
| <link rel="next" href="acknowledgements.html"> |
| </head> |
| |
| <body> |
| <h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align= |
| "middle" width="277" height="86">Boost.MultiIndex Release notes</h1> |
| |
| <div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br> |
| Future work |
| </a></div> |
| <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br> |
| Index |
| </a></div> |
| <div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br> |
| Acknowledgements |
| </a></div><br clear="all" style="clear: all;"> |
| |
| <hr> |
| |
| |
| <h2>Contents</h2> |
| |
| <ul> |
| <li><a href="#boost_1_44">Boost 1.44 release</a></li> |
| <li><a href="#boost_1_43">Boost 1.43 release</a></li> |
| <li><a href="#boost_1_42">Boost 1.42 release</a></li> |
| <li><a href="#boost_1_41">Boost 1.41 release</a></li> |
| <li><a href="#boost_1_38">Boost 1.38 release</a></li> |
| <li><a href="#boost_1_37">Boost 1.37 release</a></li> |
| <li><a href="#boost_1_36">Boost 1.36 release</a></li> |
| <li><a href="#boost_1_35">Boost 1.35 release</a></li> |
| <li><a href="#boost_1_34">Boost 1.34 release</a></li> |
| <li><a href="#boost_1_33_1">Boost 1.33.1 release</a></li> |
| <li><a href="#boost_1_33">Boost 1.33 release</a></li> |
| </ul> |
| |
| <h2><a name="boost_1_44">Boost 1.44 release</a></h2> |
| |
| <p> |
| <ul> |
| <li> |
| Fixed a bug preventing the use of <code>modify_key</code> with |
| rollback in <a href="reference/ord_indices.html#modify_key">ordered</a> and |
| <a href="reference/hash_indices.html#modify_key">hashed</a> indices when |
| <code>Modifier</code> and <code>Rollback</code> are different types |
| (ticket <a href="https://svn.boost.org/trac/boost/ticket/4130">#4130</a>). |
| </li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_43">Boost 1.43 release</a></h2> |
| |
| <p> |
| <ul> |
| <li> |
| <a href="../../serialization/doc/serialization.html#constructors">Serialization |
| of non default constructible values</a> is now properly supported |
| through user-provided facilities <code>save_construct_data</code> and |
| <code>load_construct_data</code>. |
| <code>multi_index_container</code> serialization |
| <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been |
| bumped from 1 to 2. |
| </li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_42">Boost 1.42 release</a></h2> |
| |
| <p> |
| <ul> |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_41">Boost 1.41 release</a></h2> |
| <p> |
| <ul> |
| <li>Serialization now uses the portable |
| <a href="../../serialization/doc/wrappers.html#collection_size_type"><code>collection_size_type</code></a> |
| type instead of the original <code>std::size_t</code> (ticket |
| <a href="https://svn.boost.org/trac/boost/ticket/3365">#3365</a>). |
| <code>multi_index_container</code> serialization |
| <a href="../../serialization/doc/tutorial.html#versioning">class version</a> has been |
| bumped from 0 to 1. |
| </li> |
| <li>Fixed a concurrency bug in the implementation of |
| <a href="tutorial/debug.html#safe_mode">safe mode</a> |
| (ticket <a href="https://svn.boost.org/trac/boost/ticket/3462">#3462</a>). |
| </li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_38">Boost 1.38 release</a></h2> |
| |
| <p> |
| <ul> |
| <li>These constructs are deprecated: |
| <ul> |
| <li><code>nth_index_iterator<MultiIndexContainer,N>::type</code>,</li> |
| <li><code>multi_index_container<...>::nth_index_iterator<N>::type</code>,</li> |
| <li><code>nth_index_const_iterator<MultiIndexContainer,N>::type</code>,</li> |
| <li><code>multi_index_container<...>::nth_index_const_iterator<N>::type</code>,</li> |
| <li><code>index_iterator<MultiIndexContainer,Tag>::type</code>,</li> |
| <li><code>multi_index_container<...>::index_iterator<Tag>::type</code>,</li> |
| <li><code>index_const_iterator<MultiIndexContainer,Tag>::type</code>,</li> |
| <li><code>multi_index_container<...>::index_const_iterator<Tag>::type</code>.</li> |
| </ul> |
| Use the following instead: |
| <ul> |
| <li><code>nth_index<MultiIndexContainer,N>::type::iterator</code>,</li> |
| <li><code>multi_index_container<...>::nth_index<N>::type::iterator</code>,</li> |
| <li><code>nth_index<MultiIndexContainer,N>::type::const_iterator</code>,</li> |
| <li><code>multi_index_container<...>::nth_index<N>::type::const_iterator</code>,</li> |
| <li><code>index<MultiIndexContainer,Tag>::type::iterator</code>,</li> |
| <li><code>multi_index_container<...>::index<Tag>::type::iterator</code>,</li> |
| <li><code>index<MultiIndexContainer,Tag>::type::const_iterator</code>,</li> |
| <li><code>multi_index_container<...>::index<Tag>::type::const_iterator</code>.</li> |
| </ul> |
| </li> |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_37">Boost 1.37 release</a></h2> |
| |
| <p> |
| <ul> |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_36">Boost 1.36 release</a></h2> |
| |
| <p> |
| <ul> |
| <li><a name="stable_update">On prior versions of the library, the <a href="tutorial/indices.html#hash_updating">update |
| member functions</a> of hashed indices could alter the position of an element even if the |
| associated key did not change with the update. This is legal but probably unexpected behavior. |
| The functions have been rewritten to provide the additional guarantee that elements with |
| unmodified key will not change position in hashed indices, just as always was the case with |
| ordered indices. These guarantees are now documented in the reference.</a></li> |
| <li>Added the constructor <code>multi_index_container::multi_index_container(const allocator_type&)</code> |
| to mimic the equivalent interface in STL sequence containers. |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_35">Boost 1.35 release</a></h2> |
| |
| <p> |
| <ul> |
| <li>New <a href="tutorial/key_extraction.html#global_fun"><code>global_fun</code></a> |
| predefined key extractor. |
| </li> |
| <li>Added <a href="tutorial/indices.html#iterator_to"><code>iterator_to</code></a> |
| facility. |
| </li> |
| <li>Included <a href="tutorial/creation.html#special_allocator">support for |
| non-standard allocators</a> such as those of |
| <a href="../../interprocess/index.html">Boost.Interprocess</a>, which makes |
| <code>multi_index_container</code>s placeable in shared memory. |
| </li> |
| <li>New versions of <code>modify</code> and <code>modify_key</code> with |
| rollback, as described in the |
| <a href="tutorial/basics.html#ord_updating">tutorial</a>. |
| </li> |
| <li>Indices provide the new <code>cbegin</code>, <code>cend</code> and, |
| when applicable, <code>crbegin</code> and <code>crend</code> |
| member functions, in accordance with the latest drafts of the next |
| revision of the C++ standard. |
| </li> |
| <li>Hinted insertion in ordered indices fully conforms to the resolutions of |
| C++ Standard Library |
| <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#233">Defect |
| Report 233</a>. The new requirement that the point of insertion |
| be always as close as possible to the hint induces a different behavior than |
| exhibited in former releases of Boost.MultiIndex, which can potentially cause |
| backwards compatibility problems; in any case, the likelihood of these |
| compatibility issues arising in a real scenario is very low. |
| </li> |
| <li>Sequenced and random access indices now follow the requirements of the |
| C++ standard for sequence containers with respect to the operations |
| <code>assign(f,l)</code> and <code>insert(p,f,l)</code> (23.1.1/9): if |
| <code>f</code> and <code>l</code> are of the same integral type, the |
| iterator-based overloads of these member functions are avoided: |
| <blockquote><pre> |
| <span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special><</span> |
| <span class=keyword>int</span><span class=special>,</span><span class=identifier>indexed_by</span><span class=special><</span><span class=identifier>sequenced</span><span class=special><></span> <span class=special>></span> |
| <span class=special>></span> <span class=identifier>sequenced_container</span><span class=special>;</span> |
| |
| <span class=identifier>std</span><span class=special>::</span><span class=identifier>list</span><span class=special><</span><span class=keyword>int</span><span class=special>></span> <span class=identifier>l</span><span class=special>(...);</span> |
| <span class=identifier>sequenced_container</span> <span class=identifier>c</span><span class=special>;</span> |
| |
| <span class=comment>// iterator-based overload of assign</span> |
| <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> |
| |
| <span class=comment>// The following is equivalent to |
| // c.assign( |
| // static_cast<sequenced_container::size_type>(10),100); |
| // that is, "10" and "100" are not taken to be iterators as |
| // in the previous expression.</span> |
| <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> |
| </pre></blockquote> |
| </li> |
| <li>The performance of ordered indices <code>range</code> and |
| <code>equal_range</code> has been improved. |
| </li> |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_34">Boost 1.34 release</a></h2> |
| |
| <p> |
| <ul> |
| <li>Added <a href="tutorial/indices.html#rnd_indices">random access |
| indices</a>. |
| </li> |
| <li>Non key-based indices provide new |
| <a href="tutorial/indices.html#rearrange">rearrange facilities</a> |
| allowing for interaction with external mutating algorithms. |
| </li> |
| <li>All predefined Boost.MultiIndex key extractors |
| instantiated for a given type <code>T</code> can handle objects of types |
| derived from or convertible to <code>T</code> (and |
| <a href="reference/key_extraction.html#chained_pointers">chained pointers</a> |
| to those). Previously, only objects of the exact type specified (along with |
| <code>reference_wrapper</code>s and chained pointers to them) were accepted. |
| </li> |
| <li><a href="reference/key_extraction.html#composite_key_compare"><code>composite_key_compare</code></a> |
| and related classes accept operands not included in tuples as if they were passed |
| in a tuple of length 1; this allows the user to omit tuple enclosing in |
| lookup operations involving composite keys when only the first key is provided. |
| </li> |
| <li>The core algorithms of ordered indices have been optimized, yielding |
| an estimated reduction of about 5% in insertion times. |
| </li> |
| <li>Size of ordered indices node headers have been reduced by 25% on |
| most platforms, using a well known |
| <a href="tutorial/indices.html#ordered_node_compression">optimization |
| technique</a>. |
| </li> |
| <li>The tutorial has been restructured, new examples added.</li> |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_33_1">Boost 1.33.1 release</a></h2> |
| |
| <p> |
| <ul> |
| <li>For ordered and hashed indices, <code>erase(it)</code> and |
| <code>erase(first,last)</code> now return an iterator to the element |
| following those being deleted (previously nothing was returned), in |
| accordance with the C++ Standard Library |
| <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#130">Defect |
| Report 130</a> and issue 6.19 of TR1 |
| <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1837.pdf">Issues |
| List</a>. |
| </li> |
| <li>Boost.MultiIndex offers the usual guarantees with respect to |
| multithreading code provided by most STL implementations: |
| <ol> |
| <li>Concurrent access to different containers is safe.</li> |
| <li>Concurrent read-only access to the same container is safe.</li> |
| </ol> |
| In previous versions of the library, the latter guarantee was not properly |
| maintained if the <a href="tutorial/debug.html#safe_mode">safe |
| mode</a> was set. This problem has been fixed now. |
| </li> |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <h2><a name="boost_1_33">Boost 1.33 release</a></h2> |
| |
| <p> |
| <ul> |
| <li>Added <a href="tutorial/indices.html#hashed_indices">hashed indices</a>, |
| whose interface is based on the specification for unordered associative |
| containers by the C++ Standard Library Technical Report (TR1). |
| </li> |
| <li>Added <a href="tutorial/creation.html#serialization">serialization support</a> |
| for <a href="../../serialization/index.html">Boost.Serialization</a>. |
| </li> |
| <li>Destruction of <code>multi_index_container</code>s and <code>clear</code> |
| memfuns now perform faster. |
| </li> |
| <li>Internal changes aimed at reducing the length of symbol names generated |
| by the compiler; cuts of up to a 50% can be achieved with respect to the |
| Boost 1.32 release. This results in much shorter and more readable error |
| messages and has also a beneficial impact on compilers with strict limits on |
| symbol name lengths. Additionally, a section on further |
| <a href="compiler_specifics.html#symbol_reduction">reduction of symbol name |
| lengths</a> has been added. |
| </li> |
| <li>Restructured some parts of the documentation, new examples.</li> |
| <li>Maintenance fixes.</li> |
| </ul> |
| </p> |
| |
| <hr> |
| |
| <div class="prev_link"><a href="future_work.html"><img src="prev.gif" alt="future work" border="0"><br> |
| Future work |
| </a></div> |
| <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br> |
| Index |
| </a></div> |
| <div class="next_link"><a href="acknowledgements.html"><img src="next.gif" alt="acknowledgements" border="0"><br> |
| Acknowledgements |
| </a></div><br clear="all" style="clear: all;"> |
| |
| <br> |
| |
| <p>Revised April 22nd 2010</p> |
| |
| <p>© Copyright 2003-2010 Joaquín M López Muñoz. |
| Distributed under the Boost Software |
| License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt"> |
| LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"> |
| http://www.boost.org/LICENSE_1_0.txt</a>) |
| </p> |
| |
| </body> |
| </html> |