2012-06-24 156 views
6

我想知道是否有一種工具能夠從C數據結構中生成C HDF5讀寫代碼。HDF5 C代碼生成

我想這個工具來解析一個C頭文件並生成相應的C HDF5讀/寫代碼。

可以區分靜態分配和動態分配的情況。 第一次,我只會對靜態分配感興趣。

例如,我想從結構sensor_t的定義中生成下面的代碼,它包含一個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網站上沒有成功

http://www.hdfgroup.org

我知道有些曾嘗試與HDF4 Perl腳本

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

回答

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 

這不完全是你想要的。這實際上並不是你想要的,但它可能是你現在最接近的。