67 #include <hboost/unordered_map.hpp>
72 template<
typename K,
typename V,
typename H,
typename P>
76 int64 mem = inclusive ?
sizeof(map) : 0;
78 mem += map.bucket_count() *
sizeof(
void*);
81 mem += map.size() * (
sizeof(size_t) +
sizeof(
void*) +
sizeof(std::pair<K,V>));
85 template<
typename K,
typename V,
typename C>
89 int64 mem = inclusive ?
sizeof(map) : 0;
101 mem += (map.size() + 1) * ((3*
sizeof(
void*) +
sizeof(std::pair<const K,V>)
102 + 2*
sizeof(
char) + 3) & ~3);
107 template<
typename K,
typename V,
108 typename H = hboost::hash<K>,
typename P = std::equal_to<K> >
109 class UT_Map :
public hboost::unordered_map<K, V, H, P>
113 typedef hboost::unordered_map<K, V, H, P>
Base;
128 Base(hboost::unordered::detail::default_bucket_count, hf, eql) {}
132 template <
typename InputIt>
136 Base(first, last, hboost::unordered::detail::default_bucket_count,
144 UT_Map(std::initializer_list<value_type> init_list)
148 this->
insert(init_list.begin(), init_list.end());
155 int64 mem = inclusive ?
sizeof(*this) : 0;
163 return this->
find(key) != this->
end();
173 auto it = this->
find(key);
174 if (it == this->
end())
198 template<
typename VIT,
typename VT>
203 template<
typename VIT,
typename VT>
209 template<
typename IT,
typename T,
typename DR>
221 template<
typename EIT,
typename EDR>
229 {
return it == o.it; }
232 {
return it != o.it; }
250 deref_pair_first<const_iterator, const key_type>>;
252 deref_pair_second<iterator, mapped_type>>;
254 deref_pair_second<const_iterator, const mapped_type>>;
282 template<
typename K,
typename V,
typename C = std::less<K> >
287 typedef std::map<K, V, C>
Base;
301 template<
typename InputIt>
304 template<
typename InputIt>
306 Base(first, last, lt) {}
315 this->
insert(init_list.begin(), init_list.end());
320 int64 mem = inclusive ?
sizeof(*this) : 0;
327 return this->
find(key) != this->
end();
331 template<
typename VIT,
typename VT>
336 template<
typename VIT,
typename VT>
342 template<
typename IT,
typename T,
typename DR>
354 template<
typename EIT,
typename EDR>
362 {
return it == o.it; }
365 {
return it != o.it; }
383 deref_pair_first<iterator, key_type>>;
385 deref_pair_first<const_iterator, const key_type>>;
387 deref_pair_second<iterator, mapped_type>>;
389 deref_pair_second<const_iterator, const mapped_type>>;
420 template<
typename OS,
typename K,
typename V>
422 operator<<(OS &os, const pair<K, V> &
v)
424 os <<
"<" <<
v.first <<
", " <<
v.second <<
">";
429 template<
typename OS,
typename K,
typename V>
431 operator<<(OS &os, const UT_Map<K, V> &d)
437 template<
typename OS,
typename K,
typename V>
439 operator<<(OS &os, const UT_SortedMap<K, V> &d)
partial_iterator_base< iterator, mapped_type, deref_pair_second< iterator, mapped_type >> mapped_iterator
UT_IteratorRange< const_key_iterator > key_range() const
int64 getMemoryUsage(bool inclusive) const
int64 getMemoryUsage(bool inclusive) const
std::forward_iterator_tag iterator_category
std::ptrdiff_t difference_type
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
FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr &out) -> bool
std::ptrdiff_t difference_type
reference operator*() const
OIIO_FORCEINLINE vbool4 insert(const vbool4 &a, bool val)
Helper: substitute val for a[i].
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++()
STATIC_INLINE uint64_t H(uint64_t x, uint64_t y, uint64_t mul, int r)
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
__hostdev__ uint64_t last(uint32_t i) const
std::forward_iterator_tag iterator_category
pointer operator->() const
UT_IteratorRange< const_mapped_iterator > mapped_range() const
UT_IteratorRange< key_iterator > key_range()
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
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.
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.