Commit Graph
192 Commits
Author SHA1 Message Date
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 1d727753e2 Use directly boost::movelib::to_raw_pointer/iterator_to_raw_pointer 2017-04-07 16:07:00 +02:00
Ion Gaztañaga d6749960fc Implement extract_sequence and adopt_sequence for flat ordered associative containers 2017-04-05 16:06:31 +02:00
Ion Gaztañaga cdb022fda2 Fix ambiguous constructor calls for piecewise_construct and Boost vs std tuples 2017-04-05 16:04:53 +02: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 865c69bab7 Changed string_view interoperability to a templated solution in order to support also std::string_view.
Added missing members and testcases.
2017-02-21 14:27:18 +01:00
Ion Gaztañaga 1404933491 Delete unused hash table 2017-02-06 11:50:53 +01:00
Ion Gaztañaga 23e9e8b494 Fix copyright notice. 2017-01-12 14:58:44 +01:00
Ion Gaztañaga f71fee5140 Merge branch 'inspection_report' of https://github.com/zerotypos-found/container into zerotypos-found-inspection_report 2017-01-12 14:53:20 +01:00
Ion Gaztañaga 79f5977688 Fixes Ticket #12749 container::pmr::polymorphic_allocator compilation error 2017-01-12 14:49:31 +01:00
zerotypos-found 7cb3a6fbe8 [inspection report] remove tabs and fix copyright notice format 2016-12-20 11:03:57 +09:00
Ion Gaztañaga 8141dbcbe6 Merge branch 'unused_variable' of https://github.com/maksqwe/container into maksqwe-unused_variable 2016-11-26 14:40:38 +01:00
Ion Gaztañaga 5e4a107e82 Fixes Ticket #12534: flat_map fails to compile if included after type_traits is instantiated under gcc 2016-11-25 23:56:33 +01:00
Maks Naumov e7f452bf91 Remove unused local variable 2016-11-17 00:02:29 +02:00
Ion Gaztañaga 764fcd88bf Merge branch 'copy_move_algo__parameter_fix' of https://github.com/think-cell/container into think-cell-copy_move_algo__parameter_fix 2016-11-13 00:26:58 +01:00
Ion Gaztañaga 77f5d7218d Avoid reference to null errors in sanitizers 2016-11-12 23:55:03 +01:00
Ion Gaztañaga ede225c9d2 Disable forceinline for old compilers due to bugs. 2016-11-12 19:07:54 +01:00
Ion Gaztañaga 1f3174baa7 Make build_number_seq with O(logN) instantiations instead of O(N) 2016-11-12 19:07:34 +01:00
Ion Gaztañaga 0a719901b6 Avoid warnings of unused "piecewise_construct" 2016-11-12 19:06:44 +01:00
Ion Gaztañaga d7bf947a4b Fix iterator_from_iiterator not value initializing its parent iterator 2016-11-12 19:06:23 +01:00
Tobias Germer 3830745c9f Fix parameter types in copy_move_algo.hpp: iterator_traits::difference_type -> allocator_traits::size_type 2016-10-19 14:13:46 +02:00
Tobias Germer 5ce1ad2611 Fix parameter type of uninitialized_copy_alloc_n_source() 2016-10-18 13:42:56 +02:00
Ion Gaztañaga da17190798 Fix incomplete Trac #9689 ("Add piecewise_construct to boost::container") resolution. scoped_allocator_adaptor_test was missing pair construct overloads. 2016-09-06 14:05:46 +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 e1cb88b399 Add missing include for boost::forward 2016-08-24 02:19:58 +02:00
Ion Gaztañaga db5c24e0e7 Fix piecewise_construct pair constructor for compilers with variadics and constructor forwarding. Current code unconditionally moves instead of forwarding. 2016-08-24 01:52:53 +02:00
Ion Gaztañaga 79a75f470e Add piecewise_construct construction to internal pair. 2016-08-23 02:14:19 +02:00
Ion Gaztañaga 0b98372af5 Silence most vexing parse warnings in clang. 2016-08-23 02:13:56 +02:00
Ion Gaztañaga eb42811079 Delegating constructors detection, as Boost.Config does not yet provide it. 2016-08-23 02:13:30 +02:00
Ion Gaztañaga c7407e34f6 Replaced int with std::size_t when building indexes. 2016-08-23 02:13:03 +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 fb1be6fa75 Fix Trac #12117 ("flat_set constructor with ordered_unique_range") adding checks to constructors in debug mode
Fix typos on value_type checks in flat_[multi]map.
2016-08-15 23:22:57 +02:00
Ion Gaztañaga 324130703e Fix incorrect header guards 2016-08-15 23:21:10 +02:00
Ion Gaztañaga d5adae2eda Fixes Trac #11802 ("Incorrect ordering after using insert() with ordered_range_t on a flat_multiset with a non-default sort order") 2016-08-12 00:43:16 +02:00
Ion Gaztañaga 37c1558a81 Fixed Trac #12256 (set<std::pair<int,int>>::insert cause compilation error in debug configuration in Visual Studio 2012) 2016-08-09 00:59:39 +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 153fd7f474 Add more is_class, is_class_or_union, is_enum specialization to pair to allow recursive containers and type traits intrinsics 2016-06-25 11:04:55 +02:00
Ion Gaztañaga a52684beea Some dispatch_uses_allocator overloads don't forward the allocator argument 2016-06-25 11:03:57 +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 79274e4aae Fixed Trac #11697 ("Wrong initialization order in tuple copy-constructor") 2015-09-30 22:35:17 +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 f637fada71 Use newly refactored move/detail/std_fwd_xxx.hpp headers 2015-09-14 22:38:26 +02:00