37#ifndef Alembic_Util_PlainOldDataType_h
38#define Alembic_Util_PlainOldDataType_h
44#if !defined(_MSC_VER) || _MSC_VER >= 1600
81 m_byte =
static_cast<byte_t>( tf );
93 return bool_t( m_byte == 0 );
96 bool asBool()
const {
return ( m_byte != 0 ); }
97 operator bool()
const {
return ( m_byte != 0 ); }
139#if !defined(_MSC_VER) || _MSC_VER >= 1600
149typedef unsigned char uint8_t;
150typedef signed char int8_t;
151typedef unsigned short uint16_t;
152typedef signed short int16_t;
153typedef unsigned int uint32_t;
155typedef unsigned long long uint64_t;
156typedef long long int64_t;
232template <PlainOldDataType PODT,
class T >
struct PODTraits {};
238#define DECLARE_TRAITS( PENUM, PTYPE, PNAME, DFLT, PTDEF ) \
240struct PODTraits< PENUM , PTYPE > \
242 static const PlainOldDataType pod_enum = PENUM ; \
243 typedef PTYPE value_type ; \
244 static const char * name() { return PNAME ; } \
245 static PTYPE default_value() \
246 { return ( DFLT ) ; } \
247 static size_t numBytes() \
248 { return sizeof( PTYPE ) ; } \
250typedef PODTraits< PENUM , PTYPE > PTDEF
282template <PlainOldDataType PENUM>
307template <
class PTYPE>
336 case kBooleanPOD:
return BooleanPODTraits::numBytes();
337 case kUint8POD:
return Uint8PODTraits::numBytes();
338 case kInt8POD:
return Int8PODTraits::numBytes();
339 case kUint16POD:
return Uint16PODTraits::numBytes();
340 case kInt16POD:
return Int16PODTraits::numBytes();
341 case kUint32POD:
return Uint32PODTraits::numBytes();
342 case kInt32POD:
return Int32PODTraits::numBytes();
343 case kUint64POD:
return Uint64PODTraits::numBytes();
344 case kInt64POD:
return Int64PODTraits::numBytes();
345 case kFloat16POD:
return Float16PODTraits::numBytes();
346 case kFloat32POD:
return Float32PODTraits::numBytes();
347 case kFloat64POD:
return Float64PODTraits::numBytes();
348 case kStringPOD:
return StringPODTraits::numBytes();
349 case kWstringPOD:
return WstringPODTraits::numBytes();
363 case kUint8POD:
return Uint8PODTraits::name();
364 case kInt8POD:
return Int8PODTraits::name();
365 case kUint16POD:
return Uint16PODTraits::name();
366 case kInt16POD:
return Int16PODTraits::name();
367 case kUint32POD:
return Uint32PODTraits::name();
368 case kInt32POD:
return Int32PODTraits::name();
369 case kUint64POD:
return Uint64PODTraits::name();
370 case kInt64POD:
return Int64PODTraits::name();
374 case kStringPOD:
return StringPODTraits::name();
387 if ( n == BooleanPODTraits::name() )
return BooleanPODTraits::pod_enum;
388 else if ( n == Uint8PODTraits::name() )
return Uint8PODTraits::pod_enum;
389 else if ( n == Int8PODTraits::name() )
return Int8PODTraits::pod_enum;
390 else if ( n == Uint16PODTraits::name() )
return Uint16PODTraits::pod_enum;
391 else if ( n == Int16PODTraits::name() )
return Int16PODTraits::pod_enum;
392 else if ( n == Uint32PODTraits::name() )
return Uint32PODTraits::pod_enum;
393 else if ( n == Int32PODTraits::name() )
return Int32PODTraits::pod_enum;
394 else if ( n == Uint64PODTraits::name() )
return Uint64PODTraits::pod_enum;
395 else if ( n == Int64PODTraits::name() )
return Int64PODTraits::pod_enum;
396 else if ( n == Float16PODTraits::name() )
return Float16PODTraits::pod_enum;
397 else if ( n == Float32PODTraits::name() )
return Float32PODTraits::pod_enum;
398 else if ( n == Float64PODTraits::name() )
return Float64PODTraits::pod_enum;
399 else if ( n == StringPODTraits::name() )
return StringPODTraits::pod_enum;
400 else if ( n == WstringPODTraits::name() )
return WstringPODTraits::pod_enum;
406template <PlainOldDataType POD>
410 value_type *valPtr =
reinterpret_cast<value_type*
>( addr );
419 case kBooleanPOD: PODSetDefaultPOD<kBooleanPOD>( bytes );
return;
420 case kUint8POD: PODSetDefaultPOD<kUint8POD>( bytes );
return;
421 case kInt8POD: PODSetDefaultPOD<kInt8POD>( bytes );
return;
422 case kUint16POD: PODSetDefaultPOD<kUint16POD>( bytes );
return;
423 case kInt16POD: PODSetDefaultPOD<kInt16POD>( bytes );
return;
424 case kUint32POD: PODSetDefaultPOD<kUint32POD>( bytes );
return;
425 case kInt32POD: PODSetDefaultPOD<kInt32POD>( bytes );
return;
426 case kUint64POD: PODSetDefaultPOD<kUint64POD>( bytes );
return;
427 case kInt64POD: PODSetDefaultPOD<kInt64POD>( bytes );
return;
428 case kFloat16POD: PODSetDefaultPOD<kFloat16POD>( bytes );
return;
429 case kFloat32POD: PODSetDefaultPOD<kFloat32POD>( bytes );
return;
430 case kFloat64POD: PODSetDefaultPOD<kFloat64POD>( bytes );
return;
433 case kStringPOD: PODSetDefaultPOD<kStringPOD>( bytes );
return;
434 case kWstringPOD: PODSetDefaultPOD<kWstringPOD>( bytes );
return;
Header file containing class definition for class Alembic::Util::Exception.
#define ALEMBIC_VERSION_NS
bool_t & operator=(byte_t b)
bool_t & operator=(bool tf)
DECLARE_TRAITS(kBooleanPOD, bool_t, "bool_t", false, BooleanPODTraits)
bool operator!=(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
@ kUint16POD
Short/UShort.
@ kNumPlainOldDataTypes
Number of POD.
@ kWstringPOD
Wide String Pointer.
@ kFloat16POD
Half/Float/Double.
@ kStringPOD
String Pointer.
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
void PODSetDefault(PlainOldDataType pod, void *bytes)
const char * PODName(PlainOldDataType pod)
PlainOldDataType PODFromName(const std::string &n)
size_t PODNumBytes(PlainOldDataType pod)
void PODSetDefaultPOD(void *addr)
This actually does work with strings!