2012-06-24 15 views
6

Me preguntaba si había una herramienta capaz de producir código de lectura y escritura C HDF5 a partir de la estructura de datos C.HDF5 C Generación de código

Me gustaría que esa herramienta analice un archivo de encabezado C y genere el código de lectura/escritura C HDF5 correspondiente.

Se puede distinguir el caso de la asignación estática y la asignación dinámica. En una primera oportunidad, solo me interesaría la asignación estática.

Por ejemplo, me gustaría generar el siguiente código a partir de la definición de la estructura sensor_t, que contiene un int y dos dobles. El código que se muestra es la conversión directa de una estructura tipodef C a una estructura 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); 

He mirado en la página web HDF sin éxito

http://www.hdfgroup.org

Sé que algunos han tratado de HDF4 con un script en Perl

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

Respuesta

2

interesante. En el terreno de NetCDF hay "ncgen". NetCDF-4 introdujo la idea de tipos compuestos. NetCDF4 también puede usar el formato de archivo HDF5 como formato de contenedor subyacente.

Por lo tanto, no va a tomar un archivo de cabecera C, pero el margen de beneficio 'CDL' es bastante simple:

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

// global attributes: 

A continuación, puede hacer que el código C netcdf de que:

ncgen -c mine.cdl 

No es exactamente lo que quieres. No es realmente lo que quieres en absoluto, pero es probable que sea lo más cercano que puedas obtener en este momento.