struct.h
/* Copyright (c) 2018 vargaconsulting, Toronto,ON Canada
* Author: Varga, Steven <steven@vargaconsulting.ca>
*/
#ifndef H5TEST_STRUCT_01
#define H5TEST_STRUCT_01
/* typedef is allowed */
typedef unsigned long long int MyUInt;
namespace sn {
namespace typecheck {
struct Record { /*the types with direct mapping to HDF5*/
char _char; unsigned char _uchar; short _short; unsigned short _ushort; int _int; unsigned int _uint;
long _long; unsigned long _ulong; long long int _llong; unsigned long long _ullong;
float _float; double _double; long double _ldouble;
bool _bool;
// wide characters are not supported in HDF5
// wchar_t _wchar; char16_t _wchar16; char32_t _wchar32;
};
}
namespace other {
struct Record { // POD struct with nested namespace
MyUInt idx; // typedef type
MyUInt aa; // typedef type
double field_02[3]; // const array mapped
typecheck::Record field_03[4]; //
};
}
namespace example {
struct Record { // POD struct with nested namespace
MyUInt idx; // typedef type
float field_02[7]; // const array mapped
sn::other::Record field_03[5]; // embedded Record
sn::other::Record field_04[5]; // must be optimized out, same as previous
other::Record field_05[3][8]; // array of arrays
};
}
namespace not_supported_yet {
// NON POD: not supported in phase 1
// C++ Class -> PODstruct -> persistence[ HDF5 | ??? ] -> PODstruct -> C++ Class
struct Container {
double idx; //
std::string field_05; // c++ object makes it non-POD
std::vector<example::Record> field_02; // ditto
};
}
/* BEGIN IGNORED STRUCT */
// these structs are not referenced with h5::read|h5::write|h5::create operators
// hence compiler should ignore them.
struct IgnoredRecord {
signed long int idx;
float field_0n;
};
/* END IGNORED STRUCTS */
}
#endif