2012-06-24 19 views
6

Zastanawiam się, czy istnieje narzędzie umożliwiające wygenerowanie C HDF5 odczytu i zapisu kodu ze struktury danych C.Generowanie kodu HDF5 C

Chciałbym, aby to narzędzie przetworzyło plik nagłówkowy C i wygenerowało odpowiedni kod odczytu/zapisu C HDF5.

Można rozróżnić przypadek alokacji statycznej i alokacji dynamicznej. Po raz pierwszy interesowałoby mnie tylko przydzielanie statyczne.

Na przykład, chciałbym wygenerować następujący kod z definicji struktury sensor_t, która zawiera jeden int i dwa podwójne. Wyświetlany kod jest bezpośrednią konwersją struktury C typedef do struktury 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); 

Szukałem na stronie hdf bez powodzenia

http://www.hdfgroup.org

Wiem, że niektórzy próbowali za HDF4 ze skryptu Perl

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

Odpowiedz

2

interesujące. W kraju NetCDF jest "ncgen". NetCDF-4 wprowadził pojęcie typów złożonych. NetCDF4 może również wykorzystywać format pliku HDF5 jako podstawowy format kontenera.

Tak, to nie weźmie plik C nagłówka, ale do 'markup CDL' jest całkiem prosta:

netcdf demo { 
types: 
    compound mything { 
    int id ; 
    double d1 ; 
    double d2 ; 
    }; // mything 
dimensions: 
     d1 = 1 ; 
variables: 
     mything v1(d1) ; 

// global attributes: 

Następnie można dokonać kod netcdf C z, że:

ncgen -c mine.cdl 

To nie jest dokładnie to, co chcesz. To naprawdę nie jest to, czego chcesz, ale prawdopodobnie jest to najbardziej zbliżone do ciebie teraz.