Commit Graph
85 Commits
Author SHA1 Message Date
Ion Gaztañaga df03ffc8ec Fixes #241: flat_map should support same interface as std::map 2024-06-28 14:04:00 +02:00
Ion Gaztañaga 0977e6b1d4 Use BOOST_STATIC_CONSTEXPR where applicable 2024-06-06 00:08:00 +02:00
Ion Gaztañaga 13be16a0c8 Don't use default-constructed KeyNodeCompare to support stateful comparison objects 2024-06-05 11:20:11 +02:00
Ion Gaztañaga 397fbda8be Fixes #280 ("Several containers don't support non-movable types when move assigning") 2024-05-23 23:28:54 +02:00
Ion Gaztañaga 292bab35c6 Revert accidental commit 2024-05-21 14:11:30 +02:00
Ion Gaztañaga 59d760c08b Document block_size option in deque_options. 2024-05-21 14:08:36 +02:00
Ion Gaztañaga 978bbb113a Clean force_ptr usage and use launder_cast 2024-04-15 12:51:15 +02:00
Ion Gaztañaga 1a4a205ea6 Don't use BOOST_CONTAINER_FORCEINLINE extensively, due to potential code bloat 2023-05-10 22:09:01 +02:00
Ion Gaztañaga 552688c7fc Simplify dependencies dropping Boost.Core 2023-02-01 23:00:23 +01:00
Ion Gaztañaga efde619997 Use remove_const to correctly extract key_type from value_type, as the typical case is pair<const KeyType, MappedType> 2022-12-12 00:43:49 +01:00
Ion Gaztañaga d3ec5c677d Fixes #222 ("Fix incomplete type error when using list with pair") 2022-06-25 19:40:05 +02:00
Ion Gaztañaga ccf13f6770 Use Boost.Intrusive's key_of_value option to simplify the implementation 2022-06-13 00:49:43 +02:00
Ion Gaztañaga f8595fc39f Rename Rename "real_key_of_value" to "tree_key_of_value" 2022-03-10 10:29:24 +01:00
Ion Gaztañaga 15d61d6d26 Refactor node implemenations from 3 (slist_node, list_node and tree_node) to a single base_node:
- To avoid unneeded includes, is_pair is factored out from pair.hpp implementation
- Fixed bug where value_types inside nodes were not allocator-ware destructed.
- Changed scoped utilities to handle new clases
2022-01-04 00:41:34 +01:00
Ion Gaztañaga 3f76f9fdf7 Fixes #206 ("operator-> on static_vector::iterator causes cast alignment warning") 2021-12-28 15:17:15 +01:00
Ion Gaztañaga dad2cb2d02 Support GCC's -Wconversion -Wfloat-conversion -Warith-conversion -Wsign-conversion warnings. 2021-10-16 15:57:47 +02:00
Ion Gaztañaga 1cc35bbc98 Fixes #187 ("flat_map::erase and unique keys") 2021-08-08 00:38:29 +02:00
Ion Gaztañaga d7e99e56c6 Rewrite [flat_]map/set insert overloads to be more standard compliant. Fixes #102 ("flat_map::insert ambiguous with initializer list & pairs that need to convert"). 2021-01-01 23:50:50 +01:00
Ion Gaztañaga 0a0ad0009e Add support for [[nodiscard]]:
- Decorate container and allocator functions.
- Make sure to disable warnings in tests
- Update doxygen documentation to support it
2020-11-05 14:24:35 +01:00
Ion Gaztañaga d4c8bd70ea Fixes #152 ("Tree-based containers have troubles with move-only types") 2020-10-31 23:09:52 +01:00
Mitsuru Kariya f25c767a2b Fix has_trivial_destructor_after_move
Most template type parameters 'Allocator' were modified their default type to void since 1.70.0.
These modifications cause has_trivial_destructor_after_move to compile error or yield wrong result.
So, fix them by changing specializations of has_trivial_destructor_after_move.
2019-06-01 22:36:54 +09:00
Ion Gaztañaga 5f0ce60b39 Fixes #88 ("Implement C++17 MoveAssignable requirements for self-move assignments") 2019-04-30 18:05:50 +02:00
Ion Gaztañaga 83bb62fed3 Default allocator parameter changed form new_alloator<T> to void to reduce symbol lenghts 2019-01-10 22:54:58 +01:00
Ion Gaztañaga e787c4a24d Use uninitialized memory for node-based containers to improve aliasing conformance 2018-09-26 01:10:37 +02:00
Ion Gaztañaga 5ab5c7de63 Add noexcept_if to tree::swap 2018-09-15 01:18:27 +02:00
Ion Gaztañaga 139db663a3 * Implemented C++20 contains() for associative containers as specified in P0458R2.
* Fixed serious bug in heterogeneous lookup functions (is_transparent was broken).
2018-08-13 15:36:00 +02:00
Ion Gaztañaga 48c21e3187 Implemented C++14's heterogeneous lookups. 2018-05-01 14:55:24 +02:00
Ion Gaztañaga 2802a1f50d - Add configuration options to vector
- Cleanup tree configuration options
2017-12-10 23:33:41 +01:00
Ion Gaztañaga fa2494631a Use namespace dtl instead of container_detail to avoid excessively long symbol names. 2017-11-07 00:51:46 +01:00
Ion Gaztañaga ec91367383 Review all associative containers and implement a different constructor overload to avoid any unnecessary copy construction of the predicate or the allocator. 2017-05-16 16:29:49 +02:00
Mehdi Amini 40451e4bf7 Add variant of map constructors to avoid useless extra allocator copy when using initializer list
Many existing constructors have this form:

  map(std::initializer_list<value_type> il, const Compare& comp = Compare(), const allocator_type& a = allocator_type())

The issue is that a temporary allocator_type is constructed, and
passed to the base class where it is used to copy-constructed the
rebound allocator.
This temporary allocator_type here is always destroyed at the end
of the map() constructor. For stateful allocators this is not
desirable.
The solution is to adopt what libc++ is doing and have to constructors:

  map(std::initializer_list<value_type> il, const Compare& comp = Compare(), const allocator_type& a)

and

  map(std::initializer_list<value_type> il, const Compare& comp = Compare())

This way, unless an allocator is provided by the client, no extra temporary
creation/destruction occurs.
2017-05-08 12:39:06 -07:00
Ion Gaztañaga 01d7c71ea8 Fix node_handle bugs:
-> Bad allocator destruction in swap
-> Wrong assertion in operator=
-> Make dangerous functions private

Added full testsuite.
2017-04-02 00:20:38 +02:00
Ion Gaztañaga f540b83ccd * Implemented merge operations for associative containers.
* Update tree-based containers to changes done in Intrusive internal utilities in order to fix Trac 12432.
2016-09-03 00:03:42 +02:00
Ion Gaztañaga 9f9fdeaa9a Adapt to Intrusive change that removed unneeded template parameters to tree_value_compare. 2016-08-29 16:53:17 +02:00
Ion Gaztañaga 4298d1984b * Add missing extract() and insert(node_type) funtion to associative containers.
* Simplify select1st
2016-08-29 00:06:57 +02:00
Ion Gaztañaga 1467c51a4e Implemented missing try_emplace member for maps. 2016-08-26 01:47:32 +02:00
Ion Gaztañaga 2d6f781a2f Implemented "insert_or_assign" for map-like containers. 2016-08-18 20:29:04 +02:00
Ion Gaztañaga 225e2da77e Revised noexcept expressions of default and move constructors in all containers. 2016-08-01 23:49:51 +02:00
Ion Gaztañaga a7158c7975 Fixed Trac #12014: "boost::container::set can not insert const (ref) range" 2016-02-24 10:13:07 +01:00
Ion Gaztañaga 75f7c8fa73 Introduced BOOST_CONTAINER_FORCEINLINE so that mandatory inlining can be disabled selectively 2015-12-24 10:22:38 +01:00
Ion Gaztañaga a3262c0ae7 Fix for Trac #11820 ("compiler error when using operator[] of map") 2015-12-24 01:14:10 +01:00
Ion Gaztañaga c4505003c7 Minimize ifdef-ed code for BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN 2015-10-17 10:17:30 +02:00
Ion Gaztañaga 1d5c367d62 Use BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN as some compilers prefer return type SFINAE while others don't support it. 2015-10-17 09:39:56 +02:00
Ion Gaztañaga 7764e05444 Changes to support GCC 3.4 2015-10-12 18:51:08 +02:00
Ion Gaztañaga 85b2ed509b Added debug assertions via BOOST_ASSERT to check preconditions in several members. All checks are O(1) 2015-09-18 14:39:17 +02:00
Ion Gaztañaga e198da5946 Use Intrusive's tree_value_compare class instead of duplicating code 2015-06-04 11:42:47 +02:00
Ion Gaztañaga 6477543f3b Updated to new meta-functions reused from Intrusive/Move 2015-04-14 15:21:46 +02:00
Ion Gaztañaga c2ea5da716 Fix move constructors with unequal allocators and move/copy assignment of tree. 2015-02-26 00:22:23 +01:00
Ion Gaztañaga 10d027aa9c Include boost/config.hpp before testinG BOOST_HAS_PRAGMA_ONCE. 2015-02-02 15:26:53 +01:00
Ion Gaztañaga b786c8f716 Replaced BOOST_CONTIANER_NOEXCEPT with BOOST_NOEXCEPT 2015-01-28 22:11:00 +01:00