37#ifndef Alembic_Util_PlainOldDataType_h
38#define Alembic_Util_PlainOldDataType_h
40#include <Alembic/Util/Foundation.h>
44#if !defined(_MSC_VER) || _MSC_VER >= 1600
50namespace ALEMBIC_VERSION_NS {
56typedef unsigned char byte_t;
67 bool_t() : m_byte( 0 ) {}
69 bool_t(
bool tf ) : m_byte(
static_cast<byte_t
>( tf ) ) {}
70 bool_t( byte_t b ) : m_byte( b ) {}
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 ); }
104inline bool operator==(
const bool_t &a,
const bool_t &b )
106 return a.asBool() == b.asBool();
110inline bool operator==(
const bool_t &a,
bool b )
112 return a.asBool() == b;
116inline bool operator==(
bool a,
const bool_t &b )
118 return a == b.asBool();
122inline bool operator!=(
const bool_t &a,
const bool_t &b )
124 return a.asBool() != b.asBool();
128inline bool operator!=(
const bool_t &a,
bool b )
130 return a.asBool() != b;
134inline bool operator!=(
bool a,
const bool_t &b )
136 return a != b.asBool();
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;
159typedef half float16_t;
160typedef float float32_t;
161typedef double float64_t;
219 kNumPlainOldDataTypes,
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
254DECLARE_TRAITS( kBooleanPOD,
bool_t,
"bool_t",
false, BooleanPODTraits );
255DECLARE_TRAITS( kUint8POD, uint8_t,
"uint8_t", 0, Uint8PODTraits );
256DECLARE_TRAITS( kInt8POD, int8_t,
"int8_t", 0, Int8PODTraits );
257DECLARE_TRAITS( kUint16POD, uint16_t,
"uint16_t", 0, Uint16PODTraits );
258DECLARE_TRAITS( kInt16POD, int16_t,
"int16_t", 0, Int16PODTraits );
259DECLARE_TRAITS( kUint32POD, uint32_t,
"uint32_t", 0, Uint32PODTraits );
260DECLARE_TRAITS( kInt32POD, int32_t,
"int32_t", 0, Int32PODTraits );
261DECLARE_TRAITS( kUint64POD, uint64_t,
"uint64_t", 0, Uint64PODTraits );
262DECLARE_TRAITS( kInt64POD, int64_t,
"int64_t", 0, Int64PODTraits );
263DECLARE_TRAITS( kFloat16POD, float16_t,
"float16_t", 0.0f, Float16PODTraits );
264DECLARE_TRAITS( kFloat32POD, float32_t,
"float32_t", 0.0f, Float32PODTraits );
265DECLARE_TRAITS( kFloat64POD, float64_t,
"float64_t", 0.0, Float64PODTraits );
266DECLARE_TRAITS( kStringPOD,
string,
"string",
"", StringPODTraits );
267DECLARE_TRAITS( kWstringPOD, wstring,
"wstring", L
"", WstringPODTraits );
282template <PlainOldDataType PENUM>
307template <
class PTYPE>
332inline size_t PODNumBytes( PlainOldDataType pod )
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();
358inline const char *PODName( PlainOldDataType pod )
362 case kBooleanPOD:
return BooleanPODTraits::name();
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();
371 case kFloat16POD:
return Float16PODTraits::name();
372 case kFloat32POD:
return Float32PODTraits::name();
373 case kFloat64POD:
return Float64PODTraits::name();
374 case kStringPOD:
return StringPODTraits::name();
375 case kWstringPOD:
return WstringPODTraits::name();
385inline PlainOldDataType PODFromName(
const std::string &n )
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;
401 else return kUnknownPOD;
406template <PlainOldDataType POD>
407inline void PODSetDefaultPOD(
void *addr )
410 value_type *valPtr =
reinterpret_cast<value_type*
>( addr );
415inline void PODSetDefault( PlainOldDataType pod,
void *bytes )
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;
443using namespace ALEMBIC_VERSION_NS;
Header file containing class definition for class Alembic::Util::Exception.
Definition PlainOldDataType.h:65
bool_t & operator=(bool tf)
Definition PlainOldDataType.h:79
Alembic namespace ...
Definition ArchiveInfo.cpp:39
Definition PlainOldDataType.h:283
Definition PlainOldDataType.h:308
Definition PlainOldDataType.h:232