24 #ifndef PXR_BASE_VT_TYPES_H
25 #define PXR_BASE_VT_TYPES_H
38 #include <hboost/preprocessor/cat.hpp>
39 #include <hboost/preprocessor/seq/for_each.hpp>
40 #include <hboost/preprocessor/seq/for_each_i.hpp>
41 #include <hboost/preprocessor/tuple/elem.hpp>
55 #define VT_FLOATING_POINT_BUILTIN_VALUE_TYPES \
56 (( double, Double )) \
60 #define VT_INTEGRAL_BUILTIN_VALUE_TYPES \
63 (( unsigned char, UChar )) \
65 (( unsigned short, UShort )) \
67 (( unsigned int, UInt )) \
68 (( int64_t, Int64 )) \
69 (( uint64_t, UInt64 ))
71 #define VT_VEC_INT_VALUE_TYPES \
72 (( GfVec4i, Vec4i )) \
73 (( GfVec3i, Vec3i )) \
76 #define VT_VEC_HALF_VALUE_TYPES \
77 (( GfVec4h, Vec4h )) \
78 (( GfVec3h, Vec3h )) \
81 #define VT_VEC_FLOAT_VALUE_TYPES \
82 (( GfVec4f, Vec4f )) \
83 (( GfVec3f, Vec3f )) \
86 #define VT_VEC_DOUBLE_VALUE_TYPES \
87 (( GfVec4d, Vec4d )) \
88 (( GfVec3d, Vec3d )) \
91 #define VT_VEC_VALUE_TYPES \
92 VT_VEC_INT_VALUE_TYPES \
93 VT_VEC_HALF_VALUE_TYPES \
94 VT_VEC_FLOAT_VALUE_TYPES \
95 VT_VEC_DOUBLE_VALUE_TYPES
97 #define VT_MATRIX_FLOAT_VALUE_TYPES \
98 (( GfMatrix4f, Matrix4f )) \
99 (( GfMatrix3f, Matrix3f )) \
100 (( GfMatrix2f, Matrix2f )) \
102 #define VT_MATRIX_DOUBLE_VALUE_TYPES \
103 (( GfMatrix4d, Matrix4d )) \
104 (( GfMatrix3d, Matrix3d )) \
105 (( GfMatrix2d, Matrix2d ))
107 #define VT_MATRIX_VALUE_TYPES \
108 VT_MATRIX_FLOAT_VALUE_TYPES \
109 VT_MATRIX_DOUBLE_VALUE_TYPES \
111 #define VT_GFRANGE_VALUE_TYPES \
112 (( GfRange3f, Range3f )) \
113 (( GfRange3d, Range3d )) \
114 (( GfRange2f, Range2f )) \
115 (( GfRange2d, Range2d )) \
116 (( GfRange1f, Range1f )) \
117 (( GfRange1d, Range1d ))
119 #define VT_RANGE_VALUE_TYPES \
120 VT_GFRANGE_VALUE_TYPES \
121 (( GfInterval, Interval )) \
122 (( GfRect2i, Rect2i ))
124 #define VT_STRING_VALUE_TYPES \
125 (( std::string, String )) \
128 #define VT_QUATERNION_VALUE_TYPES \
129 (( GfQuath, Quath )) \
130 (( GfQuatf, Quatf )) \
131 (( GfQuatd, Quatd )) \
132 (( GfQuaternion, Quaternion ))
134 #define VT_DUALQUATERNION_VALUE_TYPES \
135 (( GfDualQuath, DualQuath )) \
136 (( GfDualQuatf, DualQuatf )) \
137 (( GfDualQuatd, DualQuatd ))
139 #define VT_NONARRAY_VALUE_TYPES \
140 (( GfFrustum, Frustum)) \
141 (( GfMultiInterval, MultiInterval))
144 #define VT_TYPE(elem) \
145 HBOOST_PP_TUPLE_ELEM(2, 0, elem)
146 #define VT_TYPE_NAME(elem) \
147 HBOOST_PP_TUPLE_ELEM(2, 1, elem)
151 #define VT_BUILTIN_NUMERIC_VALUE_TYPES \
152 VT_INTEGRAL_BUILTIN_VALUE_TYPES VT_FLOATING_POINT_BUILTIN_VALUE_TYPES
154 #define VT_BUILTIN_VALUE_TYPES \
155 VT_BUILTIN_NUMERIC_VALUE_TYPES VT_STRING_VALUE_TYPES
157 #define VT_SCALAR_CLASS_VALUE_TYPES \
159 VT_MATRIX_VALUE_TYPES \
160 VT_RANGE_VALUE_TYPES \
161 VT_QUATERNION_VALUE_TYPES \
162 VT_DUALQUATERNION_VALUE_TYPES
164 #define VT_SCALAR_VALUE_TYPES \
165 VT_SCALAR_CLASS_VALUE_TYPES VT_BUILTIN_VALUE_TYPES
174 #define VT_ARRAY_TYPEDEF(r, unused, elem) \
175 typedef VtArray< VT_TYPE(elem) > \
176 HBOOST_PP_CAT(Vt, HBOOST_PP_CAT(VT_TYPE_NAME(elem), Array)) ;
181 #define VT_ARRAY_TYPE_TUPLE(r, unused, elem) \
182 (( HBOOST_PP_CAT(Vt, HBOOST_PP_CAT(VT_TYPE_NAME(elem), Array)) , \
183 HBOOST_PP_CAT(VT_TYPE_NAME(elem), Array) ))
184 #define VT_ARRAY_VALUE_TYPES \
185 HBOOST_PP_SEQ_FOR_EACH(VT_ARRAY_TYPE_TUPLE, ~, VT_SCALAR_VALUE_TYPES)
187 #define VT_CLASS_VALUE_TYPES \
188 VT_ARRAY_VALUE_TYPES VT_SCALAR_CLASS_VALUE_TYPES VT_NONARRAY_VALUE_TYPES
190 #define VT_VALUE_TYPES \
191 VT_BUILTIN_VALUE_TYPES VT_CLASS_VALUE_TYPES
193 namespace Vt_KnownValueTypeDetail
206 #define VT_SET_VALUE_TYPE_INDEX(r, unused, i, elem) \
207 template <> constexpr int \
208 GetIndex< VT_TYPE(elem) >() { \
212 #undef VT_SET_VALUE_TYPE_INDEX
238 constexpr
int index = Vt_KnownValueTypeDetail::GetIndex<T>();
239 static_assert(index != -1,
"T is not one of the known VT_VALUE_TYPES.");
248 return Vt_KnownValueTypeDetail::GetIndex<T>() != -1;
257 static const bool value = VtIsKnownValueType<T>();
263 #define VT_SPECIALIZE_IS_VALUE_PROXY(r, unused, elem) \
265 VtIsValueProxy< VT_TYPE(elem) > : std::false_type {}; \
267 VtIsTypedValueProxy< VT_TYPE(elem) > : std::false_type {}; \
269 VtIsErasedValueProxy< VT_TYPE(elem) > : std::false_type {};
271 #undef VT_SPECIALIZE_IS_VALUE_PROXY
293 if (thisRank != otherRank)
299 return !(*
this == other);
302 memset(
this, 0,
sizeof(*
this));
311 #endif // PXR_BASE_VT_TYPES_H
bool operator!=(Vt_ShapeData const &other) const
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
HBOOST_PP_SEQ_FOR_EACH(SDF_DECLARE_VALUE_TYPE_TRAITS,~, SDF_VALUE_TYPES)
#define VT_SCALAR_VALUE_TYPES
#define VT_SPECIALIZE_IS_VALUE_PROXY(r, unused, elem)
constexpr int VtGetKnownValueTypeIndex()
constexpr bool VtIsKnownValueType()
Returns true if T is a type that appears in VT_VALUE_TYPES.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
unsigned int otherDims[NumOtherDims]
#define PXR_NAMESPACE_CLOSE_SCOPE
static const int NumOtherDims
constexpr int VtGetNumKnownValueTypes()
bool operator==(Vt_ShapeData const &other) const
#define VT_ARRAY_TYPEDEF(r, unused, elem)
#define VT_SET_VALUE_TYPE_INDEX(r, unused, i, elem)