summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlbert Cheng <acheng@hdfgroup.org>2010-05-15 05:40:00 (GMT)
committerAlbert Cheng <acheng@hdfgroup.org>2010-05-15 05:40:00 (GMT)
commit174cc7b19e078a41d97ed42e396127f1f76b889f (patch)
tree292e6f8aaddfa3ae8bffbe1dd65eccd8f04d9a7f
parentb8f131dc78aba5ce6998401bc6de2b4a69b44412 (diff)
downloadhdf5-174cc7b19e078a41d97ed42e396127f1f76b889f.zip
hdf5-174cc7b19e078a41d97ed42e396127f1f76b889f.tar.gz
hdf5-174cc7b19e078a41d97ed42e396127f1f76b889f.tar.bz2
[svn-r18821] Packed bits codes tidy up. Removed codes that are not needed
any more. Changed algorithm of creating mask which now sits at the least significant bits. Display data by down shift first and then mask it for display. Changed the variable names to reflect the new purpose better. Tested: AlbertPax (linux)
-rw-r--r--tools/h5dump/h5dump.c25
-rw-r--r--tools/lib/h5tools.c4
-rw-r--r--tools/lib/h5tools.h4
-rw-r--r--tools/lib/h5tools_str.c16
-rw-r--r--tools/testfiles/packedbits.h5bin7776 -> 7776 bytes
5 files changed, 19 insertions, 30 deletions
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c
index a9adeb5..5fe4315 100644
--- a/tools/h5dump/h5dump.c
+++ b/tools/h5dump/h5dump.c
@@ -2287,8 +2287,8 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
for(i=0;i<data_loop;i++) {
if(display_packed_bits) {
dump_packed_bits(i);
- packed_counter = packed_mask[i];
- packed_normalize = packed_offset[i];
+ packed_data_mask = packed_mask[i];
+ packed_data_offset = packed_offset[i];
}
#endif
@@ -3604,18 +3604,13 @@ static int
parse_mask_list(const char *h_list)
{
const char *ptr;
- int offset_value = 0, length_value = 0;
+ int offset_value, length_value;
/* sanity check */
HDassert(h_list);
- packed_counter = 0;
HDmemset(packed_mask,0,sizeof(packed_mask));
- HDmemset(packed_offset,0,sizeof(packed_offset));
- HDmemset(packed_length,0,sizeof(packed_length));
- offset_value = -1;
- length_value = -1;
packed_bits_num = 0;
/* scan in pair of offset,length separated by commas. */
ptr = h_list;
@@ -3671,16 +3666,11 @@ parse_mask_list(const char *h_list)
}
packed_offset[packed_bits_num] = offset_value;
packed_length[packed_bits_num] = length_value;
-
- packed_mask[packed_bits_num] = 1 << offset_value;
- while(length_value>1) {
- packed_mask[packed_bits_num] = packed_mask[packed_bits_num] << 1;
- packed_mask[packed_bits_num] |= 1 << offset_value;
- length_value--;
- }
+ /* create the bit mask by left shift 1's by length, then negate it. */
+ /* After packed_mask is calculated, packed_length is not needed but */
+ /* keep it for debug purpose. */
+ packed_mask[packed_bits_num] = ~(~0<<length_value);
packed_bits_num++;
- offset_value = -1;
- length_value = -1;
/* skip a possible comma separator */
if (*ptr == ','){
@@ -3697,7 +3687,6 @@ parse_mask_list(const char *h_list)
error_msg(h5tools_getprogname(), "Bad mask list(%s)\n", h_list);
return FAIL;
}
- packed_counter = packed_mask[0];
return SUCCEED;
}
diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c
index cce7d47..e8657e1 100644
--- a/tools/lib/h5tools.c
+++ b/tools/lib/h5tools.c
@@ -44,8 +44,8 @@ int bin_form; /* binary form */
int region_output; /* region output */
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
int packed_bits_num; /* number of packed bits to display */
-int packed_normalize; /* number of bits to shift right to display normalized */
-unsigned int packed_counter; /* counter for which packed bits to display */
+int packed_data_offset; /* offset of packed bits to display */
+unsigned int packed_data_mask; /* mask in which packed bits to display */
#endif
static h5tool_format_t h5tools_dataformat = {
diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h
index b44948a..2c8ec96 100644
--- a/tools/lib/h5tools.h
+++ b/tools/lib/h5tools.h
@@ -527,8 +527,8 @@ extern "C" {
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
H5TOOLS_DLLVAR int packed_bits_num; /* number of packed bits to display */
-H5TOOLS_DLLVAR int packed_normalize; /* number of bits to shift right to display normalized */
-H5TOOLS_DLLVAR unsigned int packed_counter; /* counter for which packed bits to display */
+H5TOOLS_DLLVAR int packed_data_offset; /* offset of packed bits to display */
+H5TOOLS_DLLVAR unsigned int packed_data_mask; /* mask in which packed bits to display */
#endif
H5TOOLS_DLLVAR FILE *rawdatastream; /* output stream for raw data */
diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c
index b1c017a..da9218f 100644
--- a/tools/lib/h5tools_str.c
+++ b/tools/lib/h5tools_str.c
@@ -785,7 +785,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&tempint, vp, sizeof(int));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- tempint = (tempint & packed_counter)>>packed_normalize;
+ tempint = (tempint >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_int, "%d"), tempint);
}
@@ -793,7 +793,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&tempuint, vp, sizeof(unsigned int));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- tempuint = (tempuint & packed_counter)>>packed_normalize;
+ tempuint = (tempuint >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_uint, "%u"), tempuint);
}
@@ -802,7 +802,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&tempchar, cp_vp, sizeof(char));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- tempchar = (tempchar & packed_counter)>>packed_normalize;
+ tempchar = (tempchar >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_schar, "%d"), tempchar);
}
@@ -811,7 +811,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&tempuchar, ucp_vp, sizeof(unsigned char));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- tempuchar = (tempuchar & packed_counter)>>packed_normalize;
+ tempuchar = (tempuchar >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_uchar, "%u"), tempuchar);
}
@@ -821,7 +821,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&tempshort, vp, sizeof(short));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- tempshort = (tempshort & packed_counter)>>packed_normalize;
+ tempshort = (tempshort >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_short, "%d"), tempshort);
}
@@ -831,7 +831,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&tempushort, vp, sizeof(unsigned short));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- tempushort = (tempushort & packed_counter)>>packed_normalize;
+ tempushort = (tempushort >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_ushort, "%u"), tempushort);
}
@@ -839,7 +839,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&templong, vp, sizeof(long));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- templong = (templong & packed_counter)>>packed_normalize;
+ templong = (templong >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_long, "%ld"), templong);
}
@@ -847,7 +847,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
HDmemcpy(&tempulong, vp, sizeof(unsigned long));
#ifdef H5_HAVE_H5DUMP_PACKED_BITS
if(packed_bits_num)
- tempulong = (tempulong & packed_counter)>>packed_normalize;
+ tempulong = (tempulong >> packed_data_offset) & packed_data_mask;
#endif
h5tools_str_append(str, OPT(info->fmt_ulong, "%lu"), tempulong);
}
diff --git a/tools/testfiles/packedbits.h5 b/tools/testfiles/packedbits.h5
index 3db1883..ad7333f 100644
--- a/tools/testfiles/packedbits.h5
+++ b/tools/testfiles/packedbits.h5
Binary files differ