24#ifndef PXR_BASE_VT_HASH_H
25#define PXR_BASE_VT_HASH_H
28#include "pxr/base/vt/api.h"
33PXR_NAMESPACE_OPEN_SCOPE
35namespace Vt_HashDetail {
38VT_API
void _IssueUnimplementedHashError(std::type_info
const &t);
41template <class T, class = decltype(TfHash()(std::declval<T>()))>
42constexpr bool _IsHashable(
long) {
return true; }
44constexpr bool _IsHashable(...) {
return false; }
49template <class T, class = decltype(TfHash()(std::declval<T>()))>
51_HashValueImpl(T
const &val,
long)
58_HashValueImpl(T
const &val, ...)
60 Vt_HashDetail::_IssueUnimplementedHashError(
typeid(T));
72 return Vt_HashDetail::_IsHashable<T>(0);
78size_t VtHashValue(T
const &val)
80 return Vt_HashDetail::_HashValueImpl(val, 0);
83PXR_NAMESPACE_CLOSE_SCOPE
A user-extensible hashing mechanism for use with runtime hash tables.