HDF5 C代码生成

6
我想知道是否有一种工具能够从C数据结构中生成C HDF5读写代码。
我希望该工具能够解析C头文件并生成相应的C HDF5读写代码。可以将静态分配和动态分配进行区分。最初,我只对静态分配感兴趣。
例如,我希望从结构体sensor_t的定义中生成以下代码,其中包含一个int和两个double。所显示的代码是将typedef C struct直接转换为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网站上搜索了但没有成功。

http://www.hdfgroup.org

我知道一些人尝试使用Perl脚本来处理HDF4

http://www.srl.caltech.edu/ACE/ASC/exhdfgen/index.htm

1个回答

2
有趣的。在NetCDF领域中,有一个叫做"ncgen"的工具。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

这不完全是你想要的。实际上,这根本不是你想要的,但现在可能是你能得到的最接近的了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接