24 #ifndef PXR_USD_IMAGING_USD_IMAGING_PRIMVARDESC_CACHE_H
25 #define PXR_USD_IMAGING_USD_IMAGING_PRIMVARDESC_CACHE_H
38 #include <tbb/concurrent_unordered_map.h>
39 #include <tbb/concurrent_queue.h>
67 return _path == rhs._path && _attribute == rhs._attribute;
70 return !(*
this == rhs);
76 key._attribute.
Hash());
82 static TfToken attr(
"primvars");
83 return Key(path, attr);
92 template <
typename Element>
95 typedef tbb::concurrent_unordered_map<Key, Element, Key::Hash> _MapType;
96 typedef typename _MapType::iterator _MapIt;
97 typedef typename _MapType::const_iterator _MapConstIt;
98 typedef tbb::concurrent_queue<_MapIt> _QueueType;
106 template <
typename T>
107 bool _Find(Key
const& key,
T*
value)
const {
108 typedef _TypedCache<T> Cache_t;
110 Cache_t *cache =
nullptr;
113 typename Cache_t::_MapConstIt it = cache->_map.find(key);
114 if (it == cache->_map.end()) {
123 template <
typename T>
124 void _Erase(Key
const& key) {
125 if (!TF_VERIFY(!_locked)) {
129 typedef _TypedCache<T> Cache_t;
131 Cache_t *cache =
nullptr;
133 cache->_map.unsafe_erase(key);
139 template <
typename T>
140 T& _Get(Key
const& key)
const {
141 typedef _TypedCache<T> Cache_t;
143 Cache_t *cache =
nullptr;
147 std::pair<typename Cache_t::_MapIt, bool> res =
148 cache->_map.insert(std::make_pair(key,
T()));
150 return res.first->second;
160 _Erase<HdPrimvarDescriptorVector>(Key::Primvars(path));
164 return _Get<HdPrimvarDescriptorVector>(Key::Primvars(path));
168 return _Find(Key::Primvars(path), value);
174 typedef _TypedCache<HdPrimvarDescriptorVector> _PviCache;
175 mutable _PviCache _pviCache;
177 void _GetCache(_PviCache **cache)
const {
185 #endif // PXR_USD_IMAGING_USD_IMAGING_PRIMVARDESC_CACHE_H
GLsizei const GLchar *const * path
size_t GetHash() const
Equality operator.
HdPrimvarDescriptorVector & GetPrimvars(SdfPath const &path) const
UsdImagingPrimvarDescCache & operator=(const UsdImagingPrimvarDescCache &)=delete
size_t operator()(Key const &key) const
UsdImagingPrimvarDescCache()
bool FindPrimvars(SdfPath const &path, HdPrimvarDescriptorVector *value) const
bool operator!=(Key const &rhs) const
void Clear(SdfPath const &path)
Clear all data associated with a specific path.
static size_t Combine(Args &&...args)
Produce a hash code by combining the hash codes of several objects.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
bool operator==(Key const &rhs) const
#define PXR_NAMESPACE_CLOSE_SCOPE
std::vector< HdPrimvarDescriptor > HdPrimvarDescriptorVector
Key(SdfPath const &path, TfToken const &attr)
size_t Hash() const
Return a size_t hash for this token.