gcc/libstdc++-v3/include/debug
François Dumont f4b4ce152a libstdc++: [_GLIBCXX_DEBUG] Implement unordered container merge
The _GLIBCXX_DEBUG unordered containers need a dedicated merge implementation
so that any existing iterator on the transfered nodes is properly invalidated.

Add typedef/using declarations for everything used as-is from normal implementation.

libstdc++-v3/ChangeLog:

	* include/bits/hashtable_policy.h (__distance_fw): Replace class keyword with
	typename.
	* include/bits/hashtable.h (_Hashtable<>::_M_merge_unique): Remove noexcept
	qualification. Use const_iterator for node extraction/reinsert.
	(_Hashtable<>::_M_merge_multi): Likewise. Compute new hash code before extract.
	* include/debug/safe_container.h (_Safe_container<>): Make all methods
	protected.
	* include/debug/safe_unordered_container.h
	(_Safe_unordered_container<>::_UContInvalidatePred<_ExtractKey, _Source>): New.
	(_Safe_unordered_container<>::_UMContInvalidatePred<_ExtractKey, _Source>): New.
	(_Safe_unordered_container<>::_UContMergeGuard<_Source, _InvalidatePred>): New.
	(_Safe_unordered_container<>::_S_uc_guard<_ExtractKey, _Source>): New.
	(_Safe_unordered_container<>::_S_umc_guard<_ExtractKey, _Source>): New.
	(_Safe_unordered_container<>::_M_invalide_all): Make public.
	(_Safe_unordered_container<>::_M_invalide_if): Likewise.
	(_Safe_unordered_container<>::_M_invalide_local_if): Likewise.
	* include/debug/unordered_map
	(unordered_map<>::mapped_type, pointer, const_pointer): New typedef.
	(unordered_map<>::reference, const_reference, difference_type): New typedef.
	(unordered_map<>::get_allocator, empty, size, max_size): Add usings.
	(unordered_map<>::bucket_count, max_bucket_count, bucket): Add usings.
	(unordered_map<>::hash_function, key_equal, count, contains): Add usings.
	(unordered_map<>::operator[], at, rehash, reserve): Add usings.
	(unordered_map<>::merge): New.
	(unordered_multimap<>::mapped_type, pointer, const_pointer): New typedef.
	(unordered_multimap<>::reference, const_reference, difference_type): New typedef.
	(unordered_multimap<>::get_allocator, empty, size, max_size): Add usings.
	(unordered_multimap<>::bucket_count, max_bucket_count, bucket): Add usings.
	(unordered_multimap<>::hash_function, key_equal, count, contains): Add usings.
	(unordered_multimap<>::rehash, reserve): Add usings.
	(unordered_multimap<>::merge): New.
	* include/debug/unordered_set
	(unordered_set<>::mapped_type, pointer, const_pointer): New typedef.
	(unordered_set<>::reference, const_reference, difference_type): New typedef.
	(unordered_set<>::get_allocator, empty, size, max_size): Add usings.
	(unordered_set<>::bucket_count, max_bucket_count, bucket): Add usings.
	(unordered_set<>::hash_function, key_equal, count, contains): Add usings.
	(unordered_set<>::rehash, reserve): Add usings.
	(unordered_set<>::merge): New.
	(unordered_multiset<>::mapped_type, pointer, const_pointer): New typedef.
	(unordered_multiset<>::reference, const_reference, difference_type): New typedef.
	(unordered_multiset<>::get_allocator, empty, size, max_size): Add usings.
	(unordered_multiset<>::bucket_count, max_bucket_count, bucket): Add usings.
	(unordered_multiset<>::hash_function, key_equal, count, contains): Add usings.
	(unordered_multiset<>::rehash, reserve): Add usings.
	(unordered_multiset<>::merge): New.
	* testsuite/23_containers/unordered_map/debug/merge1_neg.cc: New test.
	* testsuite/23_containers/unordered_map/debug/merge2_neg.cc: New test.
	* testsuite/23_containers/unordered_map/debug/merge3_neg.cc: New test.
	* testsuite/23_containers/unordered_map/debug/merge4_neg.cc: New test.
	* testsuite/23_containers/unordered_multimap/debug/merge1_neg.cc: New test.
	* testsuite/23_containers/unordered_multimap/debug/merge2_neg.cc: New test.
	* testsuite/23_containers/unordered_multimap/debug/merge3_neg.cc: New test.
	* testsuite/23_containers/unordered_multimap/debug/merge4_neg.cc: New test.
	* testsuite/23_containers/unordered_multiset/debug/merge1_neg.cc: New test.
	* testsuite/23_containers/unordered_multiset/debug/merge2_neg.cc: New test.
	* testsuite/23_containers/unordered_multiset/debug/merge3_neg.cc: New test.
	* testsuite/23_containers/unordered_multiset/debug/merge4_neg.cc: New test.
	* testsuite/23_containers/unordered_set/debug/merge1_neg.cc: New test.
	* testsuite/23_containers/unordered_set/debug/merge2_neg.cc: New test.
	* testsuite/23_containers/unordered_set/debug/merge3_neg.cc: New test.
	* testsuite/23_containers/unordered_set/debug/merge4_neg.cc: New test.
	* testsuite/util/testsuite_abi.h: [_GLIBCXX_DEBUG] Use normal unordered
	container implementation.
2021-11-09 21:50:17 +01:00
..
array libstdc++: Restore __gnu_debug::array [PR100682] 2021-07-22 13:53:57 +01:00
assertions.h libstdc++: Fix headers that can't be used as header units [PR 99413] 2021-03-10 15:27:41 +00:00
bitset Update copyright years. 2021-01-04 10:26:59 +01:00
debug.h Update copyright years. 2021-01-04 10:26:59 +01:00
deque libstdc++: Implement P1518R2 for container deduction guides 2021-10-04 15:23:28 +01:00
formatter.h libstdc++: [_GLIBCXX_DEBUG] Enhance rendering of assert message 2021-05-26 21:50:17 +02:00
forward_list libstdc++: Fix CTAD for debug sequence containers 2021-08-18 14:26:38 +01:00
functions.h libstdc++: Add std::__conditional_t alias template 2021-10-01 20:34:49 +01:00
helper_functions.h libstdc++: [_GLIBCXX_DEBUG] Fix management of __dp_sign_max_size [PR 99402] 2021-04-09 21:46:35 +02:00
list libstdc++: Implement P1518R2 for container deduction guides 2021-10-04 15:23:28 +01:00
macros.h libstdc++: Use __builtin_unreachable for constexpr assertions [PR 100676] 2021-05-20 20:49:57 +01:00
map Update copyright years. 2021-01-04 10:26:59 +01:00
map.h libstdc++: Implement P1518R2 for container deduction guides 2021-10-04 15:23:28 +01:00
multimap.h libstdc++: Implement P1518R2 for container deduction guides 2021-10-04 15:23:28 +01:00
multiset.h libstdc++: Implement P1518R2 for container deduction guides 2021-10-04 15:23:28 +01:00
safe_base.h Update copyright years. 2021-01-04 10:26:59 +01:00
safe_container.h libstdc++: [_GLIBCXX_DEBUG] Implement unordered container merge 2021-11-09 21:50:17 +01:00
safe_iterator.h libstdc++: Add [[nodiscard]] to sequence containers 2021-08-04 12:54:29 +01:00
safe_iterator.tcc libstdc++: [_GLIBCXX_DEBUG] Fix management of __dp_sign_max_size [PR 99402] 2021-04-09 21:46:35 +02:00
safe_local_iterator.h libstdc++: Implement N3644 for _GLIBCXX_DEBUG iterators 2021-01-14 19:23:54 +01:00
safe_local_iterator.tcc Update copyright years. 2021-01-04 10:26:59 +01:00
safe_sequence.h Update copyright years. 2021-01-04 10:26:59 +01:00
safe_sequence.tcc Update copyright years. 2021-01-04 10:26:59 +01:00
safe_unordered_base.h Update copyright years. 2021-01-04 10:26:59 +01:00
safe_unordered_container.h libstdc++: [_GLIBCXX_DEBUG] Implement unordered container merge 2021-11-09 21:50:17 +01:00
safe_unordered_container.tcc Update copyright years. 2021-01-04 10:26:59 +01:00
set Update copyright years. 2021-01-04 10:26:59 +01:00
set.h libstdc++: Implement P1518R2 for container deduction guides 2021-10-04 15:23:28 +01:00
stl_iterator.h libstdc++: Missing constexpr for __gnu_debug::__valid_range etc 2021-11-01 21:01:31 +00:00
string libstdc++: Always define typedefs and hash functions for wide strings [PR 98725] 2021-10-09 00:57:49 +01:00
unordered_map libstdc++: [_GLIBCXX_DEBUG] Implement unordered container merge 2021-11-09 21:50:17 +01:00
unordered_set libstdc++: [_GLIBCXX_DEBUG] Implement unordered container merge 2021-11-09 21:50:17 +01:00
vector libstdc++: Implement P1518R2 for container deduction guides 2021-10-04 15:23:28 +01:00