2012-06-24 2 views
6

Мне было интересно, если бы был инструмент, способный считывать и записывать код C HDF5 из структуры данных C.HDF5 C Генерация кода

Я хотел бы, чтобы этот инструмент проанализировал файл заголовка C и сгенерировал соответствующий код чтения/записи C HDF5.

Можно выделить случай статического распределения и динамического распределения. В первый раз меня интересовало бы статическое распределение.

Например, я хотел бы сгенерировать следующий код из определения структуры sensor_t, который содержит один int и два удвоения. Отображаемый код представляет собой прямое преобразование структуры 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 

Это не совсем то, что вы хотите. На самом деле это совсем не то, чего вы хотите, но это, вероятно, самое близкое, что вы можете получить прямо сейчас.

Смежные вопросы