diff options
author | Allen Byrne <byrn@hdfgroup.org> | 2009-04-28 20:26:13 (GMT) |
---|---|---|
committer | Allen Byrne <byrn@hdfgroup.org> | 2009-04-28 20:26:13 (GMT) |
commit | 8567e1e2b7fdff54a6bcc84e58a94866d4d5d2b1 (patch) | |
tree | a113b27c04280742b283841e52c3f37ce82a5620 | |
parent | 665f528813749ce6b1ce9afdf104262a65a4a2cd (diff) | |
download | hdf5-8567e1e2b7fdff54a6bcc84e58a94866d4d5d2b1.zip hdf5-8567e1e2b7fdff54a6bcc84e58a94866d4d5d2b1.tar.gz hdf5-8567e1e2b7fdff54a6bcc84e58a94866d4d5d2b1.tar.bz2 |
[svn-r16876] Improved the h5dump output format for region reference data. The region data index values are incorrect and there is an output order dependent line break problem.
-rw-r--r-- | tools/h5dump/h5dump.c | 27 | ||||
-rw-r--r-- | tools/lib/h5tools.c | 306 | ||||
-rw-r--r-- | tools/testfiles/tdataregR.ddl | 41 |
3 files changed, 193 insertions, 181 deletions
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c index 6868332..bb0962d 100644 --- a/tools/h5dump/h5dump.c +++ b/tools/h5dump/h5dump.c @@ -1189,6 +1189,14 @@ print_datatype(hid_t type,unsigned in_group) case H5T_REFERENCE: printf("H5T_REFERENCE"); + if(display_region) { + if (H5Tequal(type, H5T_STD_REF_DSETREG)==TRUE) { + printf(" { H5T_STD_REF_DSETREG }"); + } + else { + printf(" { H5T_STD_REF_OBJECT }"); + } + } break; case H5T_ENUM: @@ -2392,7 +2400,24 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int display_index) if (H5Tequal(f_type, H5T_STD_REF_DSETREG)) { - outputformat->pindex = 0; + if (display_region) { + if (display_index) { + outputformat->pindex = 1; + outputformat->idx_fmt = "(%s): "; + outputformat->idx_n_fmt = HSIZE_T_FORMAT; + outputformat->idx_sep = ","; + outputformat->line_pre = "%s"; + } + else { + outputformat->pindex = 0; + outputformat->idx_fmt = ""; + outputformat->idx_n_fmt = ""; + outputformat->idx_sep = ""; + outputformat->line_pre = ""; + } + } + else + outputformat->pindex = 0; } H5Tclose(f_type); } diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c index f28d9c5..5c843cc 100644 --- a/tools/lib/h5tools.c +++ b/tools/lib/h5tools.c @@ -41,7 +41,8 @@ int bin_output; /* binary output */ int bin_form; /* binary form */ int region_output; /* region output */ -static h5tool_format_t h5tools_dataformat = { 0, /*raw */ +static h5tool_format_t h5tools_dataformat = { +0, /*raw */ "", /*fmt_raw */ "%d", /*fmt_int */ @@ -109,7 +110,8 @@ NULL, /*fmt_ullong */ 1 /*escape non printable characters */ }; -static const h5tools_dump_header_t h5tools_standardformat = { "standardformat", /*name */ +static const h5tools_dump_header_t h5tools_standardformat = { +"standardformat", /*name */ "HDF5", /*fileebgin */ "", /*fileend */ SUPER_BLOCK, /*bootblockbegin */ @@ -202,7 +204,7 @@ hsize_t h5tools_context_t *ctx/*in,out*/, h5tools_str_t *buffer/*string into which to render */, hsize_t curr_pos/*total data element position*/, - unsigned flags, size_t ncols, hsize_t elmt_counter, + unsigned flags, size_t ncols, hsize_t *elmt_counter, hsize_t i_count/*element counter*/); hsize_t h5tools_dump_region_data_points(hid_t region_space, hid_t region_id, @@ -210,7 +212,7 @@ hsize_t h5tools_context_t *ctx/*in,out*/, h5tools_str_t *buffer/*string into which to render */, hsize_t curr_pos/*total data element position*/, - unsigned flags, size_t ncols, hsize_t elmt_counter, + unsigned flags, size_t ncols, hsize_t *elmt_counter, hsize_t i_count/*element counter*/); hsize_t h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id, @@ -218,7 +220,7 @@ hsize_t h5tools_context_t *ctx/*in,out*/, h5tools_str_t *buffer/*string into which to render */, hsize_t curr_pos/*total data element position*/, - unsigned flags, size_t ncols, hsize_t elmt_counter, + unsigned flags, size_t ncols, hsize_t *elmt_counter, hsize_t i_count/*element counter*/); /* module-scoped variables */ @@ -719,7 +721,6 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t region_id; size_t ncols = 80; /*available output width */ h5tools_str_t buffer; /*string into which to render */ - int multiline; /*datum was multiline */ hsize_t curr_pos; /* total data element position */ hsize_t elmt_counter = 0;/*counts the # elements printed. *I (ptl?) needed something that @@ -775,18 +776,18 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, curr_pos = h5tools_render_element(stream, info, ctx, &buffer, curr_pos, flags, ncols, - elmt_counter, i); + &elmt_counter, i); /* Print block information */ curr_pos = h5tools_dump_region_data_blocks( region_space, region_id, stream, info, ctx, &buffer, curr_pos, flags, ncols, - elmt_counter, i); + &elmt_counter, i); /* Print point information */ curr_pos = h5tools_dump_region_data_points( region_space, region_id, stream, info, ctx, &buffer, curr_pos, flags, ncols, - elmt_counter, i); + &elmt_counter, i); } H5Sclose(region_space); @@ -804,133 +805,10 @@ h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, if (i + 1 < nelmts || (flags & END_OF_DATA) == 0) h5tools_str_append(&buffer, "%s", OPT(info->elmt_suf1, ",")); -// curr_pos = h5tools_render_element(stream, info, ctx, &buffer, -// curr_pos, flags, ncols, elmt_counter, i); -// -// /* -// * We need to break after each row of a dimension---> we should -// * break at the end of the each last dimension well that is the -// * way the dumper did it before -// */ -// if (info->arr_linebreak && ctx->cur_elmt) { -// if (elmt_counter == ctx->size_last_dim) { -// elmt_counter = 0; -// } -// } -// - - s = h5tools_str_fmt(&buffer, 0, "%s"); - - /* - * If the element would split on multiple lines if printed at our - * current location... - */ - if (info->line_multi_new == 1 && - (ctx->cur_column + h5tools_ncols(s) + - strlen(OPT(info->elmt_suf2, " ")) + - strlen(OPT(info->line_suf, ""))) > ncols) { - if (ctx->prev_multiline) { - /* - * ... and the previous element also occupied more than one - * line, then start this element at the beginning of a line. - */ - ctx->need_prefix = TRUE; - } else if ((ctx->prev_prefix_len + h5tools_ncols(s) + - strlen(OPT(info->elmt_suf2, " ")) + - strlen(OPT(info->line_suf, ""))) <= ncols) { - /* - * ...but *could* fit on one line otherwise, then we - * should end the current line and start this element on its - * own line. - */ - ctx->need_prefix = TRUE; - } - } - - /* - * We need to break after each row of a dimension---> we should - * break at the end of the each last dimension well that is the - * way the dumper did it before - */ - if (info->arr_linebreak && ctx->cur_elmt) { - if (ctx->size_last_dim && (ctx->cur_elmt % ctx->size_last_dim) == 0) - ctx->need_prefix = TRUE; - - if ((hsize_t)elmt_counter == ctx->size_last_dim) { - ctx->need_prefix = TRUE; - elmt_counter = 0; - } - } - - /* - * If the previous element occupied multiple lines and this element - * is too long to fit on a line then start this element at the - * beginning of the line. - */ - if (info->line_multi_new == 1 && ctx->prev_multiline && - (ctx->cur_column + h5tools_ncols(s) + - strlen(OPT(info->elmt_suf2, " ")) + - strlen(OPT(info->line_suf, ""))) > ncols) - ctx->need_prefix = TRUE; - - /* - * If too many elements have already been printed then we need to - * start a new line. - */ - if (info->line_per_line > 0 && ctx->cur_elmt >= info->line_per_line) - ctx->need_prefix = TRUE; - - /* - * Each OPTIONAL_LINE_BREAK embedded in the rendered string can cause - * the data to split across multiple lines. We display the sections - * one-at a time. - */ - for (secnum = 0, multiline = 0; - (section = strtok(secnum ? NULL : s, OPTIONAL_LINE_BREAK)); - secnum++) { - /* - * If the current section plus possible suffix and end-of-line - * information would cause the output to wrap then we need to - * start a new line. - */ - - /* - * Added the info->skip_first because the dumper does not want - * this check to happen for the first line - */ - if ((!info->skip_first || i) && - (ctx->cur_column + strlen(section) + - strlen(OPT(info->elmt_suf2, " ")) + - strlen(OPT(info->line_suf, ""))) > ncols) - ctx->need_prefix = 1; - - /* - * Print the prefix or separate the beginning of this element - * from the previous element. - */ - if (ctx->need_prefix) { - if (secnum) - multiline++; - - /* pass to the prefix in h5tools_simple_prefix the total - * position instead of the current stripmine position i; - * this is necessary to print the array indices - */ - curr_pos = ctx->sm_pos + i; - - h5tools_simple_prefix(stream, info, ctx, curr_pos, secnum); - } else if ((i || ctx->continuation) && secnum == 0) { - fputs(OPT(info->elmt_suf2, " "), stream); - ctx->cur_column += strlen(OPT(info->elmt_suf2, " ")); - } + curr_pos = h5tools_render_element(stream, info, ctx, &buffer, + curr_pos, flags, ncols, &elmt_counter, i); - /* Print the section */ - fputs(section, stream); - ctx->cur_column += strlen(section); - } } - - ctx->prev_multiline = multiline; } h5tools_str_close(&buffer); @@ -941,7 +819,7 @@ hsize_t h5tools_render_element(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/, h5tools_str_t *buffer/*string into which to render */, hsize_t curr_pos/*total data element position*/, unsigned flags, - size_t ncols, hsize_t elmt_counter, hsize_t i_count/*element counter*/) { + size_t ncols, hsize_t *elmt_counter, hsize_t i_count/*element counter*/) { char *s; char *section; /*a section of output */ int secnum; /*section sequence number */ @@ -985,8 +863,9 @@ hsize_t h5tools_render_element(FILE *stream, const h5tool_format_t *info, if (ctx->size_last_dim && (ctx->cur_elmt % ctx->size_last_dim) == 0) ctx->need_prefix = TRUE; - if (elmt_counter == ctx->size_last_dim) { + if (*elmt_counter == ctx->size_last_dim) { ctx->need_prefix = TRUE; + *elmt_counter = 0; } } @@ -1015,6 +894,7 @@ hsize_t h5tools_render_element(FILE *stream, const h5tool_format_t *info, * the data to split across multiple lines. We display the sections * one-at a time. */ + multiline = 0; for (secnum = 0, multiline = 0; (section = strtok(secnum ? NULL : s, OPTIONAL_LINE_BREAK)); secnum++) { /* @@ -1059,6 +939,8 @@ hsize_t h5tools_render_element(FILE *stream, const h5tool_format_t *info, fputs(section, stream); ctx->cur_column += strlen(section); } + + ctx->prev_multiline = multiline; return curr_pos; } @@ -1067,7 +949,7 @@ hsize_t h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id, h5tools_context_t *ctx/*in,out*/, h5tools_str_t *buffer/*string into which to render */, hsize_t curr_pos/*total data element position*/, unsigned flags, - size_t ncols, hsize_t elmt_counter, hsize_t i_count/*element counter*/) { + size_t ncols, hsize_t *elmt_counter, hsize_t i_count/*element counter*/) { hsize_t alloc_size; hsize_t *ptdata; hsize_t *dims1; @@ -1076,6 +958,13 @@ hsize_t h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id, hssize_t nblocks; size_t numelem; int ndims; + int ctx_ndims; + h5tools_context_t region_ctx; /* print context */ + hsize_t region_total_size[H5S_MAX_RANK]; + hsize_t region_elmtno; /* elemnt index */ + hsize_t region_low[H5S_MAX_RANK]; /* low bound of hyperslab */ + hsize_t region_high[H5S_MAX_RANK]; /* higher bound of hyperslab */ + unsigned int region_flags; /* buffer extent flags */ int jndx; int i; int type_size; @@ -1209,15 +1098,25 @@ hsize_t h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id, start = (hsize_t *) malloc(sizeof(hsize_t) * ndims); count = (hsize_t *) malloc(sizeof(hsize_t) * ndims); - for (blkndx = 0; blkndx < nblocks; blkndx++) { - if (blkndx > 0) - ctx->need_prefix = TRUE; + region_elmtno = 0; + for (blkndx = 0; blkndx < nblocks; blkndx++, region_elmtno++) { + + memset(®ion_ctx, 0, sizeof(region_ctx)); + region_ctx.indent_level = ctx->indent_level; + region_ctx.ndims = ndims; + region_ctx.need_prefix = TRUE; + region_ctx.cur_column = ctx->cur_column; + region_ctx.cur_elmt = ctx->cur_elmt; + region_ctx.prev_multiline = ctx->prev_multiline; + region_ctx.prev_prefix_len = ctx->prev_prefix_len; + region_ctx.continuation = ctx->continuation; + region_ctx.default_indent_level = ctx->default_indent_level; for (jndx = 0; jndx < ndims; jndx++) { start[jndx] = ptdata[jndx + blkndx * ndims * 2]; count[jndx] = dims1[jndx]; } - status = H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL,count, + status = H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL); status = H5Dread(region_id, type_id, mem_space, sid1, H5P_DEFAULT, @@ -1226,19 +1125,50 @@ hsize_t h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id, /* Render the element */ h5tools_str_reset(buffer); - ctx->indent_level++; + region_ctx.indent_level++; + H5Sget_simple_extent_dims(mem_space, region_total_size, NULL); + region_ctx.size_last_dim = region_total_size[region_ctx.ndims - 1]; + /* assume entire data space to be printed */ + for (jndx = 0; jndx < (size_t) region_ctx.ndims; jndx++) + region_ctx.p_min_idx[jndx] = start[jndx]; + init_acc_pos(®ion_ctx, ®ion_total_size); + /* print the data */ + region_flags = START_OF_DATA; + + if (blkndx == nblocks - 1) + region_flags |= END_OF_DATA; + + for (jndx = 0; jndx < region_ctx.ndims; jndx++) + region_ctx.p_max_idx[jndx] = dims1[jndx]; + + /* print array indices. get the lower bound of the hyperslab and calulate + the element position at the start of hyperslab */ + H5Sget_select_bounds(mem_space, region_low, region_high); + region_ctx.sm_pos = 0; + for (i = 0; i < (size_t) region_ctx.ndims - 1; i++) { + hsize_t region_offset = 1; /* accumulation of the previous dimensions */ + for (jndx = i + 1; jndx < (size_t) region_ctx.ndims; jndx++) + region_offset *= region_total_size[jndx]; + region_ctx.sm_pos += region_low[i] * region_offset; + } + region_ctx.sm_pos += region_low[region_ctx.ndims - 1]; + + h5tools_simple_prefix(stream, info, ®ion_ctx, curr_pos, 0); for (jndx = 0; jndx < numelem; jndx++) { + h5tools_str_append(buffer, "%s", + jndx ? OPTIONAL_LINE_BREAK " " : ""); h5tools_str_sprint(buffer, info, region_id, type_id, (region_buf - + jndx * type_size), ctx); + + jndx * type_size), ®ion_ctx); if (jndx + 1 < numelem || (flags & END_OF_DATA) == 0) h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ",")); } - curr_pos = h5tools_render_element(stream, info, ctx, buffer, curr_pos, - flags, ncols, elmt_counter, i_count); - ctx->indent_level--; + curr_pos = h5tools_render_element(stream, info, ®ion_ctx, buffer, curr_pos, + region_flags, ncols, /*elmt_counter*/®ion_elmtno, i_count); + + region_ctx.indent_level--; } free(start); @@ -1277,11 +1207,17 @@ hsize_t h5tools_dump_region_data_points(hid_t region_space, hid_t region_id, h5tools_context_t *ctx/*in,out*/, h5tools_str_t *buffer/*string into which to render */, hsize_t curr_pos/*total data element position*/, unsigned flags, - size_t ncols, hsize_t elmt_counter, hsize_t i_count/*element counter*/) { + size_t ncols, hsize_t *elmt_counter, hsize_t i_count/*element counter*/) { hssize_t npoints; hsize_t alloc_size; hsize_t *ptdata; hsize_t *dims1; + h5tools_context_t region_ctx; /* print context */ + hsize_t region_total_size[H5S_MAX_RANK]; + hsize_t region_elmtno; /* elemnt index */ + hsize_t region_low[H5S_MAX_RANK]; /* low bound of hyperslab */ + hsize_t region_high[H5S_MAX_RANK]; /* higher bound of hyperslab */ + unsigned int region_flags; /* buffer extent flags */ int ndims; int jndx; int type_size; @@ -1395,22 +1331,56 @@ hsize_t h5tools_dump_region_data_points(hid_t region_space, hid_t region_id, status = H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf); - /* Render the element */ - h5tools_str_reset(buffer); + region_elmtno = 0; + for (jndx = 0; jndx < npoints; jndx++, region_elmtno++) { + memset(®ion_ctx, 0, sizeof(region_ctx)); + region_ctx.indent_level = ctx->indent_level; + region_ctx.ndims = ndims; + region_ctx.need_prefix = TRUE; + region_ctx.cur_column = ctx->cur_column; + region_ctx.cur_elmt = ctx->cur_elmt; - ctx->indent_level++; + /* Render the element */ + h5tools_str_reset(buffer); + + region_ctx.indent_level++; + + /* assume entire data space to be printed */ + for (i = 0; i < (size_t) region_ctx.ndims; i++) + region_ctx.p_min_idx[i] = 0; + H5Sget_simple_extent_dims(region_space, region_ctx.p_max_idx, NULL); + + for (i = 0, region_ctx.sm_pos = 1; region_ctx.ndims != 0 && i < region_ctx.ndims; i++) + region_ctx.sm_pos *= region_ctx.p_max_idx[i] - region_ctx.p_min_idx[i]; + + if (region_ctx.ndims > 0) { + region_ctx.size_last_dim = (int) (region_ctx.p_max_idx[region_ctx.ndims - 1]); + } /* end if */ + else + region_ctx.size_last_dim = 0; + + if (region_ctx.ndims > 0) + init_acc_pos(®ion_ctx, region_ctx.p_max_idx); + + /* print the data */ + region_flags = START_OF_DATA; + + if (jndx == npoints - 1) + region_flags |= END_OF_DATA; + + h5tools_simple_prefix(stream, info, ®ion_ctx, curr_pos, 0); - for (jndx = 0; jndx < npoints; jndx++) { h5tools_str_sprint(buffer, info, region_id, type_id, (region_buf - + jndx * type_size), ctx); + + jndx * type_size), ®ion_ctx); - if (jndx + 1 < npoints || (flags & END_OF_DATA) == 0) + if (jndx + 1 < npoints || (region_flags & END_OF_DATA) == 0) h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ",")); - } - curr_pos = h5tools_render_element(stream, info, ctx, buffer, curr_pos, - flags, ncols, elmt_counter, i_count); - ctx->indent_level--; + curr_pos = h5tools_render_element(stream, info, ®ion_ctx, buffer, curr_pos, + region_flags, ncols, /*elmt_counter*/®ion_elmtno, i_count); + + region_ctx.indent_level--; + } free(region_buf); free(dims1); @@ -1651,8 +1621,7 @@ static herr_t h5tools_dump_simple_subset(FILE *stream, sm_nbytes = p_type_nbytes = H5Tget_size(p_type); if (ctx.ndims > 0) - for (i = ctx.ndims; i > 0; --i) - { + for (i = ctx.ndims; i > 0; --i) { hsize_t size = H5TOOLS_BUFSIZE / sm_nbytes; if ( size == 0) /* datum size > H5TOOLS_BUFSIZE */ size = 1; @@ -1786,7 +1755,8 @@ static herr_t h5tools_dump_simple_subset(FILE *stream, */ static int h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, - hid_t dset, hid_t p_type, int indentlevel) { + hid_t dset, hid_t p_type, int indentlevel) +{ hid_t f_space; /* file data space */ hsize_t elmtno; /* counter */ size_t i; /* counter */ @@ -1826,8 +1796,6 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, * match the dimensionality of the dataset. */ memset(&ctx, 0, sizeof(ctx)); - ctx.indent_level = indentlevel; - ctx.need_prefix = 1; ctx.ndims = H5Sget_simple_extent_ndims(f_space); if ((size_t)ctx.ndims > NELMTS(sm_size)) { @@ -1835,6 +1803,9 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info, return FAIL; } + ctx.indent_level = indentlevel; + ctx.need_prefix = 1; + /* Assume entire data space to be printed */ if (ctx.ndims > 0) for (i = 0; i < (size_t)ctx.ndims; i++) @@ -2559,6 +2530,14 @@ void h5tools_print_datatype(h5tools_str_t *buffer/*in,out*/, case H5T_REFERENCE: h5tools_str_append(buffer, "H5T_REFERENCE"); + if(region_output) { + if (H5Tequal(type, H5T_STD_REF_DSETREG) == TRUE) { + h5tools_str_append(buffer, " { H5T_STD_REF_DSETREG }"); + } + else { + h5tools_str_append(buffer, " { H5T_STD_REF_OBJECT }"); + } + } break; case H5T_ENUM: @@ -2752,7 +2731,6 @@ void h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx/*in,out*/, unsigned flags, hid_t type) { size_t ncols = 80; /*available output width */ h5tools_str_t buffer; /*string into which to render */ - int multiline; /*datum was multiline */ hsize_t curr_pos; /* total data element position */ hsize_t elmt_counter = 0;/*counts the # elements printed.*/ @@ -2791,7 +2769,7 @@ void h5tools_dump_datatype(FILE *stream, const h5tool_format_t *info, h5tools_str_append(&buffer, "\n"); curr_pos = h5tools_render_element(stream, info, ctx, &buffer, curr_pos, - flags, ncols, elmt_counter, 0); + flags, ncols, &elmt_counter, 0); ctx->need_prefix = TRUE; ctx->indent_level--; diff --git a/tools/testfiles/tdataregR.ddl b/tools/testfiles/tdataregR.ddl index 7dcccc4..7ed807b 100644 --- a/tools/testfiles/tdataregR.ddl +++ b/tools/testfiles/tdataregR.ddl @@ -4,24 +4,33 @@ Expected output for 'h5dump -R tdatareg.h5' HDF5 "tdatareg.h5" { GROUP "/" { DATASET "Dataset1" { - DATATYPE H5T_REFERENCE + DATATYPE H5T_REFERENCE { H5T_STD_REF_DSETREG } DATASPACE SIMPLE { ( 4 ) / ( 4 ) } DATA { - DATASET /Dataset2 { - REGION_TYPE BLOCK (2,2)-(7,7) - DATATYPE H5T_STD_U8LE - DATA { - 66,69,72,75,78,81,96,99,102,105,108,111,126,129,132,135,138,141,156,159,162,165,168,171,186,189,192,195,198,201,216,219,222,225,228,231 - } - } - DATASET /Dataset2 { - REGION_TYPE POINT (6,9), (2,2), (8,4), (1,6), (2,8), (3,2), (0,4), - (9,0), (7,1), (3,3) - DATATYPE H5T_STD_U8LE - DATA { - 207,66,252,48,84,96,12,14,213,99 - } - } + (0): DATASET /Dataset2 { + (0): REGION_TYPE BLOCK (2,2)-(7,7) + (0): DATATYPE H5T_STD_U8LE + (0): DATA { + (0,0): 66, 69, 72, 75, 78, 81, 96, 99, 102, 105, 108, 111, 126, 129, 132, 135, 138, 141, 156, 159, 162, 165, 168, 171, 186, 189, 192, 195, 198, 201, 216, 219, 222, 225, 228, 231 + (0): } + (0): } + (1): DATASET /Dataset2 { + (1): REGION_TYPE POINT (6,9), (2,2), (8,4), (1,6), (2,8), (3,2), + (1): (0,4), (9,0), (7,1), (3,3) + (1): DATATYPE H5T_STD_U8LE + (1): DATA { + (0,1): 207, + (0,1): 66, + (0,1): 252, + (0,1): 48, + (0,1): 84, + (0,1): 96, + (0,1): 12, + (0,1): 14, + (0,1): 213, + (0,1): 99 + (1): } + (1): } } } DATASET "Dataset2" { |