24 #ifndef PXR_BASE_TF_BIT_UTILS_H
25 #define PXR_BASE_TF_BIT_UTILS_H
33 #include <type_traits>
35 PXR_NAMESPACE_OPEN_SCOPE
44 #define TF_BITS_FOR_VALUES(n) \
45 Tf_NumBits<n-1>::type::value
47 template <
size_t N,
size_t SUM=0,
size_t BIT=
sizeof(N)*8/2>
55 typedef typename std::conditional<N >= (1ULL<<BIT),
56 Tf_NumBits<(N>>BIT), SUM+BIT, BIT/2>,
57 Tf_NumBits<N, SUM, BIT/2> >::type _func;
58 typedef typename _func::type type;
61 template <
size_t N,
size_t SUM>
62 struct Tf_NumBits<N, SUM, 0>
64 typedef std::integral_constant<size_t, SUM+1> type;
77 #define TF_BITS_FOR_ENUM_VALUES(n) \
78 (TF_BITS_FOR_VALUES(n) + 1)
80 PXR_NAMESPACE_CLOSE_SCOPE