123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- [/ Copyright 2008 Daniel James.
- / Distributed under the Boost Software License, Version 1.0. (See accompanying
- / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ]
- [template ticket[number]'''<ulink
- url="https://svn.boost.org/trac/boost/ticket/'''[number]'''">'''#[number]'''</ulink>''']
- [template pull_request[number][@https://github.com/boostorg/unordered/pull/[number] GitHub #[number]]]
- [section:changes Change Log]
- [h2 Review Version]
- Initial review version, for the review conducted from 7th December 2007 to
- 16th December 2007.
- [h2 1.35.0 Add-on - 31st March 2008]
- Unofficial release uploaded to vault, to be used with Boost 1.35.0. Incorporated
- many of the suggestions from the review.
- * Improved portability thanks to Boost regression testing.
- * Fix lots of typos, and clearer text in the documentation.
- * Fix floating point to `std::size_t` conversion when calculating sizes from
- the max load factor, and use `double` in the calculation for greater accuracy.
- * Fix some errors in the examples.
- [h2 Boost 1.36.0]
- First official release.
- * Rearrange the internals.
- * Move semantics - full support when rvalue references are available, emulated
- using a cut down version of the Adobe move library when they are not.
- * Emplace support when rvalue references and variadic template are available.
- * More efficient node allocation when rvalue references and variadic template
- are available.
- * Added equality operators.
- [h2 Boost 1.37.0]
- * Rename overload of `emplace` with hint, to `emplace_hint` as specified in
- [@http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2691.pdf n2691].
- * Provide forwarding headers at `<boost/unordered/unordered_map_fwd.hpp>` and
- `<boost/unordered/unordered_set_fwd.hpp>`.
- * Move all the implementation inside `boost/unordered`, to assist
- modularization and hopefully make it easier to track changes in subversion.
- [h2 Boost 1.38.0]
- * Use [@boost:/libs/core/swap.html `boost::swap`].
- * [@https://svn.boost.org/trac/boost/ticket/2237 Ticket 2237]:
- Document that the equality and inequality operators are undefined for two
- objects if their equality predicates aren't equivalent. Thanks to Daniel
- Krügler.
- * [@https://svn.boost.org/trac/boost/ticket/1710 Ticket 1710]:
- Use a larger prime number list. Thanks to Thorsten Ottosen and Hervé
- Brönnimann.
- * Use
- [@boost:/libs/type_traits/doc/html/boost_typetraits/category/alignment.html
- aligned storage] to store the types. This changes the way the allocator is
- used to construct nodes. It used to construct the node with two calls to
- the allocator's `construct` method - once for the pointers and once for the
- value. It now constructs the node with a single call to construct and
- then constructs the value using in place construction.
- * Add support for C++0x initializer lists where they're available (currently
- only g++ 4.4 in C++0x mode).
- [h2 Boost 1.39.0]
- * [@https://svn.boost.org/trac/boost/ticket/2756 Ticket 2756]: Avoid a warning
- on Visual C++ 2009.
- * Some other minor internal changes to the implementation, tests and
- documentation.
- * Avoid an unnecessary copy in `operator[]`.
- * [@https://svn.boost.org/trac/boost/ticket/2975 Ticket 2975]: Fix length of
- prime number list.
- [h2 Boost 1.40.0]
- * [@https://svn.boost.org/trac/boost/ticket/2975 Ticket 2975]:
- Store the prime list as a preprocessor sequence - so that it will always get
- the length right if it changes again in the future.
- * [@https://svn.boost.org/trac/boost/ticket/1978 Ticket 1978]:
- Implement `emplace` for all compilers.
- * [@https://svn.boost.org/trac/boost/ticket/2908 Ticket 2908],
- [@https://svn.boost.org/trac/boost/ticket/3096 Ticket 3096]:
- Some workarounds for old versions of borland, including adding explicit
- destructors to all containers.
- * [@https://svn.boost.org/trac/boost/ticket/3082 Ticket 3082]:
- Disable incorrect Visual C++ warnings.
- * Better configuration for C++0x features when the headers aren't available.
- * Create less buckets by default.
- [h2 Boost 1.41.0 - Major update]
- * The original version made heavy use of macros to sidestep some of the older
- compilers' poor template support. But since I no longer support those
- compilers and the macro use was starting to become a maintenance burden it
- has been rewritten to use templates instead of macros for the implementation
- classes.
- * The container object is now smaller thanks to using `boost::compressed_pair`
- for EBO and a slightly different function buffer - now using a bool instead
- of a member pointer.
- * Buckets are allocated lazily which means that constructing an empty container
- will not allocate any memory.
- [h2 Boost 1.42.0]
- * Support instantiating the containers with incomplete value types.
- * Reduced the number of warnings (mostly in tests).
- * Improved codegear compatibility.
- * [@http://svn.boost.org/trac/boost/ticket/3693 Ticket 3693]:
- Add `erase_return_void` as a temporary workaround for the current
- `erase` which can be inefficient because it has to find the next
- element to return an iterator.
- * Add templated find overload for compatible keys.
- * [@http://svn.boost.org/trac/boost/ticket/3773 Ticket 3773]:
- Add missing `std` qualifier to `ptrdiff_t`.
- * Some code formatting changes to fit almost all lines into 80 characters.
- [h2 Boost 1.43.0]
- * [@http://svn.boost.org/trac/boost/ticket/3966 Ticket 3966]:
- `erase_return_void` is now `quick_erase`, which is the
- [@http://home.roadrunner.com/~hinnant/issue_review/lwg-active.html#579
- current forerunner for resolving the slow erase by iterator], although
- there's a strong possibility that this may change in the future. The old
- method name remains for backwards compatibility but is considered deprecated
- and will be removed in a future release.
- * Use Boost.Exception.
- * Stop using deprecated `BOOST_HAS_*` macros.
- [h2 Boost 1.45.0]
- * Fix a bug when inserting into an `unordered_map` or `unordered_set` using
- iterators which returns `value_type` by copy.
- [h2 Boost 1.48.0 - Major update]
- This is major change which has been converted to use Boost.Move's move
- emulation, and be more compliant with the C++11 standard. See the
- [link unordered.compliance compliance section] for details.
- The container now meets C++11's complexity requirements, but to do so
- uses a little more memory. This means that `quick_erase` and
- `erase_return_void` are no longer required, they'll be removed in a
- future version.
- C++11 support has resulted in some breaking changes:
- * Equality comparison has been changed to the C++11 specification.
- In a container with equivalent keys, elements in a group with equal
- keys used to have to be in the same order to be considered equal,
- now they can be a permutation of each other. To use the old
- behavior define the macro `BOOST_UNORDERED_DEPRECATED_EQUALITY`.
- * The behaviour of swap is different when the two containers to be
- swapped has unequal allocators. It used to allocate new nodes using
- the appropriate allocators, it now swaps the allocators if
- the allocator has a member structure `propagate_on_container_swap`,
- such that `propagate_on_container_swap::value` is true.
- * Allocator's `construct` and `destroy` functions are called with raw
- pointers, rather than the allocator's `pointer` type.
- * `emplace` used to emulate the variadic pair constructors that
- appeared in early C++0x drafts. Since they were removed it no
- longer does so. It does emulate the new `piecewise_construct`
- pair constructors - only you need to use
- `boost::piecewise_construct`. To use the old emulation of
- the variadic constructors define
- `BOOST_UNORDERED_DEPRECATED_PAIR_CONSTRUCT`.
- [h2 Boost 1.49.0]
- * Fix warning due to accidental odd assignment.
- * Slightly better error messages.
- [h2 Boost 1.50.0]
- * Fix equality for `unordered_multiset` and `unordered_multimap`.
- * [@https://svn.boost.org/trac/boost/ticket/6857 Ticket 6857]:
- Implement `reserve`.
- * [@https://svn.boost.org/trac/boost/ticket/6771 Ticket 6771]:
- Avoid gcc's `-Wfloat-equal` warning.
- * [@https://svn.boost.org/trac/boost/ticket/6784 Ticket 6784]:
- Fix some Sun specific code.
- * [@https://svn.boost.org/trac/boost/ticket/6190 Ticket 6190]:
- Avoid gcc's `-Wshadow` warning.
- * [@https://svn.boost.org/trac/boost/ticket/6905 Ticket 6905]:
- Make namespaces in macros compatible with `bcp` custom namespaces.
- Fixed by Luke Elliott.
- * Remove some of the smaller prime number of buckets, as they may make
- collisions quite probable (e.g. multiples of 5 are very common because
- we used base 10).
- * On old versions of Visual C++, use the container library's implementation
- of `allocator_traits`, as it's more likely to work.
- * On machines with 64 bit std::size_t, use power of 2 buckets, with Thomas
- Wang's hash function to pick which one to use. As modulus is very slow
- for 64 bit values.
- * Some internal changes.
- [h2 Boost 1.51.0]
- * Fix construction/destruction issue when using a C++11 compiler with a
- C++03 allocator ([ticket 7100]).
- * Remove a `try..catch` to support compiling without exceptions.
- * Adjust SFINAE use to try to support g++ 3.4 ([ticket 7175]).
- * Updated to use the new config macros.
- [h2 Boost 1.52.0]
- * Faster assign, which assigns to existing nodes where possible, rather than
- creating entirely new nodes and copy constructing.
- * Fixed bug in `erase_range` ([ticket 7471]).
- * Reverted some of the internal changes to how nodes are created, especially
- for C++11 compilers. 'construct' and 'destroy' should work a little better
- for C++11 allocators.
- * Simplified the implementation a bit. Hopefully more robust.
- [h2 Boost 1.53.0]
- * Remove support for the old pre-standard variadic pair constructors, and
- equality implementation. Both have been deprecated since Boost 1.48.
- * Remove use of deprecated config macros.
- * More internal implementation changes, including a much simpler
- implementation of `erase`.
- [h2 Boost 1.54.0]
- * Mark methods specified in standard as `noexpect`. More to come in the next
- release.
- * If the hash function and equality predicate are known to both have nothrow
- move assignment or construction then use them.
- [h2 Boost 1.55.0]
- * Avoid some warnings ([ticket 8851], [ticket 8874]).
- * Avoid exposing some detail functions via. ADL on the iterators.
- * Follow the standard by only using the allocators' construct and destroy
- methods to construct and destroy stored elements. Don't use them for internal
- data like pointers.
- [h2 Boost 1.56.0]
- * Fix some shadowed variable warnings ([ticket 9377]).
- * Fix allocator use in documentation ([ticket 9719]).
- * Always use prime number of buckets for integers. Fixes performance
- regression when inserting consecutive integers, although makes other
- uses slower ([ticket 9282]).
- * Only construct elements using allocators, as specified in C++11 standard.
- [h2 Boost 1.57.0]
- * Fix the `pointer` typedef in iterators ([ticket 10672]).
- * Fix Coverity warning
- ([@https://github.com/boostorg/unordered/pull/2 GitHub #2]).
- [h2 Boost 1.58.0]
- * Remove unnecessary template parameter from const iterators.
- * Rename private `iterator` typedef in some iterator classes, as it
- confuses some traits classes.
- * Fix move assignment with stateful, propagate_on_container_move_assign
- allocators ([ticket 10777]).
- * Fix rare exception safety issue in move assignment.
- * Fix potential overflow when calculating number of buckets to allocate
- ([@https://github.com/boostorg/unordered/pull/4 GitHub #4]).
- [h2 Boost 1.62.0]
- * Remove use of deprecated `boost::iterator`.
- * Remove `BOOST_NO_STD_DISTANCE` workaround.
- * Remove `BOOST_UNORDERED_DEPRECATED_EQUALITY` warning.
- * Simpler implementation of assignment, fixes an exception safety issue
- for `unordered_multiset` and `unordered_multimap`. Might be a little slower.
- * Stop using return value SFINAE which some older compilers have issues
- with.
- [h2 Boost 1.63.0]
- * Check hint iterator in `insert`/`emplace_hint`.
- * Fix some warnings, mostly in the tests.
- * Manually write out `emplace_args` for small numbers of arguments -
- should make template error messages a little more bearable.
- * Remove superfluous use of `boost::forward` in emplace arguments,
- which fixes emplacing string literals in old versions of Visual C++.
- * Fix an exception safety issue in assignment. If bucket allocation
- throws an exception, it can overwrite the hash and equality functions while
- leaving the existing elements in place. This would mean that the function
- objects wouldn't match the container elements, so elements might be in the
- wrong bucket and equivalent elements would be incorrectly handled.
- * Various reference documentation improvements.
- * Better allocator support ([ticket 12459]).
- * Make the no argument constructors implicit.
- * Implement missing allocator aware constructors.
- * Fix assigning the hash/key equality functions for empty containers.
- * Remove unary/binary_function from the examples in the documentation.
- They are removed in C++17.
- * Support 10 constructor arguments in emplace. It was meant to support up to 10
- arguments, but an off by one error in the preprocessor code meant it only
- supported up to 9.
- [h2 Boost 1.64.0]
- * Initial support for new C++17 member functions:
- `insert_or_assign` and `try_emplace` in `unordered_map`,
- * Initial support for `merge` and `extract`.
- Does not include transferring nodes between
- `unordered_map` and `unordered_multimap` or between `unordered_set` and
- `unordered_multiset` yet. That will hopefully be in the next version of
- Boost.
- [h2 Boost 1.65.0]
- * Add deprecated attributes to `quick_erase` and `erase_return_void`.
- I really will remove them in a future version this time.
- * Small standards compliance fixes:
- * `noexpect` specs for `swap` free functions.
- * Add missing `insert(P&&)` methods.
- [h2 Boost 1.66.0]
- * Simpler move construction implementation.
- * Documentation fixes ([pull_request 6]).
- [h2 Boost 1.67.0]
- * Improved C++17 support:
- * Add template deduction guides from the standard.
- * Use a simple implementation of `optional` in node handles, so
- that they're closer to the standard.
- * Add missing `noexcept` specifications to `swap`, `operator=`
- and node handles, and change the implementation to match.
- Using `std::allocator_traits::is_always_equal`, or our own
- implementation when not available, and
- `boost::is_nothrow_swappable` in the implementation.
- * Improved C++20 support:
- * Use `boost::to_address`, which has the proposed C++20 semantics,
- rather than the old custom implementation.
- * Add `element_type` to iterators, so that `std::pointer_traits`
- will work.
- * Use `std::piecewise_construct` on recent versions of Visual C++,
- and other uses of the Dinkumware standard library,
- now using Boost.Predef to check compiler and library versions.
- * Use `std::iterator_traits` rather than the boost iterator traits
- in order to remove dependency on Boost.Iterator.
- * Remove iterators' inheritance from `std::iterator`, which is
- deprecated in C++17, thanks to Daniela Engert
- ([@https://github.com/boostorg/unordered/pull/7 PR#7]).
- * Stop using `BOOST_DEDUCED_TYPENAME`.
- * Update some Boost include paths.
- * Rename some internal methods, and variables.
- * Various testing improvements.
- * Miscellaneous internal changes.
- [endsect]
|