42 #ifndef _DWMOPERATORS_HH_ 43 #define _DWMOPERATORS_HH_ 45 #include <unordered_map> 46 #include <unordered_set> 53 #if (! defined(__clang__)) 54 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 55 template <
typename _keyT,
typename _valueT,
typename _Hash,
56 typename _Pred,
typename _Alloc>
58 (
const std::unordered_map<_keyT, _valueT, _Hash, _Pred, _Alloc> & a,
59 const std::unordered_map<_keyT, _valueT, _Hash, _Pred, _Alloc> & b)
61 if (a.size() != b.size())
63 typename std::unordered_map<_keyT, _valueT, _Hash, _Pred, _Alloc>::const_iterator
65 for (ai = a.begin(); ai != a.end(); ++ai) {
66 bi = b.find(ai->first);
69 if (bi->second != ai->second)
80 #if (! defined(__clang__)) 81 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 82 template <
typename _keyT,
typename _valueT,
typename _Hash,
83 typename _Pred,
typename _Alloc>
85 (
const std::unordered_map<_keyT, _valueT, _Hash, _Pred, _Alloc> & a,
86 const std::unordered_map<_keyT, _valueT, _Hash, _Pred, _Alloc> & b)
96 #if (! defined(__clang__)) 97 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 98 template <
typename _keyT,
typename _valueT,
typename _Hash,
99 typename _Pred,
typename _Alloc>
101 (
const std::unordered_multimap<_keyT, _valueT, _Hash, _Pred, _Alloc> & a,
102 const std::unordered_multimap<_keyT, _valueT, _Hash, _Pred, _Alloc> & b)
105 if (a.size() != b.size())
107 typedef typename std::unordered_multimap<_keyT, _valueT, _Hash, _Pred, _Alloc>::const_iterator ConstIterator;
109 for (ai = a.begin(); ai != a.end(); ++ai) {
110 std::pair<ConstIterator,ConstIterator> aiRange =
111 a.equal_range(ai->first);
112 std::pair<ConstIterator,ConstIterator> biRange =
113 b.equal_range(ai->first);
116 if (std::distance(aiRange.first, aiRange.second)
117 != std::distance(biRange.first, biRange.second)) {
122 size_t aCount = 0, bCount = 0;
123 ConstIterator ari = aiRange.first;
124 for ( ; ari != aiRange.second; ++ari) {
126 for (ri = aiRange.first; ri != aiRange.second; ++ri) {
127 if (ri->second == ari->second) {
131 for (ri = biRange.first ; ri != biRange.second; ++ri) {
132 if (ri->second == ari->second) {
137 if (aCount != bCount) {
146 #if (! defined(__clang__)) 147 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 151 template <
typename _keyT,
typename _valueT,
typename _Hash,
152 typename _Pred,
typename _Alloc>
154 (
const std::unordered_multimap<_keyT, _valueT, _Hash, _Pred, _Alloc> & a,
155 const std::unordered_multimap<_keyT, _valueT, _Hash, _Pred, _Alloc> & b)
165 #if (! defined(__clang__)) 166 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 167 template <
typename _valueT,
typename _Hash,
168 typename _Pred,
typename _Alloc>
170 (
const std::unordered_set<_valueT, _Hash, _Pred, _Alloc> & a,
171 const std::unordered_set<_valueT, _Hash, _Pred, _Alloc> & b)
173 if (a.size() != b.size())
175 typename std::unordered_set<_valueT, _Hash, _Pred, _Alloc>::const_iterator
177 for (ai = a.begin(); ai != a.end(); ++ai) {
192 #if (! defined(__clang__)) 193 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 194 template <
typename _valueT,
typename _Hash,
195 typename _Pred,
typename _Alloc>
197 (
const std::unordered_set<_valueT, _Hash, _Pred, _Alloc> & a,
198 const std::unordered_set<_valueT, _Hash, _Pred, _Alloc> & b)
208 #if (! defined(__clang__)) 209 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 210 template <
typename _valueT,
typename _Hash,
211 typename _Pred,
typename _Alloc>
213 (
const std::unordered_multiset<_valueT, _Hash, _Pred, _Alloc> & a,
214 const std::unordered_multiset<_valueT, _Hash, _Pred, _Alloc> & b)
217 if (a.size() != b.size())
219 typedef typename std::unordered_multiset<_valueT, _Hash, _Pred, _Alloc>::const_iterator ConstIterator;
221 for (ai = a.begin(); ai != a.end(); ++ai) {
222 std::pair<ConstIterator,ConstIterator> aiRange = a.equal_range(*ai);
223 std::pair<ConstIterator,ConstIterator> biRange = b.equal_range(*ai);
226 if (std::distance(aiRange.first, aiRange.second)
227 != std::distance(biRange.first, biRange.second)) {
239 #if (! defined(__clang__)) 240 #if (! HAVE_GPLUSPLUS_VERSION(4,6)) 241 template <
typename _valueT,
typename _Hash,
242 typename _Pred,
typename _Alloc>
244 (
const std::unordered_multiset<_valueT, _Hash, _Pred, _Alloc> & a,
245 const std::unordered_multiset<_valueT, _Hash, _Pred, _Alloc> & b)
252 #endif // _DWMOPERATORS_HH_ A configure target for dealing with OS differences.