Imported Upstream version 1.57.0
[platform/upstream/boost.git] / libs / unordered / doc / changes.qbk
1
2 [/ Copyright 2008 Daniel James.
3  / Distributed under the Boost Software License, Version 1.0. (See accompanying
4  / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ]
5
6 [template ticket[number]'''<ulink
7     url="https://svn.boost.org/trac/boost/ticket/'''[number]'''">'''#[number]'''</ulink>''']
8
9 [section:changes Change Log]
10
11 [h2 Review Version]
12
13 Initial review version, for the review conducted from 7th December 2007 to
14 16th December 2007.
15
16 [h2 1.35.0 Add-on - 31st March 2008]
17
18 Unofficial release uploaded to vault, to be used with Boost 1.35.0. Incorporated
19 many of the suggestions from the review.
20
21 * Improved portability thanks to Boost regression testing.
22 * Fix lots of typos, and clearer text in the documentation.
23 * Fix floating point to `std::size_t` conversion when calculating sizes from
24   the max load factor, and use `double` in the calculation for greater accuracy.
25 * Fix some errors in the examples.
26
27 [h2 Boost 1.36.0]
28
29 First official release.
30
31 * Rearrange the internals.
32 * Move semantics - full support when rvalue references are available, emulated
33   using a cut down version of the Adobe move library when they are not.
34 * Emplace support when rvalue references and variadic template are available.
35 * More efficient node allocation when rvalue references and variadic template
36   are available.
37 * Added equality operators.
38
39 [h2 Boost 1.37.0]
40
41 * Rename overload of `emplace` with hint, to `emplace_hint` as specified in
42   [@http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2691.pdf n2691].
43 * Provide forwarding headers at `<boost/unordered/unordered_map_fwd.hpp>` and
44   `<boost/unordered/unordered_set_fwd.hpp>`.
45 * Move all the implementation inside `boost/unordered`, to assist
46   modularization and hopefully make it easier to track changes in subversion.
47
48 [h2 Boost 1.38.0]
49
50 * Use [@boost:/libs/core/swap.html `boost::swap`].
51 * [@https://svn.boost.org/trac/boost/ticket/2237 Ticket 2237]:
52   Document that the equality and inequality operators are undefined for two
53   objects if their equality predicates aren't equivalent. Thanks to Daniel
54   Krügler.
55 * [@https://svn.boost.org/trac/boost/ticket/1710 Ticket 1710]: 
56   Use a larger prime number list. Thanks to Thorsten Ottosen and Hervé
57   Brönnimann.
58 * Use
59   [@boost:/libs/type_traits/doc/html/boost_typetraits/category/alignment.html
60   aligned storage] to store the types. This changes the way the allocator is
61   used to construct nodes. It used to construct the node with two calls to
62   the allocator's `construct` method - once for the pointers and once for the
63   value. It now constructs the node with a single call to construct and
64   then constructs the value using in place construction.
65 * Add support for C++0x initializer lists where they're available (currently
66   only g++ 4.4 in C++0x mode).
67
68 [h2 Boost 1.39.0]
69
70 * [@https://svn.boost.org/trac/boost/ticket/2756 Ticket 2756]: Avoid a warning
71   on Visual C++ 2009.
72 * Some other minor internal changes to the implementation, tests and
73   documentation.
74 * Avoid an unnecessary copy in `operator[]`.
75 * [@https://svn.boost.org/trac/boost/ticket/2975 Ticket 2975]: Fix length of
76   prime number list.
77
78 [h2 Boost 1.40.0]
79
80 * [@https://svn.boost.org/trac/boost/ticket/2975 Ticket 2975]:
81   Store the prime list as a preprocessor sequence - so that it will always get
82   the length right if it changes again in the future.
83 * [@https://svn.boost.org/trac/boost/ticket/1978 Ticket 1978]:
84   Implement `emplace` for all compilers.
85 * [@https://svn.boost.org/trac/boost/ticket/2908 Ticket 2908],
86   [@https://svn.boost.org/trac/boost/ticket/3096 Ticket 3096]:
87   Some workarounds for old versions of borland, including adding explicit
88   destructors to all containers.
89 * [@https://svn.boost.org/trac/boost/ticket/3082 Ticket 3082]:
90   Disable incorrect Visual C++ warnings.
91 * Better configuration for C++0x features when the headers aren't available.
92 * Create less buckets by default.
93
94 [h2 Boost 1.41.0 - Major update]
95
96 * The original version made heavy use of macros to sidestep some of the older
97   compilers' poor template support. But since I no longer support those
98   compilers and the macro use was starting to become a maintenance burden it
99   has been rewritten to use templates instead of macros for the implementation
100   classes.
101
102 * The container objcet is now smaller thanks to using `boost::compressed_pair`
103   for EBO and a slightly different function buffer - now using a bool instead
104   of a member pointer.
105
106 * Buckets are allocated lazily which means that constructing an empty container
107   will not allocate any memory.
108   
109 [h2 Boost 1.42.0]
110
111 * Support instantiating the containers with incomplete value types.
112 * Reduced the number of warnings (mostly in tests).
113 * Improved codegear compatibility.
114 * [@http://svn.boost.org/trac/boost/ticket/3693 Ticket 3693]:
115   Add `erase_return_void` as a temporary workaround for the current
116   `erase` which can be inefficient because it has to find the next
117   element to return an iterator.
118 * Add templated find overload for compatible keys.
119 * [@http://svn.boost.org/trac/boost/ticket/3773 Ticket 3773]:
120   Add missing `std` qualifier to `ptrdiff_t`.
121 * Some code formatting changes to fit almost all lines into 80 characters.
122
123 [h2 Boost 1.43.0]
124
125 * [@http://svn.boost.org/trac/boost/ticket/3966 Ticket 3966]:
126   `erase_return_void` is now `quick_erase`, which is the
127   [@http://home.roadrunner.com/~hinnant/issue_review/lwg-active.html#579
128   current forerunner for resolving the slow erase by iterator], although
129   there's a strong possibility that this may change in the future. The old
130   method name remains for backwards compatibility but is considered deprecated
131   and will be removed in a future release.
132 * Use Boost.Exception.
133 * Stop using deprecated `BOOST_HAS_*` macros.
134
135 [h2 Boost 1.45.0]
136
137 * Fix a bug when inserting into an `unordered_map` or `unordered_set` using
138   iterators which returns `value_type` by copy.
139
140 [h2 Boost 1.48.0 - Major update]
141
142 This is major change which has been converted to use Boost.Move's move
143 emulation, and be more compliant with the C++11 standard. See the
144 [link unordered.compliance compliance section] for details.
145
146 The container now meets C++11's complexity requirements, but to do so
147 uses a little more memory. This means that `quick_erase` and
148 `erase_return_void` are no longer required, they'll be removed in a
149 future version.
150
151 C++11 support has resulted in some breaking changes:
152
153 * Equality comparison has been changed to the C++11 specification.
154   In a container with equivalent keys, elements in a group with equal
155   keys used to have to be in the same order to be considered equal,
156   now they can be a permutation of each other. To use the old
157   behavior define the macro `BOOST_UNORDERED_DEPRECATED_EQUALITY`.
158
159 * The behaviour of swap is different when the two containers to be
160   swapped has unequal allocators. It used to allocate new nodes using
161   the appropriate allocators, it now swaps the allocators if
162   the allocator has a member structure `propagate_on_container_swap`,
163   such that `propagate_on_container_swap::value` is true.
164
165 * Allocator's `construct` and `destroy` functions are called with raw
166   pointers, rather than the allocator's `pointer` type.
167
168 * `emplace` used to emulate the variadic pair constructors that
169   appeared in early C++0x drafts. Since they were removed it no
170   longer does so. It does emulate the new `piecewise_construct`
171   pair constructors - only you need to use
172   `boost::piecewise_construct`. To use the old emulation of
173   the variadic consturctors define
174   `BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT`.
175
176 [h2 Boost 1.49.0]
177
178 * Fix warning due to accidental odd assignment.
179 * Slightly better error messages.
180
181 [h2 Boost 1.50.0]
182
183 * Fix equality for `unordered_multiset` and `unordered_multimap`.
184 * [@https://svn.boost.org/trac/boost/ticket/6857 Ticket 6857]:
185   Implement `reserve`.
186 * [@https://svn.boost.org/trac/boost/ticket/6771 Ticket 6771]:
187   Avoid gcc's `-Wfloat-equal` warning.
188 * [@https://svn.boost.org/trac/boost/ticket/6784 Ticket 6784]:
189   Fix some Sun specific code.
190 * [@https://svn.boost.org/trac/boost/ticket/6190 Ticket 6190]:
191   Avoid gcc's `-Wshadow` warning.
192 * [@https://svn.boost.org/trac/boost/ticket/6905 Ticket 6905]:
193   Make namespaces in macros compatible with `bcp` custom namespaces.
194   Fixed by Luke Elliott.
195 * Remove some of the smaller prime number of buckets, as they may make
196   collisions quite probable (e.g. multiples of 5 are very common because
197   we used base 10).
198 * On old versions of Visual C++, use the container library's implementation
199   of `allocator_traits`, as it's more likely to work.
200 * On machines with 64 bit std::size_t, use power of 2 buckets, with Thomas
201   Wang's hash function to pick which one to use. As modulus is very slow
202   for 64 bit values.
203 * Some internal changes.
204
205 [h2 Boost 1.51.0]
206
207 * Fix construction/destruction issue when using a C++11 compiler with a
208   C++03 allocator ([ticket 7100]).
209 * Remove a `try..catch` to support compiling without exceptions.
210 * Adjust SFINAE use to try to supprt g++ 3.4 ([ticket 7175]).
211 * Updated to use the new config macros.
212
213 [h2 Boost 1.52.0]
214
215 * Faster assign, which assigns to existing nodes where possible, rather than
216   creating entirely new nodes and copy constructing.
217 * Fixed bug in `erase_range` ([ticket 7471]).
218 * Reverted some of the internal changes to how nodes are created, especially
219   for C++11 compilers. 'construct' and 'destroy' should work a little better
220   for C++11 allocators.
221 * Simplified the implementation a bit. Hopefully more robust.
222
223 [h2 Boost 1.53.0]
224
225 * Remove support for the old pre-standard variadic pair constructors, and
226   equality implementation. Both have been deprecated since Boost 1.48.
227 * Remove use of deprecated config macros.
228 * More internal implementation changes, including a much simpler
229   implementation of `erase`.
230
231 [h2 Boost 1.54.0]
232
233 * Mark methods specified in standard as `noexpect`. More to come in the next
234   release.
235 * If the hash function and equality predicate are known to both have nothrow
236   move assignment or construction then use them.
237
238 [h2 Boost 1.55.0]
239
240 * Avoid some warnings ([ticket 8851], [ticket 8874]).
241 * Avoid exposing some detail functions via. ADL on the iterators.
242 * Follow the standard by only using the allocators' construct and destroy
243   methods to construct and destroy stored elements. Don't use them for internal
244   data like pointers.
245
246 [h2 Boost 1.56.0]
247
248 * Fix some shadowed variable warnings ([ticket 9377]).
249 * Fix allocator use in documentation ([ticket 9719]).
250 * Always use prime number of buckets for integers. Fixes performance
251   regression when inserting consecutive integers, although makes other
252   uses slower ([ticket 9282]).
253 * Only construct elements using allocators, as specified in C++11 standard.
254
255 [h2 Boost 1.57.0]
256
257 * Fix the `pointer` typedef in iterators ([ticket 10672]).
258 * Fix Coverity warning
259   ([@https://github.com/boostorg/unordered/pull/2 GitHub #2]).
260 * Rename private `iterator` typedef in some iterator classes, as it
261   confuses some traits classes.
262
263 [endsect]