]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 | ||
261 | [h2 Boost 1.58.0] | |
262 | ||
263 | * Remove unnecessary template parameter from const iterators. | |
264 | * Rename private `iterator` typedef in some iterator classes, as it | |
265 | confuses some traits classes. | |
266 | * Fix move assignment with stateful, propagate_on_container_move_assign | |
267 | allocators ([ticket 10777]). | |
268 | * Fix rare exception safety issue in move assignment. | |
269 | * Fix potential overflow when calculating number of buckets to allocate | |
270 | ([@https://github.com/boostorg/unordered/pull/4 GitHub #4]). | |
271 | ||
272 | [h2 Boost 1.62.0] | |
273 | ||
274 | * Remove use of deprecated `boost::iterator`. | |
275 | * Remove `BOOST_NO_STD_DISTANCE` workaround. | |
276 | * Remove `BOOST_UNORDERED_DEPRECATED_EQUALITY` warning. | |
277 | * Simpler implementation of assignment, fixes an exception safety issue | |
278 | for `unordered_multiset` and `unordered_multimap`. Might be a little slower. | |
279 | * Stop using return value SFINAE which some older compilers have issues | |
280 | with. | |
281 | ||
282 | [h2 Boost 1.63.0] | |
283 | ||
284 | * Check hint iterator in `insert`/`emplace_hint`. | |
285 | * Fix some warnings, mostly in the tests. | |
286 | * Manually write out `emplace_args` for small numbers of arguments - | |
287 | should make template error messages a little more bearable. | |
288 | * Remove superfluous use of `boost::forward` in emplace arguments, | |
289 | which fixes emplacing string literals in old versions of Visual C++. | |
290 | * Fix an exception safety issue in assignment. If bucket allocation | |
291 | throws an exception, it can overwrite the hash and equality functions while | |
292 | leaving the existing elements in place. This would mean that the function | |
293 | objects wouldn't match the container elements, so elements might be in the | |
294 | wrong bucket and equivalent elements would be incorrectly handled. | |
295 | * Various reference documentation improvements. | |
296 | * Better allocator support ([ticket 12459]). | |
297 | * Make the no argument constructors implicit. | |
298 | * Implement missing allocator aware constructors. | |
299 | ||
300 | [endsect] |