24
24
#include " itkMakeUniqueForOverwrite.h"
25
25
26
26
#include < algorithm>
27
+ #include < type_traits> // For is_signed_v.
27
28
28
29
namespace itk
29
30
{
@@ -83,19 +84,20 @@ GetType()
83
84
}
84
85
85
86
GetH5TypeSpecialize (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)
86
89
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)
88
92
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 )
91
95
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)
93
98
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)
99
101
100
102
/* The following types are not implemented. This comment serves
101
103
* to indicate that the full complement of possible H5::PredType
@@ -105,13 +107,24 @@ GetH5TypeSpecialize(float, H5::PredType::NATIVE_FLOAT) GetH5TypeSpecialize(doubl
105
107
106
108
#undef GetH5TypeSpecialize
107
109
108
- inline IOComponentEnum PredTypeToComponentType (H5::DataType & type)
110
+ inline IOComponentEnum PredTypeToComponentType (H5::DataType & type)
109
111
{
110
112
if (type == H5::PredType::NATIVE_UCHAR)
111
113
{
112
114
return IOComponentEnum::UCHAR;
113
115
}
114
116
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)
115
128
{
116
129
return IOComponentEnum::CHAR;
117
130
}
@@ -166,7 +179,7 @@ ComponentToPredType(IOComponentEnum cType)
166
179
case IOComponentEnum::UCHAR:
167
180
return H5::PredType::NATIVE_UCHAR;
168
181
case IOComponentEnum::CHAR:
169
- return H5::PredType::NATIVE_CHAR ;
182
+ return H5::PredType::NATIVE_SCHAR ;
170
183
case IOComponentEnum::USHORT:
171
184
return H5::PredType::NATIVE_USHORT;
172
185
case IOComponentEnum::SHORT:
@@ -784,6 +797,10 @@ HDF5ImageIO::ReadImageInformation()
784
797
{
785
798
this ->StoreMetaData <char >(&metaDict, localMetaDataName, name, metaDataDims[0 ]);
786
799
}
800
+ else if (metaDataType == H5::PredType::NATIVE_SCHAR)
801
+ {
802
+ this ->StoreMetaData <signed char >(&metaDict, localMetaDataName, name, metaDataDims[0 ]);
803
+ }
787
804
else if (metaDataType == H5::PredType::NATIVE_UCHAR)
788
805
{
789
806
if (doesAttrExist (metaDataSet, " isBool" ))
0 commit comments