From f377e1aae267e4b055495ecbe34b969200c50097 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 8 Aug 2024 17:38:50 +0200 Subject: [PATCH] fill value in hdf5 according to actual datatype of dataset --- slsReceiverSoftware/src/MasterFileUtility.cpp | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/slsReceiverSoftware/src/MasterFileUtility.cpp b/slsReceiverSoftware/src/MasterFileUtility.cpp index 10d50fb9c..c4a53c9d2 100644 --- a/slsReceiverSoftware/src/MasterFileUtility.cpp +++ b/slsReceiverSoftware/src/MasterFileUtility.cpp @@ -215,12 +215,42 @@ std::string CreateVirtualHDF5File( // property list H5::DSetCreatPropList plist; - int fill_value = -1; - plist.setFillValue(dataType, &fill_value); + uint8_t u8 = -1; + uint16_t u16 = -1; + uint32_t u32 = -1; + uint64_t u64 = -1; + void* fill_value; + + if (dataType == H5::PredType::STD_U8LE) { + fill_value = &u8; + } else if (dataType == H5::PredType::STD_U16LE) { + fill_value = &u16; + } else if (dataType == H5::PredType::STD_U32LE) { + fill_value = &u32; + } else if (dataType == H5::PredType::STD_U64LE) { + fill_value = &u64; + } else { + throw RuntimeError("Unsupported data type for virtual HDF5 file"); + } + plist.setFillValue(dataType, fill_value); + + //uint64_t fill_value = -1; + //plist.setFillValue(dataType, &fill_value); std::vector plistPara(paraSize); // ignoring last fill (string) for (unsigned int i = 0; i != plistPara.size() - 1; ++i) { - plistPara[i].setFillValue(parameterDataTypes[i], &fill_value); + if (parameterDataTypes[i] == H5::PredType::STD_U8LE) { + fill_value = &u8; + } else if (parameterDataTypes[i] == H5::PredType::STD_U16LE) { + fill_value = &u16; + } else if (parameterDataTypes[i] == H5::PredType::STD_U32LE) { + fill_value = &u32; + } else if (parameterDataTypes[i] == H5::PredType::STD_U64LE) { + fill_value = &u64; + } else { + throw RuntimeError("Unsupported data type for virtual HDF5 file"); + } + plistPara[i].setFillValue(parameterDataTypes[i], fill_value); } // hyperslab (files)