49 using TraitsType =
typename inherited::TraitsType;
50 using KeyExtractorType =
typename inherited::KeyExtractorType;
51 using KeyEqualityComparerType =
typename inherited::KeyEqualityComparerType;
52 using KeyType =
typename inherited::KeyType;
53 using key_type =
typename inherited::key_type;
54 using value_type =
typename inherited::value_type;
66 template <IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<key_type>>
68 static_assert (not is_reference_v<KEY_EQUALS_COMPARER>);
69 constexpr ElementEqualsComparer (
const KeyExtractorType& keyExtractor = {},
const KEY_EQUALS_COMPARER& keyEqualsComparer = {})
70 : fKeyExtractor_{keyExtractor}
71 , fKeyComparer{keyEqualsComparer}
74 constexpr int operator() (
const value_type& lhs,
const KEY_TYPE& rhs)
const
76 return fKeyComparer (fKeyExtractor_ (lhs), rhs);
78 constexpr int operator() (
const KEY_TYPE& lhs,
const value_type& rhs)
const
80 return fKeyComparer (lhs, fKeyExtractor_ (rhs));
82 constexpr int operator() (
const value_type& lhs,
const value_type& rhs)
const
84 return fKeyComparer (fKeyExtractor_ (lhs), fKeyExtractor_ (rhs));
86 [[no_unique_address]]
const KeyExtractorType fKeyExtractor_;
87 [[no_unique_address]]
const KEY_EQUALS_COMPARER fKeyComparer;
88 using is_transparent = int;
101 template <Cryptography::Digest::IHashFunction<KEY_TYPE> KEY_HASHER = hash<key_type>>
103 constexpr ElementHash (
const KeyExtractorType& keyExtractor = {},
const KEY_HASHER& kh = {})
104 : fKeyExtractor_{keyExtractor}
108 auto operator() (
const key_type& k)
const noexcept
110 return fKeyHasher (k);
112 auto operator() (
const value_type& v)
const noexcept
114 return fKeyHasher (fKeyExtractor_ (v));
116 [[no_unique_address]]
const KeyExtractorType fKeyExtractor_;
117 [[no_unique_address]]
const KEY_HASHER fKeyHasher;
119 using is_transparent = int;
130 template <Cryptography::Digest::IHashFunction<KEY_TYPE> HASHER = hash<KEY_TYPE>, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>,
131 typename LAYOUT_OPTIONS = DataStructures::HashTable_Support::SeparateChainingOptions<T,
void>>
140 template <KeyedCollection_HashTable_Support::IVal
idHashTableTraits<T, KEY_TYPE> HASH_TABLE_TRAITS = DefaultTraits<>>
147 template <
typename K = KEY_TYPE>
158 template <KeyedCollection_HashTable_Support::IVal
idHashTableTraits<T, KEY_TYPE> HASH_TABLE_TRAITS>
160 template <KeyedCollection_HashTable_Support::IVal
idHashTableTraits<T, KEY_TYPE> HASH_TABLE_TRAITS>
162#if !qCompilerAndStdLib_template_ConstraintDiffersInTemplateRedeclaration_Buggy
166 template <Cryptography::Digest::IHashFunction<KEY_TYPE> KEY_HASH = hash<KEY_TYPE>, IEqualsComparer<KEY_TYPE> KEY_EQUALS_COMPARER = equal_to<KEY_TYPE>>
168 KEY_EQUALS_COMPARER&& keyComparer = KEY_EQUALS_COMPARER{});
180 template <qCompilerAndStdLib_Constra
intDiffersInTemplateRedeclaration_BWA (KeyedCollection_HashTable_Support::IVal
idHashTableTraits<T, KEY_TYPE>) HASH_TABLE_TRAITS>
184 nonvirtual
void AssertRepValidType_ ()
const;