diff options
author | Robb Matzke <matzke@llnl.gov> | 1998-04-17 21:29:43 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1998-04-17 21:29:43 (GMT) |
commit | 011457075e41d587c47f89250514b3393a78d329 (patch) | |
tree | d9b12f2ffc87b12575607102d207a60cd52214b9 /src/H5Ocomp.c | |
parent | b59ab36893949af14c403ab46cbdb397f0a24f5b (diff) | |
download | hdf5-011457075e41d587c47f89250514b3393a78d329.zip hdf5-011457075e41d587c47f89250514b3393a78d329.tar.gz hdf5-011457075e41d587c47f89250514b3393a78d329.tar.bz2 |
[svn-r353] Changes since 19980414
----------------------
./html/Compression.html [NEW]
./html/Datasets.html
./html/H5.format.html
./html/H5.user.html
Documented compression. A couple of the H5P functions aren't
quite implemented yet but they're coming soon...
./src/H5Dprivate.h
./src/H5E.c
./src/H5Epublic.h
./src/H5Farray.c
./src/H5Fistore.c
./src/H5Fprivate.h
./src/H5MF.c
./src/H5MFprivate.h
./src/H5O.c
./src/H5Ocomp.c [NEW]
./src/H5Oprivate.h
./src/H5P.c
./src/H5Ppublic.h
./src/H5Sprivate.h
./src/H5Ssimp.c
./src/H5Z.c [NEW]
./src/H5Zprivate.h [NEW]
./src/H5Zpublic.h [NEW]
./src/Makefile.in
./src/hdf5.h
./test/dsets.c
./test/istore.c
Compression is now mostly working. Don't try to open a
compressed dataset though because the compression message
won't be read.
./html/Datatypes.html
./html/H5.api.html
./src/H5.c
./src/H5private.h
./src/H5D.c
./src/H5T.c
./src/H5Tconv.c
./src/H5Tpkg.h
./src/H5Tprivate.h
./src/H5Tpublic.h
Added timing support. When compiled with H5T_DEBUG defined
the library will print conversion bandwidths when the library
closes. The H5Tregister functions take a string as the first
argument so the statistics output is meaningful.
./MANIFEST
Added new files.
./configure.in
./src/H5config.h.in
Check for getrusage(). Check for compress2() in libz.a and
the zlib.h header file. Added `z' to the debug list.
./src/H5B.c
./src/H5Bprivate.h
./src/H5Gnode.c
./src/debug.c
Cleaned up some indentation and added support to print istore
B-trees. From the debugger, give the B-tree address and the
dimensionality from the layout message of the object header.
./src/h5ls.c
The oid is printed as w:x:y:z where w and x are the file ID
and y and z are the OID within the file. You can give z or
y*2^32+z as an argument to the debugger to print the object
header for the object.
./src/H5AC.c
Cleaned up statistics and made them match those reported by
H5T and H5Z.
./src/H5MM.c
./src/H5MMprivate.h
./src/H5Fistore.c
Finally got rid of a couple of long-standing const cast
warnings.
Diffstat (limited to 'src/H5Ocomp.c')
-rw-r--r-- | src/H5Ocomp.c | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/src/H5Ocomp.c b/src/H5Ocomp.c new file mode 100644 index 0000000..6b6c2e7 --- /dev/null +++ b/src/H5Ocomp.c @@ -0,0 +1,291 @@ +/* + * Copyright (C) 1998 NCSA + * All rights reserved. + * + * Programmer: Robb Matzke <matzke@llnl.gov> + * Wednesday, April 15, 1998 + * + * Purpose: Data compression message. + */ +#include <H5private.h> +#include <H5Eprivate.h> +#include <H5MMprivate.h> +#include <H5Oprivate.h> + +#define PABLO_MASK H5O_comp_mask + +/* PRIVATE PROTOTYPES */ +static herr_t H5O_comp_encode (H5F_t *f, uint8 *p, const void *mesg); +static void *H5O_comp_decode (H5F_t *f, const uint8 *p, H5HG_t *hobj); +static void *H5O_comp_copy (const void *_mesg, void *_dest); +static size_t H5O_comp_size (H5F_t *f, const void *_mesg); +static herr_t H5O_comp_reset (void *_mesg); +static herr_t H5O_comp_debug (H5F_t *f, const void *_mesg, + FILE * stream, intn indent, intn fwidth); + +/* This message derives from H5O */ +const H5O_class_t H5O_COMPRESS[1] = {{ + H5O_COMPRESS_ID, /* message id number */ + "compression", /* message name for debugging */ + sizeof(H5O_compress_t), /* native message size */ + H5O_comp_decode, /* decode message */ + H5O_comp_encode, /* encode message */ + H5O_comp_copy, /* copy the native value */ + H5O_comp_size, /* size of raw message */ + H5O_comp_reset, /* reset method */ + NULL, /* share method */ + H5O_comp_debug, /* debug the message */ +}}; + +/* Interface initialization */ +static hbool_t interface_initialize_g = FALSE; +#define INTERFACE_INIT NULL + + +/*------------------------------------------------------------------------- + * Function: H5O_comp_decode + * + * Purpose: Decodes a compression message. + * + * Return: Success: Ptr to the native message. + * + * Failure: NULL + * + * Programmer: Robb Matzke + * Wednesday, April 15, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void * +H5O_comp_decode(H5F_t __unused__ *f, const uint8 *p, H5HG_t __unused__ *hobj) +{ + H5O_compress_t *comp = NULL; + + FUNC_ENTER(H5O_comp_decode, NULL); + + /* check args */ + assert(p); + + /* Decode */ + comp = H5MM_xcalloc(1, sizeof *comp); + comp->method = *p++; + comp->flags = *p++; + UINT16DECODE (p, comp->cd_size); + + if (comp->cd_size>0) { + comp->client_data = H5MM_xmalloc (comp->cd_size); + HDmemcpy (comp->client_data, p, comp->cd_size); + } + + FUNC_LEAVE(comp); +} + + +/*------------------------------------------------------------------------- + * Function: H5O_comp_encode + * + * Purpose: Encodes message MESG into buffer P. + * + * Return: Success: SUCCEED + * + * Failure: FAIL + * + * Programmer: Robb Matzke + * Wednesday, April 15, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5O_comp_encode (H5F_t __unused__ *f, uint8 *p/*out*/, const void *mesg) +{ + const H5O_compress_t *comp = (const H5O_compress_t*)mesg; + + FUNC_ENTER (H5O_comp_encode, FAIL); + + /* Check args */ + assert (p); + assert (mesg); + + *p++ = comp->method; + *p++ = comp->flags; + UINT16ENCODE (p, comp->cd_size); + if (comp->cd_size) { + HDmemcpy (p, comp->client_data, comp->cd_size); + } + + FUNC_LEAVE (SUCCEED); +} + + +/*------------------------------------------------------------------------- + * Function: H5O_comp_copy + * + * Purpose: Copies a compression message from SRC to DST allocating DST + * if necessary. If DST is already allocated then we assume + * that it isn't initialized. + * + * Return: Success: Ptr to DST or allocated result. + * + * Failure: NULL + * + * Programmer: Robb Matzke + * Wednesday, April 15, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void * +H5O_comp_copy (const void *_src, void *_dst/*out*/) +{ + const H5O_compress_t *src = (const H5O_compress_t *)_src; + H5O_compress_t *dst = (H5O_compress_t *)_dst; + + FUNC_ENTER (H5O_comp_copy, NULL); + + if (!dst) dst = H5MM_xmalloc (sizeof *dst); + *dst = *src; + if (src->cd_size>0) { + dst->client_data = H5MM_xmalloc (src->cd_size); + HDmemcpy (dst->client_data, src->client_data, src->cd_size); + } + + FUNC_LEAVE (dst); +} + + +/*------------------------------------------------------------------------- + * Function: H5O_comp_size + * + * Purpose: Determines the size of a raw compression message. + * + * Return: Success: Size of message. + * + * Failure: zero + * + * Programmer: Robb Matzke + * Wednesday, April 15, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static size_t +H5O_comp_size (H5F_t __unused__ *f, const void *mesg) +{ + const H5O_compress_t *comp = (const H5O_compress_t*)mesg; + + FUNC_ENTER (H5O_comp_size, 0); + FUNC_LEAVE (4+comp->cd_size); +} + + +/*------------------------------------------------------------------------- + * Function: H5O_comp_reset + * + * Purpose: Resets a compression message by freeing the client data and + * setting all fields to zero. The MESG buffer is not freed. + * + * Return: Success: SUCCEED + * + * Failure: FAIL + * + * Programmer: Robb Matzke + * Wednesday, April 15, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5O_comp_reset (void *mesg) +{ + H5O_compress_t *comp = (H5O_compress_t*)mesg; + + FUNC_ENTER (H5O_comp_reset, FAIL); + + assert (comp); + H5MM_xfree (comp->client_data); + HDmemset (comp, 0, sizeof *comp); + + FUNC_LEAVE (SUCCEED); +} + + +/*------------------------------------------------------------------------- + * Function: H5O_comp_debug + * + * Purpose: Prints debugging information for compression message MESG on + * output stream STREAM. Each line is indented INDENT + * characters and the field name takes up FWIDTH characters. + * + * Return: Success: SUCCEED + * + * Failure: FAIL + * + * Programmer: Robb Matzke + * Wednesday, April 15, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +H5O_comp_debug (H5F_t __unused__ *f, const void *mesg, FILE *stream, + intn indent, intn fwidth) +{ + const H5O_compress_t *comp = (const H5O_compress_t *)mesg; + size_t i, j; + + FUNC_ENTER(H5O_comp_debug, FAIL); + + /* check args */ + assert(f); + assert(comp); + assert(stream); + assert(indent >= 0); + assert(fwidth >= 0); + + fprintf (stream, "%*s%-*s %d\n", indent, "", fwidth, + "Method:", + (int)(comp->method)); + fprintf (stream, "%*s%-*s 0x%02x\n", indent, "", fwidth, + "Flags:", + (unsigned)(comp->flags)); + fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth, + "Size of client data:", + (unsigned long)(comp->cd_size)); + + if (comp->cd_size>0) { + fprintf (stream, "%*s%s\n", indent, "", "Client Data:"); + for (i=0; i<comp->cd_size; i+=16) { + fprintf (stream, "%*s%04d: ", indent+3, "", i); + for (j=0; j<16; j++) { + if (8==j) putc (' ', stream); + if (i+j<comp->cd_size) { + fprintf (stream, "%02x ", comp->client_data[i+j]); + } else { + fputs (" ", stream); + } + } + for (j=0; j<16 && i+j<comp->cd_size; j++) { + if (8==j) putc (' ', stream); + if (comp->client_data[i+j]>' ' && + comp->client_data[i+j]<='~') { + putc (comp->client_data[i+j], stream); + } else { + putc ('.', stream); + } + putc ('\n', stream); + } + } + } else { + fprintf (stream, "%*s%-*s None\n", indent, "", fwidth, "Client Data:"); + } + + FUNC_LEAVE(SUCCEED); +} |