HDF5C代码生成
我想知道是否有一种工具能够从C数据结构生成C HDF5读写代码HDF5C代码生成,c,api,code-generation,hdf5,C,Api,Code Generation,Hdf5,我想知道是否有一种工具能够从C数据结构生成C HDF5读写代码 typedef struct { int serial_no; double temperature; double pressure; } sensor_t; #include "hdf5.h" hid_t memtype; herr_t status; memtype = H5Tcreate (H5T_COMPOUND, sizeof (sensor_t)); status = H
typedef struct {
int serial_no;
double temperature;
double pressure;
} sensor_t;
#include "hdf5.h"
hid_t memtype;
herr_t status;
memtype = H5Tcreate (H5T_COMPOUND, sizeof (sensor_t));
status = H5Tinsert (memtype, "serial_no", HOFFSET (sensor_t, serial_no), H5T_NATIVE_INT);
status = H5Tinsert (memtype, "temperature", HOFFSET (sensor_t, temperature), H5T_NATIVE_DOUBLE);
status = H5Tinsert (memtype, "pressure", HOFFSET (sensor_t, pressure), H5T_NATIVE_DOUBLE);
sensor_t wdata[1];
status = H5Dread (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
status = H5Dwrite (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
我希望该工具能够解析C头文件并生成相应的C HDF5读/写代码
可以区分静态分配和动态分配。
第一次,我只对静态分配感兴趣
例如,我想根据结构传感器的定义生成以下代码,它包含一个int和两个double。显示的代码是typedef C结构到C HDF5结构的直接转换
typedef struct {
int serial_no;
double temperature;
double pressure;
} sensor_t;
#include "hdf5.h"
hid_t memtype;
herr_t status;
memtype = H5Tcreate (H5T_COMPOUND, sizeof (sensor_t));
status = H5Tinsert (memtype, "serial_no", HOFFSET (sensor_t, serial_no), H5T_NATIVE_INT);
status = H5Tinsert (memtype, "temperature", HOFFSET (sensor_t, temperature), H5T_NATIVE_DOUBLE);
status = H5Tinsert (memtype, "pressure", HOFFSET (sensor_t, pressure), H5T_NATIVE_DOUBLE);
sensor_t wdata[1];
status = H5Dread (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
status = H5Dwrite (dset, memtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
我在hdf网站上看了没有成功
我知道有些人尝试过使用Perl脚本实现HDF4
有意思。在NetCDF的土地上有。NetCDF-4引入了复合类型的概念。NetCDF4还可以使用HDF5文件格式作为底层容器格式 因此,不需要C头文件,但“CDL”标记非常简单:
netcdf demo {
types:
compound mything {
int id ;
double d1 ;
double d2 ;
}; // mything
dimensions:
d1 = 1 ;
variables:
mything v1(d1) ;
// global attributes:
然后,您可以从中生成netcdf C代码:
ncgen -c mine.cdl
这不是你想要的。这根本不是你想要的,但它可能是你现在能得到的最接近的