@@ -111,13 +111,13 @@ void HDF5FileBase::close()
111111 opened = false ;
112112}
113113
114- int HDF5FileBase::setAttribute (DataTypes type, const void * data, String path, String name)
114+ int HDF5FileBase::setAttribute (BaseDataType type, const void * data, String path, String name)
115115{
116116 return setAttributeArray (type, data, 1 , path, name);
117117}
118118
119119
120- int HDF5FileBase::setAttributeArray (DataTypes type, const void * data, int size, String path, String name)
120+ int HDF5FileBase::setAttributeArray (BaseDataType type, const void * data, int size, String path, String name)
121121{
122122 H5Location* loc;
123123 Group gloc;
@@ -335,13 +335,13 @@ HDF5RecordingData* HDF5FileBase::getDataSet(String path)
335335 }
336336}
337337
338- HDF5RecordingData* HDF5FileBase::createDataSet (DataTypes type, int sizeX, int chunkX, String path)
338+ HDF5RecordingData* HDF5FileBase::createDataSet (BaseDataType type, int sizeX, int chunkX, String path)
339339{
340340 int chunks[3 ] = {chunkX, 0 , 0 };
341341 return createDataSet (type,1 ,&sizeX,chunks,path);
342342}
343343
344- HDF5RecordingData* HDF5FileBase::createDataSet (DataTypes type, int sizeX, int sizeY, int chunkX, String path)
344+ HDF5RecordingData* HDF5FileBase::createDataSet (BaseDataType type, int sizeX, int sizeY, int chunkX, String path)
345345{
346346 int size[2 ];
347347 int chunks[3 ] = {chunkX, 0 , 0 };
@@ -350,7 +350,7 @@ HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int sizeX, int si
350350 return createDataSet (type,2 ,size,chunks,path);
351351}
352352
353- HDF5RecordingData* HDF5FileBase::createDataSet (DataTypes type, int sizeX, int sizeY, int sizeZ, int chunkX, String path)
353+ HDF5RecordingData* HDF5FileBase::createDataSet (BaseDataType type, int sizeX, int sizeY, int sizeZ, int chunkX, String path)
354354{
355355 int size[3 ];
356356 int chunks[3 ] = {chunkX, 0 , 0 };
@@ -360,7 +360,7 @@ HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int sizeX, int si
360360 return createDataSet (type,3 ,size,chunks,path);
361361}
362362
363- HDF5RecordingData* HDF5FileBase::createDataSet (DataTypes type, int sizeX, int sizeY, int sizeZ, int chunkX, int chunkY, String path)
363+ HDF5RecordingData* HDF5FileBase::createDataSet (BaseDataType type, int sizeX, int sizeY, int sizeZ, int chunkX, int chunkY, String path)
364364{
365365 int size[3 ];
366366 int chunks[3 ] = {chunkX, chunkY, 0 };
@@ -370,7 +370,7 @@ HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int sizeX, int si
370370 return createDataSet (type,3 ,size,chunks,path);
371371}
372372
373- HDF5RecordingData* HDF5FileBase::createDataSet (DataTypes type, int dimension, int * size, int * chunking, String path)
373+ HDF5RecordingData* HDF5FileBase::createDataSet (BaseDataType type, int dimension, int * size, int * chunking, String path)
374374{
375375 ScopedPointer<DataSet> data;
376376 DSetCreatPropList prop;
@@ -426,88 +426,135 @@ HDF5RecordingData* HDF5FileBase::createDataSet(DataTypes type, int dimension, in
426426
427427}
428428
429- H5::DataType HDF5FileBase::getNativeType (DataTypes type)
429+ H5::DataType HDF5FileBase::getNativeType (BaseDataType type)
430430{
431- switch (type)
432- {
433- case I8:
434- return PredType::NATIVE_INT8;
435- break ;
436- case I16:
437- return PredType::NATIVE_INT16;
438- break ;
439- case I32:
440- return PredType::NATIVE_INT32;
441- break ;
442- case I64:
443- return PredType::NATIVE_INT64;
444- break ;
445- case U8:
446- return PredType::NATIVE_UINT8;
447- break ;
448- case U16:
449- return PredType::NATIVE_UINT16;
450- break ;
451- case U32:
452- return PredType::NATIVE_UINT32;
453- break ;
454- case U64:
455- return PredType::NATIVE_UINT64;
456- break ;
457- case F32:
458- return PredType::NATIVE_FLOAT;
459- break ;
460- case F64:
461- return PredType::NATIVE_DOUBLE;
462- break ;
463- case STR:
464- return StrType (PredType::C_S1,MAX_STR_SIZE);
465- break ;
466- }
467- return PredType::NATIVE_INT32;
431+ H5::DataType baseType;
432+
433+ switch (type.type )
434+ {
435+ case BaseDataType::Type::T_I8:
436+ baseType = PredType::NATIVE_INT8;
437+ break ;
438+ case BaseDataType::Type::T_I16:
439+ baseType = PredType::NATIVE_INT16;
440+ break ;
441+ case BaseDataType::Type::T_I32:
442+ baseType = PredType::NATIVE_INT32;
443+ break ;
444+ case BaseDataType::Type::T_I64:
445+ baseType = PredType::NATIVE_INT64;
446+ break ;
447+ case BaseDataType::Type::T_U8:
448+ baseType = PredType::NATIVE_UINT8;
449+ break ;
450+ case BaseDataType::Type::T_U16:
451+ baseType = PredType::NATIVE_UINT16;
452+ break ;
453+ case BaseDataType::Type::T_U32:
454+ baseType = PredType::NATIVE_UINT32;
455+ break ;
456+ case BaseDataType::Type::T_U64:
457+ baseType = PredType::NATIVE_UINT64;
458+ break ;
459+ case BaseDataType::Type::T_F32:
460+ baseType = PredType::NATIVE_FLOAT;
461+ break ;
462+ case BaseDataType::Type::T_F64:
463+ baseType = PredType::NATIVE_DOUBLE;
464+ break ;
465+ case BaseDataType::Type::T_STR:
466+ return StrType (PredType::C_S1, type.typeSize );
467+ break ;
468+ default :
469+ baseType = PredType::NATIVE_INT32;
470+ }
471+ if (type.typeSize > 1 )
472+ {
473+ hsize_t size = type.typeSize ;
474+ return ArrayType (baseType, 1 , &size);
475+ }
476+ else return baseType;
468477}
469478
470- H5::DataType HDF5FileBase::getH5Type (DataTypes type)
479+ H5::DataType HDF5FileBase::getH5Type (BaseDataType type)
471480{
472- switch (type)
473- {
474- case I8:
475- return PredType::STD_I8LE;
476- break ;
477- case I16:
478- return PredType::STD_I16LE;
479- break ;
480- case I32:
481- return PredType::STD_I32LE;
482- break ;
483- case I64:
484- return PredType::STD_I64LE;
485- break ;
486- case U8:
487- return PredType::STD_U8LE;
488- break ;
489- case U16:
490- return PredType::STD_U16LE;
491- break ;
492- case U32:
493- return PredType::STD_U32LE;
494- break ;
495- case U64:
496- return PredType::STD_U64LE;
497- break ;
498- case F32:
499- return PredType::IEEE_F32LE;
500- break ;
501- case F64:
502- return PredType::IEEE_F64LE;
503- break ;
504- case STR:
505- return StrType (PredType::C_S1,MAX_STR_SIZE);
506- break ;
507- }
508- return PredType::STD_I32LE;
481+ H5::DataType baseType;
482+
483+ switch (type.type )
484+ {
485+ case BaseDataType::Type::T_I8:
486+ baseType = PredType::STD_I8LE;
487+ break ;
488+ case BaseDataType::Type::T_I16:
489+ baseType = PredType::STD_I16LE;
490+ break ;
491+ case BaseDataType::Type::T_I32:
492+ baseType = PredType::STD_I32LE;
493+ break ;
494+ case BaseDataType::Type::T_I64:
495+ baseType = PredType::STD_I64LE;
496+ break ;
497+ case BaseDataType::Type::T_U8:
498+ baseType = PredType::STD_U8LE;
499+ break ;
500+ case BaseDataType::Type::T_U16:
501+ baseType = PredType::STD_U16LE;
502+ break ;
503+ case BaseDataType::Type::T_U32:
504+ baseType = PredType::STD_U32LE;
505+ break ;
506+ case BaseDataType::Type::T_U64:
507+ baseType = PredType::STD_U64LE;
508+ break ;
509+ case BaseDataType::Type::T_F32:
510+ return PredType::IEEE_F32LE;
511+ break ;
512+ case BaseDataType::Type::T_F64:
513+ baseType = PredType::IEEE_F64LE;
514+ break ;
515+ case BaseDataType::Type::T_STR:
516+ return StrType (PredType::C_S1, type.typeSize );
517+ break ;
518+ default :
519+ return PredType::STD_I32LE;
520+ }
521+ if (type.typeSize > 1 )
522+ {
523+ hsize_t size = type.typeSize ;
524+ return ArrayType (baseType, 1 , &size);
525+ }
526+ else return baseType;
509527}
510528
529+ // BaseDataType
530+
531+ HDF5FileBase::BaseDataType::BaseDataType (HDF5FileBase::BaseDataType::Type t, size_t s)
532+ : type(t), typeSize(s)
533+ {}
534+
535+ HDF5FileBase::BaseDataType::BaseDataType ()
536+ : type(T_I32), typeSize(1 )
537+ {}
538+
539+ HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::STR (size_t size)
540+ {
541+ return HDF5FileBase::BaseDataType (T_STR, size);
542+ }
543+
544+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::U8 = HDF5FileBase::BaseDataType(T_U8, 1 );
545+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::U16 = HDF5FileBase::BaseDataType(T_U16, 1 );
546+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::U32 = HDF5FileBase::BaseDataType(T_U32, 1 );
547+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::U64 = HDF5FileBase::BaseDataType(T_U64, 1 );
548+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::I8 = HDF5FileBase::BaseDataType(T_I8, 1 );
549+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::I16 = HDF5FileBase::BaseDataType(T_I16, 1 );
550+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::I32 = HDF5FileBase::BaseDataType(T_I32, 1 );
551+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::I64 = HDF5FileBase::BaseDataType(T_I64, 1 );
552+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::F32 = HDF5FileBase::BaseDataType(T_F32, 1 );
553+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::F64 = HDF5FileBase::BaseDataType(T_F64, 1 );
554+ const HDF5FileBase::BaseDataType HDF5FileBase::BaseDataType::DSTR = HDF5FileBase::BaseDataType(T_STR, DEFAULT_STR_SIZE);
555+
556+ // H5RecordingData
557+
511558HDF5RecordingData::HDF5RecordingData (DataSet* data)
512559{
513560 DataSpace dSpace;
@@ -543,12 +590,12 @@ HDF5RecordingData::~HDF5RecordingData()
543590 // Safety
544591 dSet->flush (H5F_SCOPE_GLOBAL);
545592}
546- int HDF5RecordingData::writeDataBlock (int xDataSize, HDF5FileBase::DataTypes type, const void * data)
593+ int HDF5RecordingData::writeDataBlock (int xDataSize, HDF5FileBase::BaseDataType type, const void * data)
547594{
548595 return writeDataBlock (xDataSize,size[1 ],type,data);
549596}
550597
551- int HDF5RecordingData::writeDataBlock (int xDataSize, int yDataSize, HDF5FileBase::DataTypes type, const void * data)
598+ int HDF5RecordingData::writeDataBlock (int xDataSize, int yDataSize, HDF5FileBase::BaseDataType type, const void * data)
552599{
553600 hsize_t dim[3 ],offset[3 ];
554601 DataSpace fSpace ;
@@ -602,7 +649,7 @@ int HDF5RecordingData::writeDataBlock(int xDataSize, int yDataSize, HDF5FileBase
602649}
603650
604651
605- int HDF5RecordingData::writeDataRow (int yPos, int xDataSize, HDF5FileBase::DataTypes type, const void * data)
652+ int HDF5RecordingData::writeDataRow (int yPos, int xDataSize, HDF5FileBase::BaseDataType type, const void * data)
606653{
607654 hsize_t dim[2 ],offset[2 ];
608655 DataSpace fSpace ;
0 commit comments