23 #include "openPMD/Dataset.hpp" 24 #include "openPMD/Datatype.hpp" 36 inline std::unique_ptr< void, std::function< void(void*) > >
37 allocatePtr(
Datatype dtype, uint64_t numPoints)
40 std::function< void(void*) > del = [](
void*){};
45 data =
new char*[numPoints];
46 del = [](
void* p){
delete[]
static_cast< char**
>(p); };
48 case DT::VEC_LONG_DOUBLE:
50 data =
new long double[numPoints];
51 del = [](
void* p){
delete[]
static_cast< long double*
>(p); };
56 data =
new double[numPoints];
57 del = [](
void* p){
delete[]
static_cast< double*
>(p); };
61 data =
new float[numPoints];
62 del = [](
void* p){
delete[]
static_cast< float*
>(p); };
64 case DT::VEC_CLONG_DOUBLE:
65 case DT::CLONG_DOUBLE:
66 data =
new std::complex<long double>[numPoints];
67 del = [](
void* p){
delete[]
static_cast< std::complex<long double>*
>(p); };
71 data =
new std::complex<double>[numPoints];
72 del = [](
void* p){
delete[]
static_cast< std::complex<double>*
>(p); };
76 data =
new std::complex<float>[numPoints];
77 del = [](
void* p){
delete[]
static_cast< std::complex<float>*
>(p); };
81 data =
new short[numPoints];
82 del = [](
void* p){
delete[]
static_cast< short*
>(p); };
86 data =
new int[numPoints];
87 del = [](
void* p){
delete[]
static_cast< int*
>(p); };
91 data =
new long[numPoints];
92 del = [](
void* p){
delete[]
static_cast< long*
>(p); };
94 case DT::VEC_LONGLONG:
96 data =
new long long[numPoints];
97 del = [](
void* p){
delete[]
static_cast< long long*
>(p); };
101 data =
new unsigned short[numPoints];
102 del = [](
void* p){
delete[]
static_cast< unsigned short*
>(p); };
106 data =
new unsigned int[numPoints];
107 del = [](
void* p){
delete[]
static_cast< unsigned int*
>(p); };
111 data =
new unsigned long[numPoints];
112 del = [](
void* p){
delete[]
static_cast< unsigned long*
>(p); };
114 case DT::VEC_ULONGLONG:
116 data =
new unsigned long long[numPoints];
117 del = [](
void* p){
delete[]
static_cast< unsigned long long*
>(p); };
121 data =
new char[numPoints];
122 del = [](
void* p){
delete[]
static_cast< char*
>(p); };
126 data =
new unsigned char[numPoints];
127 del = [](
void* p){
delete[]
static_cast< unsigned char*
>(p); };
130 data =
new bool[numPoints];
131 del = [](
void* p){
delete[]
static_cast< bool*
>(p); };
138 throw std::runtime_error(
"Unknown Attribute datatype (Pointer allocation)");
141 return std::unique_ptr< void, std::function< void(void*) > >(data, del);
144 inline std::unique_ptr< void, std::function< void(void*) > >
145 allocatePtr(
Datatype dtype, Extent
const& e)
147 uint64_t numPoints = 1u;
148 for(
auto const& dimensionSize : e )
149 numPoints *= dimensionSize;
150 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:29