File indexing completed on 2025-01-30 09:34:18
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #ifndef BOOST_BIMAP_UNORDERED_MULTISET_OF_HPP
0013 #define BOOST_BIMAP_UNORDERED_MULTISET_OF_HPP
0014
0015 #if defined(_MSC_VER)
0016 #pragma once
0017 #endif
0018
0019 #include <boost/config.hpp>
0020
0021 #include <boost/bimap/detail/user_interface_config.hpp>
0022
0023 #include <cstdlib>
0024 #include <functional>
0025 #include <boost/functional/hash.hpp>
0026 #include <boost/mpl/bool.hpp>
0027
0028 #include <boost/concept_check.hpp>
0029
0030 #include <boost/bimap/detail/concept_tags.hpp>
0031
0032 #include <boost/bimap/tags/support/value_type_of.hpp>
0033
0034 #include <boost/bimap/detail/generate_index_binder.hpp>
0035 #include <boost/bimap/detail/generate_view_binder.hpp>
0036 #include <boost/bimap/detail/generate_relation_binder.hpp>
0037
0038 #include <boost/multi_index/hashed_index.hpp>
0039
0040 #include <boost/bimap/views/unordered_multimap_view.hpp>
0041 #include <boost/bimap/views/unordered_multiset_view.hpp>
0042
0043 namespace boost {
0044 namespace bimaps {
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117 template
0118 <
0119 class KeyType,
0120 class HashFunctor = hash< BOOST_DEDUCED_TYPENAME
0121 ::boost::bimaps::tags::support::value_type_of<KeyType>::type >,
0122 class EqualKey = std::equal_to< BOOST_DEDUCED_TYPENAME
0123 ::boost::bimaps::tags::support::value_type_of<KeyType>::type >
0124 >
0125 struct unordered_multiset_of : public ::boost::bimaps::detail::set_type_of_tag
0126 {
0127
0128 typedef KeyType user_type;
0129
0130
0131 typedef BOOST_DEDUCED_TYPENAME ::boost::bimaps::tags::support::
0132 value_type_of<user_type>::type value_type;
0133
0134
0135 typedef HashFunctor hasher;
0136
0137
0138 typedef EqualKey key_equal;
0139
0140 struct lazy_concept_checked
0141 {
0142 BOOST_CLASS_REQUIRE ( value_type,
0143 boost, AssignableConcept );
0144
0145 BOOST_CLASS_REQUIRE3( hasher, std::size_t, value_type,
0146 boost, UnaryFunctionConcept );
0147
0148 BOOST_CLASS_REQUIRE4( key_equal, bool, value_type, value_type,
0149 boost, BinaryFunctionConcept );
0150
0151 typedef unordered_multiset_of type;
0152 };
0153
0154 BOOST_BIMAP_GENERATE_INDEX_BINDER_2CP(
0155
0156
0157 multi_index::hashed_non_unique,
0158
0159
0160 hasher,
0161 key_equal
0162 )
0163
0164 BOOST_BIMAP_GENERATE_MAP_VIEW_BINDER(
0165
0166
0167 views::unordered_multimap_view
0168 )
0169
0170 BOOST_BIMAP_GENERATE_SET_VIEW_BINDER(
0171
0172
0173 views::unordered_multiset_view
0174 )
0175
0176 typedef mpl::bool_<false> mutable_key;
0177 };
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199 template
0200 <
0201 class HashFunctor = hash< _relation >,
0202 class EqualKey = std::equal_to< _relation >
0203 >
0204 struct unordered_multiset_of_relation : public ::boost::bimaps::detail::set_type_of_relation_tag
0205 {
0206
0207 typedef HashFunctor hasher;
0208
0209
0210 typedef EqualKey key_equal;
0211
0212
0213 BOOST_BIMAP_GENERATE_RELATION_BINDER_2CP(
0214
0215
0216 unordered_multiset_of,
0217
0218
0219 hasher,
0220 key_equal
0221 )
0222
0223 typedef mpl::bool_<false> left_mutable_key;
0224 typedef mpl::bool_<false> right_mutable_key;
0225 };
0226
0227
0228 }
0229 }
0230
0231
0232 #endif
0233