Skip to content

Commit b673b7f

Browse files
committed
Add determineDatatypeContiguous, rename determineDatatypeRaw
1 parent 74b0e13 commit b673b7f

File tree

3 files changed

+20
-147
lines changed

3 files changed

+20
-147
lines changed

examples/3_write_serial.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ int main(int argc, char *argv[])
4949
cout << "Created a scalar mesh Record with all required openPMD "
5050
"attributes\n";
5151

52-
Datatype datatype = determineDatatype(global_data.data());
52+
Datatype datatype = determineDatatypeContiguous(global_data);
5353
Extent extent = {size, size};
5454
Dataset dataset = Dataset(datatype, extent);
5555
cout << "Created a Dataset of size " << dataset.extent[0] << 'x'

examples/3b_write_resizable_particles.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ int main()
3939
std::vector<double> y{-2., -3., -4., -5., -6.};
4040

4141
// both x and y the same type, otherwise we use two distinct datasets
42-
Datatype dtype = determineDatatype(x.data());
42+
Datatype dtype = determineDatatypeContiguous(x);
4343
Extent size = {x.size()};
4444
auto dataset = Dataset(dtype, size, "{ \"resizable\": true }");
4545

include/openPMD/Datatype.hpp

Lines changed: 18 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
*/
2121
#pragma once
2222

23+
#include "openPMD/auxiliary/TypeTraits.hpp"
24+
2325
#include <array>
2426
#include <climits>
2527
#include <complex>
@@ -265,161 +267,32 @@ inline constexpr Datatype determineDatatype()
265267
}
266268

267269
template <typename T>
268-
inline constexpr Datatype determineDatatype(T const *)
270+
inline constexpr Datatype determineDatatype(std::shared_ptr<T>)
269271
{
270272
return determineDatatype<T>();
271273
}
272274

273275
template <typename T>
274-
inline constexpr Datatype determineDatatype(std::shared_ptr<T>)
276+
inline constexpr Datatype determineDatatypeRaw(T const *)
275277
{
276-
using DT = Datatype;
277-
if (decay_equiv<T, char>::value)
278-
{
279-
return DT::CHAR;
280-
}
281-
else if (decay_equiv<T, unsigned char>::value)
282-
{
283-
return DT::UCHAR;
284-
}
285-
else if (decay_equiv<T, short>::value)
286-
{
287-
return DT::SHORT;
288-
}
289-
else if (decay_equiv<T, int>::value)
290-
{
291-
return DT::INT;
292-
}
293-
else if (decay_equiv<T, long>::value)
294-
{
295-
return DT::LONG;
296-
}
297-
else if (decay_equiv<T, long long>::value)
298-
{
299-
return DT::LONGLONG;
300-
}
301-
else if (decay_equiv<T, unsigned short>::value)
302-
{
303-
return DT::USHORT;
304-
}
305-
else if (decay_equiv<T, unsigned int>::value)
306-
{
307-
return DT::UINT;
308-
}
309-
else if (decay_equiv<T, unsigned long>::value)
310-
{
311-
return DT::ULONG;
312-
}
313-
else if (decay_equiv<T, unsigned long long>::value)
314-
{
315-
return DT::ULONGLONG;
316-
}
317-
else if (decay_equiv<T, float>::value)
318-
{
319-
return DT::FLOAT;
320-
}
321-
else if (decay_equiv<T, double>::value)
322-
{
323-
return DT::DOUBLE;
324-
}
325-
else if (decay_equiv<T, long double>::value)
326-
{
327-
return DT::LONG_DOUBLE;
328-
}
329-
else if (decay_equiv<T, std::complex<float>>::value)
330-
{
331-
return DT::CFLOAT;
332-
}
333-
else if (decay_equiv<T, std::complex<double>>::value)
334-
{
335-
return DT::CDOUBLE;
336-
}
337-
else if (decay_equiv<T, std::complex<long double>>::value)
338-
{
339-
return DT::CLONG_DOUBLE;
340-
}
341-
else if (decay_equiv<T, std::string>::value)
342-
{
343-
return DT::STRING;
344-
}
345-
else if (decay_equiv<T, std::vector<char>>::value)
346-
{
347-
return DT::VEC_CHAR;
348-
}
349-
else if (decay_equiv<T, std::vector<short>>::value)
350-
{
351-
return DT::VEC_SHORT;
352-
}
353-
else if (decay_equiv<T, std::vector<int>>::value)
354-
{
355-
return DT::VEC_INT;
356-
}
357-
else if (decay_equiv<T, std::vector<long>>::value)
358-
{
359-
return DT::VEC_LONG;
360-
}
361-
else if (decay_equiv<T, std::vector<long long>>::value)
362-
{
363-
return DT::VEC_LONGLONG;
364-
}
365-
else if (decay_equiv<T, std::vector<unsigned char>>::value)
366-
{
367-
return DT::VEC_UCHAR;
368-
}
369-
else if (decay_equiv<T, std::vector<unsigned short>>::value)
370-
{
371-
return DT::VEC_USHORT;
372-
}
373-
else if (decay_equiv<T, std::vector<unsigned int>>::value)
374-
{
375-
return DT::VEC_UINT;
376-
}
377-
else if (decay_equiv<T, std::vector<unsigned long>>::value)
378-
{
379-
return DT::VEC_ULONG;
380-
}
381-
else if (decay_equiv<T, std::vector<unsigned long long>>::value)
382-
{
383-
return DT::VEC_ULONGLONG;
384-
}
385-
else if (decay_equiv<T, std::vector<float>>::value)
386-
{
387-
return DT::VEC_FLOAT;
388-
}
389-
else if (decay_equiv<T, std::vector<double>>::value)
390-
{
391-
return DT::VEC_DOUBLE;
392-
}
393-
else if (decay_equiv<T, std::vector<long double>>::value)
394-
{
395-
return DT::VEC_LONG_DOUBLE;
396-
}
397-
else if (decay_equiv<T, std::vector<std::complex<float>>>::value)
398-
{
399-
return DT::VEC_CFLOAT;
400-
}
401-
else if (decay_equiv<T, std::vector<std::complex<double>>>::value)
402-
{
403-
return DT::VEC_CDOUBLE;
404-
}
405-
else if (decay_equiv<T, std::vector<std::complex<long double>>>::value)
406-
{
407-
return DT::VEC_CLONG_DOUBLE;
408-
}
409-
else if (decay_equiv<T, std::vector<std::string>>::value)
410-
{
411-
return DT::VEC_STRING;
412-
}
413-
else if (decay_equiv<T, std::array<double, 7>>::value)
278+
return determineDatatype<T>();
279+
}
280+
281+
template <typename T_ContiguousContainer>
282+
inline constexpr Datatype determineDatatypeContiguous(T_ContiguousContainer &&)
283+
{
284+
using T_ContiguousContainer_stripped =
285+
std::remove_reference_t<T_ContiguousContainer>;
286+
if constexpr (auxiliary::IsContiguousContainer_v<
287+
T_ContiguousContainer_stripped>)
414288
{
415-
return DT::ARR_DBL_7;
289+
return determineDatatype<
290+
typename T_ContiguousContainer_stripped::value_type>();
416291
}
417-
else if (decay_equiv<T, bool>::value)
292+
else
418293
{
419-
return DT::BOOL;
294+
return Datatype::UNDEFINED;
420295
}
421-
else
422-
return DT::UNDEFINED;
423296
}
424297

425298
/** Return number of bytes representing a Datatype

0 commit comments

Comments
 (0)