diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2005-10-13 21:39:51 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2005-10-13 21:39:51 (GMT) |
commit | b76762fab1c9ef6b2496859c349cec0a3e5439d6 (patch) | |
tree | ab73bd91c809c891dc24e4127b5590eb2d0c9156 /src/H5Shyper.c | |
parent | 39220e7a3055735e4dfced3a3b4d07c91c386447 (diff) | |
download | hdf5-b76762fab1c9ef6b2496859c349cec0a3e5439d6.zip hdf5-b76762fab1c9ef6b2496859c349cec0a3e5439d6.tar.gz hdf5-b76762fab1c9ef6b2496859c349cec0a3e5439d6.tar.bz2 |
[svn-r11558] Purpose:
Bug fix
Description:
Check in Kent's fixes to hyperslab rebuilding code that should correctly
detect situation when different sub-hyperslabs exist in a higher dimension.
Solution:
Remember previous sub-hyperslab information and compare that with newly
generated sub-hyperslab to make certain they are the same.
Platforms tested:
FreeBSD 4.11 (sleipnir)
Too minor to require h5committest
Diffstat (limited to 'src/H5Shyper.c')
-rw-r--r-- | src/H5Shyper.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/src/H5Shyper.c b/src/H5Shyper.c index 6cc6cdd..1f75af4 100644 --- a/src/H5Shyper.c +++ b/src/H5Shyper.c @@ -5371,7 +5371,8 @@ H5S_hyper_rebuild_helper(const H5S_hyper_span_t *span, H5S_hyper_dim_t span_slab hsize_t curr_start; hsize_t curr_low; int outcount; - H5S_hyper_dim_t canon_down_span_slab_info; + int i; + H5S_hyper_dim_t canon_down_span_slab_info[H5S_MAX_RANK]; hbool_t ret_value = TRUE; FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_rebuild_helper) @@ -5391,7 +5392,7 @@ H5S_hyper_rebuild_helper(const H5S_hyper_span_t *span, H5S_hyper_dim_t span_slab if(!H5S_hyper_rebuild_helper(span->down->head, span_slab_info, rank - 1)) HGOTO_DONE(FALSE) - canon_down_span_slab_info = span_slab_info[rank - 2]; + HDmemcpy(canon_down_span_slab_info, span_slab_info, sizeof(H5S_hyper_dim_t) * rank); } /* end if */ /* Assign the initial starting point & block size */ @@ -5410,19 +5411,22 @@ H5S_hyper_rebuild_helper(const H5S_hyper_span_t *span, H5S_hyper_dim_t span_slab if(!H5S_hyper_rebuild_helper(span->down->head, span_slab_info, rank - 1)) HGOTO_DONE(FALSE) - /* Point to hyperslab span information set up by recursive call */ - curr_down_span_slab_info = &span_slab_info[rank - 2]; - - /* Compare the slab information of the adjacent spans in the down span tree.*/ - if(curr_down_span_slab_info->count > 0 && canon_down_span_slab_info.count > 0) { - if(curr_down_span_slab_info->start != canon_down_span_slab_info.start - || curr_down_span_slab_info->stride != canon_down_span_slab_info.stride - || curr_down_span_slab_info->block != canon_down_span_slab_info.block - || curr_down_span_slab_info->count != canon_down_span_slab_info.count) - HGOTO_DONE(FALSE) - } /* end if */ - else if (!((curr_down_span_slab_info->count == 0) && (canon_down_span_slab_info.count == 0))) - HGOTO_DONE(FALSE) + /* Compare the slab information of the adjacent spans in the down span tree. + We have to compare all the sub-tree slab information with the canon_down_span_slab_info.*/ + + for( i = 0; i < rank - 1; i++) { + curr_down_span_slab_info = &span_slab_info[i]; + + if(curr_down_span_slab_info->count > 0 && canon_down_span_slab_info[i].count > 0) { + if(curr_down_span_slab_info->start != canon_down_span_slab_info[i].start + || curr_down_span_slab_info->stride != canon_down_span_slab_info[i].stride + || curr_down_span_slab_info->block != canon_down_span_slab_info[i].block + || curr_down_span_slab_info->count != canon_down_span_slab_info[i].count) + HGOTO_DONE(FALSE) + } /* end if */ + else if (!((curr_down_span_slab_info->count == 0) && (canon_down_span_slab_info[i].count == 0))) + HGOTO_DONE(FALSE) + } } /* end if */ } /* end if */ |