diff options
author | Robb Matzke <matzke@llnl.gov> | 1999-02-15 17:38:04 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1999-02-15 17:38:04 (GMT) |
commit | c22bac0d207abbdd81123c35681f0558f75de488 (patch) | |
tree | 98db51d9303724a07f13558a7490881e89c6e6ad /src/H5Tconv.c | |
parent | f6272d42929093a81aa2da79f150333793de49e0 (diff) | |
download | hdf5-c22bac0d207abbdd81123c35681f0558f75de488.zip hdf5-c22bac0d207abbdd81123c35681f0558f75de488.tar.gz hdf5-c22bac0d207abbdd81123c35681f0558f75de488.tar.bz2 |
[svn-r1065] Changes since 19990121
----------------------
./configure.in
./acconfig.h
./configure [REGENERATED]
./src/H5config.h.in [REGENERATED]
./src/H5public.h
./src/H5Omtime.c
Check for <stddef.h>
Checks for `__tm_gmtoff' in `struct tm' because old versions
of GNU libc are different than recent versions. This fixes the
failing mtime test.
./bin/config.guess
./config/freebsd2.2.7 [REMOVED]
./config/freebsd [ADDED]
Changed the name so it works with all versions of FreeBSD.
./src/H5.c
Moved H5F after H5T and H5G in H5_term_library() to satisfy
dependencies.
./src/H5G.c
Fixed a bug that caused H5Gcreate() to fail if the group name
had trailing slashes.
./src/H5Gpublic.h
Changed `group_name' to `name' in a prototype.
./src/Makefile.in
Dynamic library on Linux, but needs for work to be generally
useful.
./src/H5HG.c
./src/H5HGprivate.h
Fixed alignment problems when using old GCC compilers (like
the one shipped with RedHad Linux).
./tools/h5ls.c
Fixed a bug where the contents of the root group could be
listed twice if there was a link back to the root
group. Similarly for groups that are mentioned on the command
line.
Fixed a bug where unknown types were printed with a random
type class number.
./src/H5T.c
./src/H5Tconv.c
./src/H5Tprivate.h
Fixed O(log N) conversion bugs.
Diffstat (limited to 'src/H5Tconv.c')
-rw-r--r-- | src/H5Tconv.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/H5Tconv.c b/src/H5Tconv.c index 86ccea3..8816894 100644 --- a/src/H5Tconv.c +++ b/src/H5Tconv.c @@ -550,8 +550,8 @@ H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata) /* * Insure that members are sorted. */ - H5T_sort_value(src); - H5T_sort_value(dst); + H5T_sort_value(src, NULL); + H5T_sort_value(dst, NULL); /* * Build a mapping from source member number to destination member @@ -761,8 +761,8 @@ H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts, /* * Insure that members are sorted. */ - H5T_sort_value(src); - H5T_sort_value(dst); + H5T_sort_value(src, NULL); + H5T_sort_value(dst, NULL); src2dst = priv->src2dst; /* @@ -910,8 +910,8 @@ H5T_conv_enum_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata) * symbol names and build a map from source member index to destination * member index. */ - H5T_sort_name(src); - H5T_sort_name(dst); + H5T_sort_name(src, NULL); + H5T_sort_name(dst, NULL); if (NULL==(priv->src2dst=H5MM_malloc(src->u.enumer.nmembs*sizeof(int)))) { HRETURN_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");; @@ -994,6 +994,9 @@ H5T_conv_enum_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata) H5MM_xfree(priv->src2dst); priv->src2dst = map; HGOTO_DONE(SUCCEED); + } else { + /* Sort source type by value and adjust src2dst[] appropriately */ + H5T_sort_value(src, priv->src2dst); } } ret_value = SUCCEED; @@ -1082,9 +1085,17 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, } assert (H5T_ENUM==src->type); assert (H5T_ENUM==dst->type); - H5T_sort_name(src); - H5T_sort_name(dst); + if (priv->length) { + /* Use O(1) lookup */ + H5T_sort_name(src, NULL); + H5T_sort_name(dst, NULL); + } else { + /* Use O(log N) lookup */ + H5T_sort_value(src, NULL); /*yes, by value*/ + H5T_sort_name(dst, NULL); /*yes, by name*/ + } + /* * Direction of conversion. */ @@ -1109,6 +1120,7 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, } else { n = *((int*)s); } + n -= priv->base; if (n<0 || n>=priv->length || priv->src2dst[n]<0) { if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, s, d)<0) { |