70 #include <hboost/unordered_map.hpp>
77 template<
typename K,
typename V,
typename H,
typename P>
81 int64 mem = inclusive ?
sizeof(map) : 0;
83 mem += map.bucket_count() *
sizeof(
void*);
86 mem += map.size() * (
sizeof(size_t) +
sizeof(
void*) +
sizeof(std::pair<K,V>));
90 template<
typename K,
typename V,
typename C>
94 int64 mem = inclusive ?
sizeof(map) : 0;
106 mem += (map.size() + 1) * ((3*
sizeof(
void*) +
sizeof(std::pair<const K,V>)
107 + 2*
sizeof(
char) + 3) & ~3);
112 template<
typename K,
typename V,
113 typename H = hboost::hash<K>,
typename P = std::equal_to<K> >
114 class UT_Map :
public hboost::unordered_map<K, V, H, P>
118 typedef hboost::unordered_map<K, V, H, P>
Base;
133 Base(hboost::unordered::detail::default_bucket_count, hf, eql) {}
137 template <
typename InputIt>
141 Base(first, last, hboost::unordered::detail::default_bucket_count,
149 UT_Map(std::initializer_list<value_type> init_list)
153 this->
insert(init_list.begin(), init_list.end());
160 int64 mem = inclusive ?
sizeof(*this) : 0;
168 return this->
find(key) != this->
end();
178 auto it = this->
find(key);
179 if (it == this->
end())
203 template<
typename VIT,
typename VT>
208 template<
typename VIT,
typename VT>
214 template<
typename IT,
typename T,
typename DR>
226 template<
typename EIT,
typename EDR>
234 {
return it == o.it; }
237 {
return it != o.it; }
255 deref_pair_first<const_iterator, const key_type>>;
257 deref_pair_second<iterator, mapped_type>>;
259 deref_pair_second<const_iterator, const mapped_type>>;
287 template<
typename K,
typename V,
typename C = std::less<K> >
292 typedef std::map<K, V, C>
Base;
306 template<
typename InputIt>
309 template<
typename InputIt>
311 Base(first, last, lt) {}
320 this->
insert(init_list.begin(), init_list.end());
325 int64 mem = inclusive ?
sizeof(*this) : 0;
332 return this->
find(key) != this->
end();
336 template<
typename VIT,
typename VT>
341 template<
typename VIT,
typename VT>
347 template<
typename IT,
typename T,
typename DR>
359 template<
typename EIT,
typename EDR>
367 {
return it == o.it; }
370 {
return it != o.it; }
388 deref_pair_first<iterator, key_type>>;
390 deref_pair_first<const_iterator, const key_type>>;
392 deref_pair_second<iterator, mapped_type>>;
394 deref_pair_second<const_iterator, const mapped_type>>;
425 template<
typename OS,
typename K,
typename V>
427 operator<<(OS &os, const pair<K, V> &
v)
429 os <<
"<" <<
v.first <<
", " <<
v.second <<
">";
434 template<
typename OS,
typename K,
typename V>
436 operator<<(OS &os, const UT_Map<K, V> &d)
442 template<
typename OS,
typename K,
typename V>
444 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
#define SYS_PRAGMA_PUSH_WARN()
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)
#define SYS_PRAGMA_POP_WARN()
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
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.
#define SYS_PRAGMA_DISABLE_NON_NULL()
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.