#include #include #include #include #include #define NCLUSDEF 40 static const struct clusdef_rec { unsigned char chanID; unsigned char clusID; unsigned short start; unsigned short length; } ClusDef[NCLUSDEF] = { {1, 0, 0, 5}, {1, 1, 5, 192}, {1, 2, 197, 355}, {1, 3, 552, 290}, {1, 4, 842, 177}, {1, 5, 1019, 5}, {2, 0, 1024, 5}, {2, 1, 1029, 71}, {2, 2, 1100, 778}, {2, 3, 1878, 94}, {2, 4, 1972, 71}, {2, 5, 2043, 5}, {3, 0, 2048, 10}, {3, 1, 2058, 23}, {3, 2, 2081, 897}, {3, 3, 2978, 89}, {3, 4, 3067, 5}, {4, 0, 3072, 5}, {4, 1, 3077, 5}, {4, 2, 3082, 909}, {4, 3, 3991, 100}, {4, 4, 4091, 5}, {5, 0, 4096, 5}, {5, 1, 4101, 5}, {5, 2, 4106, 991}, {5, 3, 5097, 18}, {5, 4, 5115, 5}, {6, 0, 5120, 10}, {6, 1, 5130, 14}, {6, 2, 5144, 973}, {6, 3, 6117, 17}, {6, 4, 6134, 10}, {7, 0, 6144, 10}, {7, 1, 6154, 38}, {7, 2, 6192, 940}, {7, 3, 7132,26 }, {7, 4, 7158, 10}, {8, 0, 7168, 10}, {8, 1, 7178, 1004}, {8, 2, 8182, 10} }; #define H5_NAME "test_hdf5_ll.h5" static void init_h5pt_file( void ) { register unsigned short nc, ng; hid_t fid, gid1, gid2; hid_t fapl; hid_t ptable; const int chunk_sz = 1; /* * Create a file access property list and set the 'use latest format' * flag in it. */ fapl = H5Pcreate( H5P_FILE_ACCESS ); /* (void) H5Pset_libver_bounds( fapl, */ /* H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST ); */ (void) H5Pset_libver_bounds( fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST ); fid = H5Fcreate( H5_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ); (void) H5Pclose( fapl ); for ( ng = 28; ng <= 41; ng++ ) { char grp_state[10]; (void) snprintf( grp_state, 10, "State_%02hu", ng ); gid1 = H5Gcreate( fid, grp_state, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT ); for ( nc = 1; nc <= NCLUSDEF; nc++ ) { char grp_cluster[11]; hsize_t dims; hid_t dtype_id; (void) snprintf( grp_cluster, 11, "Cluster_%02hu", nc ); gid2 = H5Gcreate( gid1, grp_cluster, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT ); dims = ClusDef[nc-1].length; dtype_id = H5Tarray_create2( H5T_NATIVE_FLOAT, 1, &dims ); ptable = H5PTcreate_fl( gid2, "read_outs", dtype_id, chunk_sz, 1 ); (void) H5PTclose( ptable ); (void) H5Tclose( dtype_id ); (void) H5Gclose( gid2 ); } (void) H5Gclose( gid1 ); } (void) H5Fclose( fid ); } static void fill_writeBuffer( unsigned short num, float *writeBuffer ) { unsigned short nr = 0; do { writeBuffer[nr] = USHRT_MAX * (random() / (RAND_MAX + 1.)); } while ( ++nr < num ); } static void write_h5pt_data( void ) { register unsigned short nc, ng; hid_t fid, gid; hid_t ptable; float writeBuffer[1024]; fid = H5Fopen( H5_NAME, H5F_ACC_RDWR, H5P_DEFAULT ); for ( ng = 28; ng <= 41; ng++ ) { for ( nc = 1; nc <= NCLUSDEF; nc++ ) { char grp_name[32]; (void) snprintf( grp_name, 32, "/State_%02hu/Cluster_%02hu", ng, nc ); gid = H5Gopen( fid, grp_name, H5P_DEFAULT ); ptable = H5PTopen( gid, "read_outs" ); /* fill_writeBuffer( ClusDef[nc-1].length, writeBuffer ); */ /* (void) H5PTappend( ptable, 1, writeBuffer ); */ (void) H5PTclose( ptable ); (void) H5Gclose( gid ); } } (void) H5Fclose( fid ); } int main (void) { int nr; init_h5pt_file(); for ( nr = 0; nr < 5000; nr++ ) { (void) printf( "adding row: %6d\n", nr ); write_h5pt_data(); } return 0; }