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