7#ifndef PXR_BASE_VT_HASH_H
8#define PXR_BASE_VT_HASH_H
13#include "pxr/base/vt/api.h"
18PXR_NAMESPACE_OPEN_SCOPE
22namespace Vt_HashDetail {
25VT_API
void _IssueUnimplementedHashError(std::type_info
const &t);
28template <class T, class = decltype(TfHash()(std::declval<T>()))>
29constexpr bool _IsHashable(
long) {
return true; }
31constexpr bool _IsHashable(...) {
return false; }
36template <class T, class = decltype(TfHash()(std::declval<T>()))>
38_HashValueImpl(T
const &val,
long)
45_HashValueImpl(T
const &val, ...)
47 Vt_HashDetail::_IssueUnimplementedHashError(
typeid(T));
60 return Vt_HashDetail::_IsHashable<T>(0);
68 return Vt_HashDetail::_HashValueImpl(val, 0);
71PXR_NAMESPACE_CLOSE_SCOPE
A user-extensible hashing mechanism for use with runtime hash tables.
constexpr bool VtIsHashable()
A constexpr function that returns true if T is hashable via VtHashValue(), false otherwise.
size_t VtHashValue(T const &val)
Compute a hash code for val by invoking TfHash()(val) or when not possible issue a coding error and r...