42 #include <hboost/unordered_map.hpp>
46 template<
typename K,
typename V,
typename H,
typename P>
50 int64 mem = inclusive ?
sizeof(map) : 0;
52 mem += map.bucket_count() *
sizeof(
void*);
55 mem += map.size() * (
sizeof(size_t) +
sizeof(
void*) +
sizeof(std::pair<K,V>));
59 template<
typename K,
typename V,
typename C>
63 int64 mem = inclusive ?
sizeof(map) : 0;
75 mem += (map.size() + 1) * ((3*
sizeof(
void*) +
sizeof(std::pair<const K,V>)
76 + 2*
sizeof(
char) + 3) & ~3);
81 template<
typename K,
typename V,
82 typename H = hboost::hash<K>,
typename P = std::equal_to<K> >
83 class UT_Map :
public hboost::unordered_map<K, V, H, P>
87 typedef hboost::unordered_map<K, V, H, P>
Base;
91 typedef typename Base::hasher
hasher;
102 Base(hboost::unordered::detail::default_bucket_count, hf, eql) {}
105 template <
typename InputIt>
110 template <
typename InputIt>
114 Base(first, last, hboost::unordered::detail::default_bucket_count,
122 UT_Map(std::initializer_list<value_type> init_list)
126 this->
insert(init_list.begin(), init_list.end());
133 int64 mem = inclusive ?
sizeof(*this) : 0;
141 return this->
find(key) != this->
end();
145 template<
typename VIT,
typename VT>
150 template<
typename VIT,
typename VT>
156 template<
typename IT,
typename T,
typename DR>
158 public std::iterator<std::forward_iterator_tag, T>
166 template<
typename EIT,
typename EDR>
174 {
return it == o.it; }
177 {
return it != o.it; }
195 deref_pair_first<iterator, key_type>>;
197 deref_pair_first<const_iterator, const key_type>>;
199 deref_pair_second<iterator, mapped_type>>;
201 deref_pair_second<const_iterator, const mapped_type>>;
236 template<
typename K,
typename V,
typename C = std::less<K> >
241 typedef std::map<K, V, C>
Base;
255 template<
typename InputIt>
258 template<
typename InputIt>
260 Base(first, last, lt) {}
269 this->
insert(init_list.begin(), init_list.end());
274 int64 mem = inclusive ?
sizeof(*this) : 0;
281 return this->
find(key) != this->
end();
285 template<
typename VIT,
typename VT>
290 template<
typename VIT,
typename VT>
296 template<
typename IT,
typename T,
typename DR>
298 public std::iterator<std::forward_iterator_tag, T>
306 template<
typename EIT,
typename EDR>
314 {
return it == o.it; }
317 {
return it != o.it; }
340 deref_pair_first<iterator, key_type>>;
342 deref_pair_first<const_iterator, const key_type>>;
344 deref_pair_second<iterator, mapped_type>>;
346 deref_pair_second<const_iterator, const mapped_type>>;
377 template<
typename OS,
typename K,
typename V>
379 operator<<(OS &os, const pair<K, V> &
v)
381 os <<
"<" <<
v.first <<
", " <<
v.second <<
">";
386 template<
typename OS,
typename K,
typename V>
388 operator<<(OS &os, const UT_Map<K, V> &d)
394 template<
typename OS,
typename K,
typename V>
396 operator<<(OS &os, const UT_SortedMap<K, V> &d)
vbool4 insert(const vbool4 &a, bool val)
Helper: substitute val for a[i].
partial_iterator_base< iterator, mapped_type, deref_pair_second< iterator, mapped_type >> mapped_iterator
partial_iterator_base< iterator, key_type, deref_pair_first< iterator, key_type >> key_iterator
UT_IteratorRange< const_key_iterator > key_range() const
int64 getMemoryUsage(bool inclusive) const
FMT_CONSTEXPR auto begin(const C &c) -> decltype(c.begin())
UT_Map(InputIt first, InputIt last)
Initialize the map from an iterator pair.
int64 getMemoryUsage(bool inclusive) const
UT_IteratorRange< IterT > UTmakeRange(IterT &&b, IterT &&e)
partial_iterator_base(const partial_iterator_base< EIT, T, EDR > &src)
VT & operator()(const VIT &v) const
reference operator*() const
partial_iterator_base & operator++()
bool operator!=(const partial_iterator_base< IT, T, DR > &o) const
UT_SortedMap(std::initializer_list< value_type > init_list)
Base::value_type value_type
UT_SortedMap(InputIt first, InputIt last)
hboost::unordered_map< K, V, H, P > Base
VT & operator()(const VIT &v) const
partial_iterator_base< iterator, key_type, deref_pair_first< iterator, key_type >> key_iterator
pointer operator->() const
bool operator!=(const partial_iterator_base< IT, T, DR > &o) const
Base::mapped_type mapped_type
partial_iterator_base< const_iterator, const key_type, deref_pair_first< const_iterator, const key_type >> const_key_iterator
UT_SortedMap(InputIt first, InputIt last, const LessThan <)
VT & operator()(const VIT &v) const
UT_IteratorRange< const_mapped_iterator > mapped_range() const
UT_Map(const Hasher &hf=Hasher(), const Equal &eql=Equal())
partial_iterator_base< const_iterator, const mapped_type, deref_pair_second< const_iterator, const mapped_type >> const_mapped_iterator
UT_IteratorRange< mapped_iterator > mapped_range()
partial_iterator_base & operator++()
Base::const_iterator const_iterator
int64 UTgetMemoryUsage(const hboost::unordered_map< K, V, H, P > &map, bool inclusive)
VT & operator()(const VIT &v) const
bool operator==(const partial_iterator_base< IT, T, DR > &o) const
UT_SortedMap(const LessThan <)
Base::mapped_type mapped_type
pointer operator->() const
UT_IteratorRange< const_mapped_iterator > mapped_range() const
UT_IteratorRange< key_iterator > key_range()
partial_iterator_base & operator=(const partial_iterator_base< IT, T, DR > &src)
FMT_CONSTEXPR bool find(Ptr first, Ptr last, T value, Ptr &out)
UT_Map(InputIt first, InputIt last, const Hasher &hf=Hasher(), const Equal &eql=Equal())
UT_IteratorRange< mapped_iterator > mapped_range()
reference operator*() const
UT_Map(std::initializer_list< value_type > init_list)
UT_IteratorRange< const_key_iterator > key_range() const
Base::value_type value_type
partial_iterator_base(IT it)
bool contains(const key_type &key) const
Base::const_iterator const_iterator
partial_iterator_base< iterator, mapped_type, deref_pair_second< iterator, mapped_type >> mapped_iterator
Base::key_compare key_compare
partial_iterator_base< const_iterator, const key_type, deref_pair_first< const_iterator, const key_type >> const_key_iterator
UT_IteratorRange< key_iterator > key_range()
Base::key_equal key_equal
partial_iterator_base< const_iterator, const mapped_type, deref_pair_second< const_iterator, const mapped_type >> const_mapped_iterator
bool operator==(const partial_iterator_base< IT, T, DR > &o) const
partial_iterator_base(const partial_iterator_base< EIT, T, EDR > &src)
partial_iterator_base(IT it)
bool contains(const key_type &key) const
Returns true if a value with the key is contained in the map.