23 #include "openPMD/auxiliary/StringManip.hpp" 24 #include "openPMD/backend/Attribute.hpp" 25 #include "openPMD/backend/Writable.hpp" 26 #include "openPMD/IO/HDF5/HDF5FilePosition.hpp" 36 getH5DataType(Attribute
const& att)
43 return H5Tcopy(H5T_NATIVE_CHAR);
46 return H5Tcopy(H5T_NATIVE_UCHAR);
49 return H5Tcopy(H5T_NATIVE_SHORT);
52 return H5Tcopy(H5T_NATIVE_INT);
55 return H5Tcopy(H5T_NATIVE_LONG);
57 case DT::VEC_LONGLONG:
58 return H5Tcopy(H5T_NATIVE_LLONG);
61 return H5Tcopy(H5T_NATIVE_USHORT);
64 return H5Tcopy(H5T_NATIVE_UINT);
67 return H5Tcopy(H5T_NATIVE_ULONG);
69 case DT::VEC_ULONGLONG:
70 return H5Tcopy(H5T_NATIVE_ULLONG);
73 return H5Tcopy(H5T_NATIVE_FLOAT);
77 return H5Tcopy(H5T_NATIVE_DOUBLE);
79 case DT::VEC_LONG_DOUBLE:
80 return H5Tcopy(H5T_NATIVE_LDOUBLE);
83 hid_t string_t_id = H5Tcopy(H5T_C_S1);
84 H5Tset_size(string_t_id, att.get< std::string >().size());
89 hid_t string_t_id = H5Tcopy(H5T_C_S1);
91 for( std::string
const& s : att.get< std::vector< std::string > >() )
92 max_len = std::max(max_len, s.size());
93 H5Tset_size(string_t_id, max_len);
97 return H5Tcopy(H5T_NATIVE_HBOOL);
99 throw std::runtime_error(
"Meta-Datatype leaked into IO");
101 throw std::runtime_error(
"Unknown Attribute datatype (HDF5 datatype)");
103 throw std::runtime_error(
"Datatype not implemented in HDF5 IO");
108 getH5DataSpace(Attribute
const& att)
125 case DT::LONG_DOUBLE:
128 return H5Screate(H5S_SCALAR);
131 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
132 hsize_t dims[1] = {att.get< std::vector< char > >().size()};
133 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
138 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
139 hsize_t dims[1] = {att.get< std::vector< short > >().size()};
140 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
145 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
146 hsize_t dims[1] = {att.get< std::vector< int > >().size()};
147 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
152 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
153 hsize_t dims[1] = {att.get< std::vector< long > >().size()};
154 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
157 case DT::VEC_LONGLONG:
159 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
160 hsize_t dims[1] = {att.get< std::vector< long long > >().size()};
161 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
166 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
167 hsize_t dims[1] = {att.get< std::vector< unsigned char > >().size()};
168 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
173 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
174 hsize_t dims[1] = {att.get< std::vector< unsigned short > >().size()};
175 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
180 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
181 hsize_t dims[1] = {att.get< std::vector< unsigned int > >().size()};
182 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
187 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
188 hsize_t dims[1] = {att.get< std::vector< unsigned long > >().size()};
189 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
192 case DT::VEC_ULONGLONG:
194 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
195 hsize_t dims[1] = {att.get< std::vector< unsigned long long > >().size()};
196 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
201 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
202 hsize_t dims[1] = {att.get< std::vector< float > >().size()};
203 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
208 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
209 hsize_t dims[1] = {att.get< std::vector< double > >().size()};
210 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
213 case DT::VEC_LONG_DOUBLE:
215 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
216 hsize_t dims[1] = {att.get< std::vector< long double > >().size()};
217 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
222 hid_t vec_t_id = H5Screate(H5S_SIMPLE);
223 hsize_t dims[1] = {att.get< std::vector< std::string > >().size()};
224 H5Sset_extent_simple(vec_t_id, 1, dims,
nullptr);
229 hid_t array_t_id = H5Screate(H5S_SIMPLE);
230 hsize_t dims[1] = {7};
231 H5Sset_extent_simple(array_t_id, 1, dims,
nullptr);
235 throw std::runtime_error(
"Unknown Attribute datatype (HDF5 dataspace)");
237 throw std::runtime_error(
"Datatype not implemented in HDF5 IO");
242 concrete_h5_file_position(Writable* w)
244 std::stack< Writable* > hierarchy;
245 if( !w->abstractFilePosition )
254 while( !hierarchy.empty() )
256 pos += std::dynamic_pointer_cast< HDF5FilePosition >(hierarchy.top()->abstractFilePosition)->location;
260 return auxiliary::replace_all(pos,
"//",
"/");
Datatype
Concrete datatype of an object available at runtime.
Definition: Datatype.hpp:38
Public definitions of openPMD-api.
Definition: Date.cpp:28