7 #ifndef PXR_BASE_VT_TYPES_H
8 #define PXR_BASE_VT_TYPES_H
35 #define VT_FLOATING_POINT_BUILTIN_VALUE_TYPES \
36 (( double, Double )) \
40 #define VT_INTEGRAL_BUILTIN_VALUE_TYPES \
43 (( unsigned char, UChar )) \
45 (( unsigned short, UShort )) \
47 (( unsigned int, UInt )) \
48 (( int64_t, Int64 )) \
49 (( uint64_t, UInt64 ))
51 #define VT_VEC_INT_VALUE_TYPES \
52 (( GfVec4i, Vec4i )) \
53 (( GfVec3i, Vec3i )) \
56 #define VT_VEC_HALF_VALUE_TYPES \
57 (( GfVec4h, Vec4h )) \
58 (( GfVec3h, Vec3h )) \
61 #define VT_VEC_FLOAT_VALUE_TYPES \
62 (( GfVec4f, Vec4f )) \
63 (( GfVec3f, Vec3f )) \
66 #define VT_VEC_DOUBLE_VALUE_TYPES \
67 (( GfVec4d, Vec4d )) \
68 (( GfVec3d, Vec3d )) \
71 #define VT_VEC_VALUE_TYPES \
72 VT_VEC_INT_VALUE_TYPES \
73 VT_VEC_HALF_VALUE_TYPES \
74 VT_VEC_FLOAT_VALUE_TYPES \
75 VT_VEC_DOUBLE_VALUE_TYPES
77 #define VT_MATRIX_FLOAT_VALUE_TYPES \
78 (( GfMatrix4f, Matrix4f )) \
79 (( GfMatrix3f, Matrix3f )) \
80 (( GfMatrix2f, Matrix2f )) \
82 #define VT_MATRIX_DOUBLE_VALUE_TYPES \
83 (( GfMatrix4d, Matrix4d )) \
84 (( GfMatrix3d, Matrix3d )) \
85 (( GfMatrix2d, Matrix2d ))
87 #define VT_MATRIX_VALUE_TYPES \
88 VT_MATRIX_FLOAT_VALUE_TYPES \
89 VT_MATRIX_DOUBLE_VALUE_TYPES \
91 #define VT_GFRANGE_VALUE_TYPES \
92 (( GfRange3f, Range3f )) \
93 (( GfRange3d, Range3d )) \
94 (( GfRange2f, Range2f )) \
95 (( GfRange2d, Range2d )) \
96 (( GfRange1f, Range1f )) \
97 (( GfRange1d, Range1d ))
99 #define VT_RANGE_VALUE_TYPES \
100 VT_GFRANGE_VALUE_TYPES \
101 (( GfInterval, Interval )) \
102 (( GfRect2i, Rect2i ))
104 #define VT_STRING_VALUE_TYPES \
105 (( std::string, String )) \
108 #define VT_QUATERNION_VALUE_TYPES \
109 (( GfQuath, Quath )) \
110 (( GfQuatf, Quatf )) \
111 (( GfQuatd, Quatd )) \
112 (( GfQuaternion, Quaternion ))
114 #define VT_DUALQUATERNION_VALUE_TYPES \
115 (( GfDualQuath, DualQuath )) \
116 (( GfDualQuatf, DualQuatf )) \
117 (( GfDualQuatd, DualQuatd ))
119 #define VT_NONARRAY_VALUE_TYPES \
120 (( GfFrustum, Frustum)) \
121 (( GfMultiInterval, MultiInterval))
124 #define VT_TYPE(elem) \
125 TF_PP_TUPLE_ELEM(0, elem)
126 #define VT_TYPE_NAME(elem) \
127 TF_PP_TUPLE_ELEM(1, elem)
131 #define VT_BUILTIN_NUMERIC_VALUE_TYPES \
132 VT_INTEGRAL_BUILTIN_VALUE_TYPES VT_FLOATING_POINT_BUILTIN_VALUE_TYPES
134 #define VT_BUILTIN_VALUE_TYPES \
135 VT_BUILTIN_NUMERIC_VALUE_TYPES VT_STRING_VALUE_TYPES
137 #define VT_SCALAR_CLASS_VALUE_TYPES \
139 VT_MATRIX_VALUE_TYPES \
140 VT_RANGE_VALUE_TYPES \
141 VT_QUATERNION_VALUE_TYPES \
142 VT_DUALQUATERNION_VALUE_TYPES
144 #define VT_SCALAR_VALUE_TYPES \
145 VT_BUILTIN_VALUE_TYPES VT_SCALAR_CLASS_VALUE_TYPES
153 #define VT_ARRAY_ALIAS(unused, elem) \
155 Vt, TF_PP_CAT(VT_TYPE_NAME(elem), Array)) = VtArray< VT_TYPE(elem) >;
164 #define VT_ARRAY_EDIT_ALIAS(unused, elem) \
165 using TF_PP_CAT(Vt, TF_PP_CAT(VT_TYPE_NAME(elem), ArrayEdit)) \
166 = VtArrayEdit< VT_TYPE(elem) >;
175 #define VT_ARRAY_EDIT_BUILDER_ALIAS(unused, elem) \
176 using TF_PP_CAT(Vt, TF_PP_CAT(VT_TYPE_NAME(elem), ArrayEditBuilder)) \
177 = VtArrayEditBuilder< VT_TYPE(elem) >;
182 #define VT_ARRAY_TYPE_TUPLE(unused, elem) \
183 (( TF_PP_CAT(Vt, TF_PP_CAT(VT_TYPE_NAME(elem), Array)) , \
184 TF_PP_CAT(VT_TYPE_NAME(elem), Array) ))
185 #define VT_ARRAY_VALUE_TYPES \
186 TF_PP_SEQ_FOR_EACH(VT_ARRAY_TYPE_TUPLE, ~, VT_SCALAR_VALUE_TYPES)
190 #define VT_ARRAY_EDIT_TYPE_TUPLE(unused, elem) \
191 (( TF_PP_CAT(Vt, TF_PP_CAT(VT_TYPE_NAME(elem), ArrayEdit)) , \
192 TF_PP_CAT(VT_TYPE_NAME(elem), ArrayEdit) ))
193 #define VT_ARRAY_EDIT_VALUE_TYPES \
194 TF_PP_SEQ_FOR_EACH(VT_ARRAY_EDIT_TYPE_TUPLE, ~, VT_SCALAR_VALUE_TYPES)
198 #define VT_VALUE_TYPES_1 \
199 VT_BUILTIN_VALUE_TYPES VT_SCALAR_CLASS_VALUE_TYPES
200 #define VT_VALUE_TYPES_2 \
201 VT_ARRAY_VALUE_TYPES VT_ARRAY_EDIT_VALUE_TYPES VT_NONARRAY_VALUE_TYPES
207 #define VT_FOR_EACH_VALUE_TYPE(_macro) \
208 TF_PP_SEQ_FOR_EACH(_macro, ~, VT_VALUE_TYPES_1) \
209 TF_PP_SEQ_FOR_EACH(_macro, ~, VT_VALUE_TYPES_2)
214 #define VT_COMMA_TYPE(unused, elem) , VT_TYPE(elem)
220 namespace Vt_KnownValueTypeDetail
225 template <
typename T>
231 template <
typename T,
typename Typelist>
237 else if (
const int indexOfTail =
240 return 1 + indexOfTail;
247 template <
typename T>
278 constexpr
int index = Vt_KnownValueTypeDetail::GetIndex<T>();
279 static_assert(index != -1,
"T is not one of the known VT_VALUE_TYPES.");
288 return Vt_KnownValueTypeDetail::GetIndex<T>() != -1;
297 static const bool value = VtIsKnownValueType<T>();
303 #define VT_SPECIALIZE_IS_VALUE_PROXY(unused, elem) \
305 VtIsValueProxy< VT_TYPE(elem) > : std::false_type {}; \
307 VtIsTypedValueProxy< VT_TYPE(elem) > : std::false_type {}; \
309 VtIsErasedValueProxy< VT_TYPE(elem) > : std::false_type {};
311 #undef VT_SPECIALIZE_IS_VALUE_PROXY
333 if (thisRank != otherRank)
339 return !(*
this == other);
342 memset(
this, 0,
sizeof(*
this));
351 #endif // PXR_BASE_VT_TYPES_H
#define VT_ARRAY_EDIT_ALIAS(unused, elem)
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the and then *wait for them to all complete We provide a helper class
bool operator!=(Vt_ShapeData const &other) const
#define PXR_NAMESPACE_OPEN_SCOPE
GLsizei const GLfloat * value
PXR_NAMESPACE_OPEN_SCOPE VT_TYPE_IS_CHEAP_TO_COPY(TfToken)
unsigned int GetRank() const
IMATH_HOSTDEVICE constexpr bool equal(T1 a, T2 b, T3 t) IMATH_NOEXCEPT
#define VT_SPECIALIZE_IS_VALUE_PROXY(unused, elem)
TF_PP_SEQ_FOR_EACH(_TS_SUPPORT_DATA_TYPE,~, TS_SPLINE_SUPPORTED_VALUE_TYPES) template< class T > inline const expr bool TsSplineIsValidSampleType
True if template parameter T is a supported spline sampling vertex type.
#define VT_ARRAY_ALIAS(unused, elem)
#define VT_FOR_EACH_VALUE_TYPE(_macro)
#define VT_SCALAR_VALUE_TYPES
constexpr int VtGetKnownValueTypeIndex()
#define VT_COMMA_TYPE(unused, elem)
constexpr bool VtIsKnownValueType()
Returns true if T is a type that appears in VT_VALUE_TYPES.
TfMetaApply< TfMetaTail, TfMetaList< void VT_FOR_EACH_VALUE_TYPE(VT_COMMA_TYPE)>> Vt_ValueTypeList
unsigned int otherDims[NumOtherDims]
#define PXR_NAMESPACE_CLOSE_SCOPE
static const int NumOtherDims
constexpr int VtGetNumKnownValueTypes()
constexpr int GetIndexImpl(TfMetaList<>)
#define VT_ARRAY_EDIT_BUILDER_ALIAS(unused, elem)
bool operator==(Vt_ShapeData const &other) const