summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPedro Vicente Nunes <pvn@hdfgroup.org>2005-05-09 14:53:22 (GMT)
committerPedro Vicente Nunes <pvn@hdfgroup.org>2005-05-09 14:53:22 (GMT)
commit1b313aa2f65a5f35de6bf820f08de5045fd3c232 (patch)
treede7522a948aa2a7734709cca056f91519855a0fb
parentbbe03d73613afbcdeca14c045c8b90fac37e0fe8 (diff)
downloadhdf5-1b313aa2f65a5f35de6bf820f08de5045fd3c232.zip
hdf5-1b313aa2f65a5f35de6bf820f08de5045fd3c232.tar.gz
hdf5-1b313aa2f65a5f35de6bf820f08de5045fd3c232.tar.bz2
[svn-r10738] Purpose:
bug fix 366 Description: the printing of the array indices was done relatively to the stripmine data (data read by hyperslabs when its memory requiremnts are too large) this was causing an incorrect numbering of the array indices (the next read would initialize the indices to zero) Solution: added a field to the print context that keeps track of the stripmine position and pass to the rendering function the total element position Platforms tested: Linux Misc. update:
-rw-r--r--tools/lib/h5tools.c13
-rw-r--r--tools/lib/h5tools.h43
2 files changed, 34 insertions, 22 deletions
diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c
index 3a23059..ddf476d 100644
--- a/tools/lib/h5tools.c
+++ b/tools/lib/h5tools.c
@@ -541,6 +541,7 @@ h5tools_dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
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 */
int elmt_counter = 0;/*counts the # elements printed.
*I (ptl?) needed something that
*isn't going to get reset when a new
@@ -659,7 +660,12 @@ h5tools_dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
if (secnum)
multiline++;
- h5tools_simple_prefix(stream, info, ctx, i, secnum);
+ /* pass to the 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, " "));
@@ -994,6 +1000,11 @@ h5tools_dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
/* Print the data */
flags = (elmtno == 0) ? START_OF_DATA : 0;
flags |= ((elmtno + hs_nelmts) >= p_nelmts) ? END_OF_DATA : 0;
+
+ /* initialize the current stripmine position i; this is necessary to print the array
+ indices */
+ ctx.sm_pos = elmtno;
+
h5tools_dump_simple_data(stream, info, dset, &ctx, flags, hs_nelmts,
p_type, sm_buf);
diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h
index 3fae481..ada098b 100644
--- a/tools/lib/h5tools.h
+++ b/tools/lib/h5tools.h
@@ -26,8 +26,8 @@
#define ESCAPE_HTML 1
#define OPT(X,S) ((X) ? (X) : (S))
#define OPTIONAL_LINE_BREAK "\001" /* Special strings embedded in the output */
-#define START_OF_DATA 0x0001
-#define END_OF_DATA 0x0002
+#define START_OF_DATA 0x0001
+#define END_OF_DATA 0x0002
/*
* Information about how to format output.
@@ -399,23 +399,24 @@ typedef struct dump_header{
} dump_header;
typedef struct h5tools_context_t {
- size_t cur_column; /*current column for output */
- size_t cur_elmt; /*current element/output line */
- int need_prefix; /*is line prefix needed? */
- int ndims; /*dimensionality */
- hsize_t p_min_idx[H5S_MAX_RANK]; /*min selected index */
- hsize_t p_max_idx[H5S_MAX_RANK]; /*max selected index */
- int prev_multiline; /*was prev datum multiline? */
- size_t prev_prefix_len;/*length of previous prefix */
- int continuation; /*continuation of previous data?*/
- hsize_t size_last_dim; /*the size of the last dimension,
- *needed so we can break after each
- *row */
- int indent_level; /*the number of times we need some
- *extra indentation */
- int default_indent_level; /*this is used when the indent level gets changed */
- hsize_t acc[H5S_MAX_RANK]; /* accumulator position */
- hsize_t pos[H5S_MAX_RANK]; /* matrix position */
+ size_t cur_column; /*current column for output */
+ size_t cur_elmt; /*current element/output line */
+ int need_prefix; /*is line prefix needed? */
+ int ndims; /*dimensionality */
+ hsize_t p_min_idx[H5S_MAX_RANK]; /*min selected index */
+ hsize_t p_max_idx[H5S_MAX_RANK]; /*max selected index */
+ int prev_multiline; /*was prev datum multiline? */
+ size_t prev_prefix_len; /*length of previous prefix */
+ int continuation; /*continuation of previous data?*/
+ hsize_t size_last_dim; /*the size of the last dimension,
+ *needed so we can break after each
+ *row */
+ int indent_level; /*the number of times we need some
+ *extra indentation */
+ int default_indent_level; /*this is used when the indent level gets changed */
+ hsize_t acc[H5S_MAX_RANK]; /* accumulator position */
+ hsize_t pos[H5S_MAX_RANK]; /* matrix position */
+ hsize_t sm_pos; /* current stripmine element position */
} h5tools_context_t;
@@ -517,7 +518,7 @@ extern int h5tools_canreadf(const char* name,
hid_t dcpl_id);
extern int h5tools_can_encode(H5Z_filter_t filtn);
-void init_acc_pos(h5tools_context_t *ctx, hsize_t *dims);
+void init_acc_pos(h5tools_context_t *ctx, hsize_t *dims);
-#endif /* H5TOOLS_H__ */
+#endif /* H5TOOLS_H__ */