23 #include "openPMD/Dataset.hpp" 24 #include "openPMD/Datatype.hpp" 35 inline std::unique_ptr<void, std::function<void(void *)> >
36 allocatePtr(
Datatype dtype, uint64_t numPoints)
39 std::function<void(void *)> del = [](
void *) {};
44 data =
new char *[numPoints];
45 del = [](
void *p) {
delete[]
static_cast<char **
>(p); };
47 case DT::VEC_LONG_DOUBLE:
49 data =
new long double[numPoints];
50 del = [](
void *p) {
delete[]
static_cast<long double *
>(p); };
55 data =
new double[numPoints];
56 del = [](
void *p) {
delete[]
static_cast<double *
>(p); };
60 data =
new float[numPoints];
61 del = [](
void *p) {
delete[]
static_cast<float *
>(p); };
63 case DT::VEC_CLONG_DOUBLE:
64 case DT::CLONG_DOUBLE:
65 data =
new std::complex<long double>[numPoints];
67 delete[]
static_cast<std::complex<long double> *
>(p);
72 data =
new std::complex<double>[numPoints];
74 delete[]
static_cast<std::complex<double> *
>(p);
79 data =
new std::complex<float>[numPoints];
81 delete[]
static_cast<std::complex<float> *
>(p);
86 data =
new short[numPoints];
87 del = [](
void *p) {
delete[]
static_cast<short *
>(p); };
91 data =
new int[numPoints];
92 del = [](
void *p) {
delete[]
static_cast<int *
>(p); };
96 data =
new long[numPoints];
97 del = [](
void *p) {
delete[]
static_cast<long *
>(p); };
99 case DT::VEC_LONGLONG:
101 data =
new long long[numPoints];
102 del = [](
void *p) {
delete[]
static_cast<long long *
>(p); };
106 data =
new unsigned short[numPoints];
107 del = [](
void *p) {
delete[]
static_cast<unsigned short *
>(p); };
111 data =
new unsigned int[numPoints];
112 del = [](
void *p) {
delete[]
static_cast<unsigned int *
>(p); };
116 data =
new unsigned long[numPoints];
117 del = [](
void *p) {
delete[]
static_cast<unsigned long *
>(p); };
119 case DT::VEC_ULONGLONG:
121 data =
new unsigned long long[numPoints];
123 delete[]
static_cast<unsigned long long *
>(p);
128 data =
new char[numPoints];
129 del = [](
void *p) {
delete[]
static_cast<char *
>(p); };
133 data =
new unsigned char[numPoints];
134 del = [](
void *p) {
delete[]
static_cast<unsigned char *
>(p); };
137 data =
new bool[numPoints];
138 del = [](
void *p) {
delete[]
static_cast<bool *
>(p); };
145 throw std::runtime_error(
146 "Unknown Attribute datatype (Pointer allocation)");
149 return std::unique_ptr<void, std::function<void(void *)> >(data, del);
152 inline std::unique_ptr<void, std::function<void(void *)> >
153 allocatePtr(
Datatype dtype, Extent
const &e)
155 uint64_t numPoints = 1u;
156 for (
auto const &dimensionSize : e)
157 numPoints *= dimensionSize;
158 return allocatePtr(dtype, numPoints);
Datatype
Concrete datatype of an object available at runtime.
Definition: Datatype.hpp:45
Public definitions of openPMD-api.
Definition: Date.cpp:28