2012-06-24 28 views
6

C veri yapısından C HDF5 okuma ve yazma kodu üretebilen bir araç olup olmadığını merak ediyordum.HDF5 C Kod üretimi

Bu aracın bir C başlık dosyasını ayrıştırmasını ve ilgili C HDF5 okuma/yazma kodunu oluşturmasını istiyorum.

Statik ayırma ve dinamik ayırma durumunu ayırt edebilir. İlk defa, sadece statik ayırma ile ilgilenirdim. Örneğin, bir int ve iki çiftli içeren, sensor_t yapısının tanımından aşağıdaki kodu oluşturmak istiyorum. Görüntülenen kod bir typedef C yapısının bir C HDF5 yapısına doğrudan dönüşümüdür.

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); 

Sanırım bazı

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

cevap

2

İlginç bir Perl script ile HDF4 için çalıştık biliyorum başarı

http://www.hdfgroup.org

olmadan HDF web sitesinde baktım. NetCDF arazisinde "ncgen" var. NetCDF-4, bileşik tiplerini ortaya koydu. NetCDF4 ayrıca HDF5 dosya formatını alttaki konteyner formatı olarak kullanabilir.

Yani, bir C başlık dosyasını almayacağız ama 'KTL' biçimlendirme oldukça basittir:

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

// global attributes: 

O halde dışarı netcdf C kodu yapabilirsiniz:

ncgen -c mine.cdl 

Tam olarak ne istediğinizi değil. İstediğin şey tam olarak değil, ama şu an alabileceğin en yakın ihtimalle.