17 # pragma warning(disable : 4127)
33 #define OIIO_TYPEDESC_VECTOR2 1
135 int arraylen=0) noexcept
136 : basetype(static_cast<
unsigned char>(btype)),
137 aggregate(static_cast<
unsigned char>(agg)),
138 vecsemantics(static_cast<
unsigned char>(semantics)), reserved(0),
149 :
TypeDesc(btype, agg, NOSEMANTICS, arraylen) {}
172 const char *
c_str()
const;
175 o << t.
c_str();
return o;
182 "of array with unspecified length (%d)", arraylen);
183 return (arraylen >= 1 ? arraylen : 1);
190 return numelements() * aggregate;
207 "of array with unspecified length (%d)", arraylen);
208 size_t a = (size_t) (arraylen > 0 ? arraylen : 1);
209 if (
sizeof(
size_t) >
sizeof(
int)) {
211 return a * elementsize();
214 unsigned long long s = (
unsigned long long) a * elementsize();
216 return s < toobig ? (size_t)s : toobig;
236 size_t basesize () const noexcept;
246 OIIO_HOSTDEVICE constexpr
bool is_unknown () const noexcept {
return (basetype == UNKNOWN); }
260 return basetype ==
t.basetype && aggregate ==
t.aggregate &&
261 vecsemantics ==
t.vecsemantics && arraylen ==
t.arraylen;
289 return a.basetype ==
b.basetype &&
a.aggregate ==
b.aggregate &&
290 (
a.arraylen ==
b.arraylen || (
a.is_unsized_array() &&
b.is_sized_array())
291 || (
a.is_sized_array() &&
b.is_unsized_array()));
295 return this->basetype ==
b.basetype && this->aggregate ==
b.aggregate &&
296 (this->arraylen ==
b.arraylen || (this->is_unsized_array() &&
b.is_sized_array())
297 || (this->is_sized_array() &&
b.is_unsized_array()));
302 return this->aggregate == VEC2 && this->basetype ==
b && !is_array();
307 return this->aggregate == VEC3 && this->basetype ==
b && !is_array();
312 return this->aggregate == VEC4 && this->basetype ==
b && !is_array();
317 return this->aggregate == VEC2 && this->basetype ==
b && arraylen == 2
318 && this->vecsemantics == BOX;
323 return this->aggregate == VEC3 && this->basetype ==
b && arraylen == 2
324 && this->vecsemantics == BOX;
366 static_assert(std::is_default_constructible<TypeDesc>(),
"TypeDesc is not default constructable.");
367 static_assert(std::is_trivially_copyable<TypeDesc>(),
"TypeDesc is not trivially copyable.");
368 static_assert(std::is_trivially_destructible<TypeDesc>(),
"TypeDesc is not trivially destructible.");
369 static_assert(std::is_trivially_move_constructible<TypeDesc>(),
"TypeDesc is not move constructible.");
370 static_assert(std::is_trivially_copy_constructible<TypeDesc>(),
"TypeDesc is not copy constructible.");
371 static_assert(std::is_trivially_move_assignable<TypeDesc>(),
"TypeDesc is not move assignable.");
417 const char *float_fmt,
418 const char *string_fmt =
"%s",
419 const char aggregate_delim[2] =
"()",
420 const char *aggregate_sep =
",",
421 const char array_delim[2] =
"{}",
422 const char *array_sep =
",");
437 #if defined(_HALF_H_) || defined(IMATH_HALF_H_)
463 #if defined(_HALF_H_) || defined(IMATH_HALF_H_)
469 #ifdef INCLUDED_IMATHVEC_H
475 #ifdef INCLUDED_IMATHCOLOR_H
478 #ifdef INCLUDED_IMATHMATRIX_H
484 #ifdef INCLUDED_IMATHBOX_H
507 #if defined(_HALF_H_) || defined(IMATH_HALF_H_)
522 const char *int_fmt =
"%d";
523 const char *float_fmt =
"%g";
524 const char *string_fmt =
"\"%s\"";
525 const char *ptr_fmt =
"%p";
528 const char *aggregate_begin =
"(";
529 const char *aggregate_end =
")";
530 const char *aggregate_sep =
",";
533 const char *array_begin =
"{";
534 const char *array_end =
"}";
535 const char *array_sep =
",";
537 enum Flags {
None=0, escape_strings=1, quote_single_string=2 };
540 const char *uint_fmt =
"%u";
541 const char *reserved2 =
"";
542 const char *reserved3 =
"";
543 bool use_sprintf =
true;
549 const char *string_fmt =
"\"%s\"",
const char *ptr_fmt =
"%p",
550 const char *aggregate_begin =
"(",
const char *aggregate_end =
")",
551 const char *aggregate_sep =
",",
const char *array_begin =
"{",
552 const char *array_end =
"}",
const char *array_sep =
",",
553 int flags = escape_strings,
554 const char *uint_fmt =
"%u");
559 const char *int_fmt =
"{}",
const char *uint_fmt =
"{}",
560 const char *float_fmt =
"{}",
561 const char *string_fmt =
"\"{}\"",
const char *ptr_fmt =
"{}",
562 const char *aggregate_begin =
"(",
const char *aggregate_end =
")",
563 const char *aggregate_sep =
",",
const char *array_begin =
"{",
564 const char *array_end =
"}",
const char *array_sep =
",",
565 int flags = escape_strings);
602 #if FMT_VERSION >= 100000
615 auto it = ctx.begin(),
end = ctx.end();
616 if (it !=
end && (*it ==
's')) ++it;
618 if (it !=
end && *it !=
'}')
624 template <
typename FormatContext>
static const constexpr TypeDesc value()
OIIO_HOSTDEVICE constexpr bool is_box3(BASETYPE b=FLOAT) const noexcept
Is this an array of aggregates that represents a 3D bounding box?
32-bit IEEE floating point values, (C/C++ float).
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
unsigned char reserved
Reserved for future expansion.
static const TypeDesc TypeTimeCode
OIIO_INLINE_CONSTEXPR TypeDesc TypeMatrix44(TypeDesc::FLOAT, TypeDesc::MATRIX44)
64-bit IEEE floating point values, (C/C++ double).
16-bit IEEE floating point values (OpenEXR half).
static const TypeDesc TypeString
OIIO_HOSTDEVICE constexpr bool is_vec4(BASETYPE b=FLOAT) const noexcept
Is this a 4-vector aggregate (of the given type, float by default)?
static const TypeDesc TypeFloat4
OIIO_HOSTDEVICE constexpr bool equivalent(const TypeDesc &b) const noexcept
Member version of equivalent.
unsigned char aggregate
What kind of AGGREGATE is it?
OIIO_INLINE_CONSTEXPR TypeDesc TypeUstringhash(TypeDesc::USTRINGHASH)
OIIO_INLINE_CONSTEXPR TypeDesc TypeMatrix
OIIO_INLINE_CONSTEXPR TypeDesc TypeUInt64(TypeDesc::UINT64)
imath_half_bits_t half
if we're in a C-only context, alias the half bits type to half
static const constexpr TypeDesc value()
GLsizei const GLchar *const * string
GLsizei const GLfloat * value
OIIO_INLINE_CONSTEXPR TypeDesc TypeInt32(TypeDesc::INT)
OIIO_HOSTDEVICE constexpr TypeDesc(BASETYPE btype=UNKNOWN, AGGREGATE agg=SCALAR, VECSEMANTICS semantics=NOSEMANTICS, int arraylen=0) noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeUInt32(TypeDesc::UINT)
OIIO_HOSTDEVICE constexpr TypeDesc scalartype() const
Vector: a spatial direction.
OIIO_INLINE_CONSTEXPR TypeDesc TypeVector2i(TypeDesc::INT, TypeDesc::VEC2)
GLboolean GLboolean GLboolean GLboolean a
bool_constant< std::is_floating_point< T >::value||is_float128< T >::value > is_floating_point
static const constexpr TypeDesc value()
9 values representing a 3x3 matrix.
static const TypeDesc TypePoint
const char * c_str() const
OIIO_INLINE_CONSTEXPR TypeDesc TypeMatrix33(TypeDesc::FLOAT, TypeDesc::MATRIX33)
OIIO_UTIL_API std::string tostring(TypeDesc type, const void *data, const char *float_fmt, const char *string_fmt="%s", const char aggregate_delim[2]="()", const char *aggregate_sep=",", const char array_delim[2]="{}", const char *array_sep=",")
int arraylen
Array length, 0 = not array, -1 = unsized.
String-related utilities, all in namespace Strutil.
OIIO_INLINE_CONSTEXPR TypeDesc TypeBox2(TypeDesc::FLOAT, TypeDesc::VEC2, TypeDesc::BOX, 2)
A VEC2 representing a rational number val[0] / val[1]
#define FMT_END_NAMESPACE
OIIO_INLINE_CONSTEXPR TypeDesc TypePoint(TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::POINT)
OIIO_HOSTDEVICE friend constexpr bool equivalent(const TypeDesc &a, const TypeDesc &b) noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeRational(TypeDesc::INT, TypeDesc::VEC2, TypeDesc::RATIONAL)
OIIO_INLINE_CONSTEXPR TypeDesc TypeInt(TypeDesc::INT)
OIIO_HOSTDEVICE OIIO_CONSTEXPR14 size_t numelements() const noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeUnknown(TypeDesc::UNKNOWN)
std::ostream & operator<<(std::ostream &ostr, const DataType &a)
OIIO_INLINE_CONSTEXPR TypeDesc TypeUInt(TypeDesc::UINT)
static const TypeDesc TypeHalf
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
static const TypeDesc TypeKeyCode
OIIO_HOSTDEVICE constexpr bool is_vec2(BASETYPE b=FLOAT) const noexcept
Is this a 2-vector aggregate (of the given type, float by default)?
OIIO_HOSTDEVICE OIIO_CONSTEXPR14 size_t basevalues() const noexcept
16 values representing a 4x4 matrix.
OIIO_INLINE_CONSTEXPR TypeDesc TypeInt8(TypeDesc::INT8)
GLint GLint GLsizei GLint GLenum GLenum type
OIIO_HOSTDEVICE void unarray(void) noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeFloat4(TypeDesc::FLOAT, TypeDesc::VEC4)
static const TypeDesc TypeNormal
OIIO_INLINE_CONSTEXPR TypeDesc TypeInt16(TypeDesc::INT16)
OIIO_INLINE_CONSTEXPR TypeDesc TypeFloat(TypeDesc::FLOAT)
static const TypeDesc TypeMatrix44
OIIO_HOSTDEVICE constexpr bool is_sized_array() const noexcept
Does this TypeDesc describe an array, whose length is specified?
static const constexpr TypeDesc value()
signed 32-bit int values (C/C++ int).
static const TypeDesc TypeFloat
2 values representing a 2D vector.
static const constexpr TypeDesc value()
3 values representing a 3D vector.
OIIO_HOSTDEVICE constexpr bool is_vec3(BASETYPE b=FLOAT) const noexcept
Is this a 3-vector aggregate (of the given type, float by default)?
bool operator<(const GU_TetrahedronFacet &a, const GU_TetrahedronFacet &b)
OIIO_INLINE_CONSTEXPR TypeDesc TypeTimeCode(TypeDesc::UINT, TypeDesc::SCALAR, TypeDesc::TIMECODE, 2)
OIIO_HOSTDEVICE constexpr bool is_unsized_array() const noexcept
OIIO_HOSTDEVICE size_t size() const noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeString(TypeDesc::STRING)
GLboolean GLboolean GLboolean b
OIIO_UTIL_API bool convert_type(TypeDesc srctype, const void *src, TypeDesc dsttype, void *dst, int n=1)
4 values representing a 4D vector.
static const TypeDesc TypeVector
OIIO_INLINE_CONSTEXPR TypeDesc TypeBox2i(TypeDesc::INT, TypeDesc::VEC2, TypeDesc::BOX, 2)
Normal: a surface normal.
OIIO_INLINE_CONSTEXPR TypeDesc TypeVector(TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::VECTOR)
std::integral_constant< bool, std::numeric_limits< T >::is_signed||std::is_same< T, int128_opt >::value > is_signed
#define SCALAR(T)
Simplify checking for scalar types.
IMATH_NAMESPACE::V2f IMATH_NAMESPACE::Box2i std::string this attribute is obsolete as of OpenEXR v3 float
OIIO_INLINE_CONSTEXPR TypeDesc TypeColor(TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::COLOR)
static const TypeDesc TypeMatrix
static const TypeDesc TypeColor
#define OIIO_FMT_CUSTOM_FORMATTER_CONST
static const TypeDesc TypeMatrix33
OIIO_INLINE_CONSTEXPR TypeDesc TypeBox3(TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::BOX, 2)
OIIO_INLINE_CONSTEXPR TypeDesc TypeHalf(TypeDesc::HALF)
Point: a spatial location.
OIIO_INLINE_CONSTEXPR TypeDesc TypeUInt8(TypeDesc::UINT8)
OIIO_INLINE_CONSTEXPR TypeDesc TypeNormal(TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::NORMAL)
unsigned char basetype
C data type at the heart of our type.
static const constexpr TypeDesc value()
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
static const constexpr TypeDesc value()
FMT_INLINE auto format_to(OutputIt out, format_string< T...> fmt, T &&...args) -> OutputIt
static const constexpr TypeDesc value()
static const constexpr TypeDesc value()
unsigned char vecsemantics
Hint: What does the aggregate represent?
OIIO_UTIL_API const char * c_str(string_view str)
OIIO_INLINE_CONSTEXPR TypeDesc TypeInt64(TypeDesc::INT64)
OIIO_INLINE_CONSTEXPR TypeDesc TypeVector4
OIIO_HOSTDEVICE constexpr TypeDesc(BASETYPE btype, AGGREGATE agg, int arraylen) noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeBox3i(TypeDesc::INT, TypeDesc::VEC3, TypeDesc::BOX, 2)
#define FMT_BEGIN_NAMESPACE
bool operator!=(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
#define OIIO_NAMESPACE_END
OIIO_HOSTDEVICE constexpr TypeDesc(BASETYPE btype, int arraylen) noexcept
Construct an array of a non-aggregate BASETYPE.
OIIO_INLINE_CONSTEXPR TypeDesc TypeVector2(TypeDesc::FLOAT, TypeDesc::VEC2, TypeDesc::VECTOR)
OIIO_HOSTDEVICE OIIO_CONSTEXPR14 TypeDesc elementtype() const noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeKeyCode(TypeDesc::INT, TypeDesc::SCALAR, TypeDesc::KEYCODE, 7)
A VEC2[2] or VEC3[2] that represents a 2D or 3D bounds (min/max)
static const TypeDesc TypeInt
OIIO_HOSTDEVICE constexpr bool is_array() const noexcept
Does this TypeDesc describe an array?
OIIO_HOSTDEVICE size_t elementsize() const noexcept
OIIO_INLINE_CONSTEXPR TypeDesc TypeFloat2(TypeDesc::FLOAT, TypeDesc::VEC2)
static const constexpr TypeDesc value()
static const TypeDesc TypeRational
OIIO_INLINE_CONSTEXPR TypeDesc TypePointer(TypeDesc::PTR)
OIIO_HOSTDEVICE constexpr bool is_box2(BASETYPE b=FLOAT) const noexcept
Is this an array of aggregates that represents a 2D bounding box?
32-bit unsigned int values (C/C++ unsigned int).
OIIO_INLINE_CONSTEXPR TypeDesc TypeUInt16(TypeDesc::UINT16)
static const constexpr TypeDesc value()
#define OIIO_NAMESPACE_BEGIN