2424#include " itkMakeUniqueForOverwrite.h"
2525
2626#include < algorithm>
27+ #include < type_traits> // For is_signed_v.
2728
2829namespace itk
2930{
@@ -83,19 +84,20 @@ GetType()
8384 }
8485
8586GetH5TypeSpecialize (float , H5::PredType::NATIVE_FLOAT) GetH5TypeSpecialize(double , H5::PredType::NATIVE_DOUBLE)
87+ GetH5TypeSpecialize (signed char , H5::PredType::NATIVE_SCHAR) GetH5TypeSpecialize(char , H5::PredType::NATIVE_CHAR)
88+ GetH5TypeSpecialize (unsigned char , H5::PredType::NATIVE_UCHAR)
8689
87- GetH5TypeSpecialize (char , H5::PredType::NATIVE_CHAR) GetH5TypeSpecialize(unsigned char , H5::PredType::NATIVE_UCHAR)
90+ GetH5TypeSpecialize (short , H5::PredType::NATIVE_SHORT)
91+ GetH5TypeSpecialize (short unsigned int , H5::PredType::NATIVE_USHORT)
8892
89- GetH5TypeSpecialize (short , H5::PredType::NATIVE_SHORT )
90- GetH5TypeSpecialize (short unsigned int , H5::PredType::NATIVE_USHORT )
93+ GetH5TypeSpecialize (int , H5::PredType::NATIVE_INT )
94+ GetH5TypeSpecialize (unsigned int , H5::PredType::NATIVE_UINT )
9195
92- GetH5TypeSpecialize (int , H5::PredType::NATIVE_INT) GetH5TypeSpecialize(unsigned int , H5::PredType::NATIVE_UINT)
96+ GetH5TypeSpecialize (long , H5::PredType::NATIVE_LONG)
97+ GetH5TypeSpecialize (long unsigned int , H5::PredType::NATIVE_ULONG)
9398
94- GetH5TypeSpecialize (long , H5::PredType::NATIVE_LONG)
95- GetH5TypeSpecialize (long unsigned int , H5::PredType::NATIVE_ULONG)
96-
97- GetH5TypeSpecialize (long long , H5::PredType::NATIVE_LLONG)
98- GetH5TypeSpecialize (unsigned long long , H5::PredType::NATIVE_ULLONG)
99+ GetH5TypeSpecialize (long long , H5::PredType::NATIVE_LLONG)
100+ GetH5TypeSpecialize (unsigned long long , H5::PredType::NATIVE_ULLONG)
99101
100102/* The following types are not implemented. This comment serves
101103 * to indicate that the full complement of possible H5::PredType
@@ -105,13 +107,24 @@ GetH5TypeSpecialize(float, H5::PredType::NATIVE_FLOAT) GetH5TypeSpecialize(doubl
105107
106108#undef GetH5TypeSpecialize
107109
108- inline IOComponentEnum PredTypeToComponentType (H5::DataType & type)
110+ inline IOComponentEnum PredTypeToComponentType (H5::DataType & type)
109111{
110112 if (type == H5::PredType::NATIVE_UCHAR)
111113 {
112114 return IOComponentEnum::UCHAR;
113115 }
114116 if (type == H5::PredType::NATIVE_CHAR)
117+ {
118+ if constexpr (std::is_signed_v<char >)
119+ {
120+ return IOComponentEnum::CHAR;
121+ }
122+ else
123+ {
124+ return IOComponentEnum::UCHAR;
125+ }
126+ }
127+ else if (type == H5::PredType::NATIVE_SCHAR)
115128 {
116129 return IOComponentEnum::CHAR;
117130 }
@@ -166,7 +179,7 @@ ComponentToPredType(IOComponentEnum cType)
166179 case IOComponentEnum::UCHAR:
167180 return H5::PredType::NATIVE_UCHAR;
168181 case IOComponentEnum::CHAR:
169- return H5::PredType::NATIVE_CHAR ;
182+ return H5::PredType::NATIVE_SCHAR ;
170183 case IOComponentEnum::USHORT:
171184 return H5::PredType::NATIVE_USHORT;
172185 case IOComponentEnum::SHORT:
@@ -784,6 +797,10 @@ HDF5ImageIO::ReadImageInformation()
784797 {
785798 this ->StoreMetaData <char >(&metaDict, localMetaDataName, name, metaDataDims[0 ]);
786799 }
800+ else if (metaDataType == H5::PredType::NATIVE_SCHAR)
801+ {
802+ this ->StoreMetaData <signed char >(&metaDict, localMetaDataName, name, metaDataDims[0 ]);
803+ }
787804 else if (metaDataType == H5::PredType::NATIVE_UCHAR)
788805 {
789806 if (doesAttrExist (metaDataSet, " isBool" ))
0 commit comments