summaryrefslogtreecommitdiffstats
path: root/tools/h5repack/h5repack.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5repack/h5repack.h')
-rw-r--r--tools/h5repack/h5repack.h362
1 files changed, 362 insertions, 0 deletions
diff --git a/tools/h5repack/h5repack.h b/tools/h5repack/h5repack.h
new file mode 100644
index 0000000..b91d516
--- /dev/null
+++ b/tools/h5repack/h5repack.h
@@ -0,0 +1,362 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef H5REPACK_H__
+#define H5REPACK_H__
+
+#include "hdf5.h"
+#include "h5trav.h"
+#include "h5diff.h"
+#include "h5tools.h"
+
+#define H5FOPENERROR "unable to open file"
+
+#define PFORMAT "%-7s %-7s %-7s\n" /*chunk info, compression info, name*/
+#define PFORMAT1 "%-7s %-7s %-7s" /*chunk info, compression info, name*/
+
+#define MAX_NC_NAME 256 /* max length of a name */
+#define MAX_VAR_DIMS 32 /* max per variable dimensions */
+
+
+/*-------------------------------------------------------------------------
+ * data structures for command line options
+ *-------------------------------------------------------------------------
+ */
+
+/* a list of names */
+typedef struct {
+ char obj[MAX_NC_NAME];
+} obj_list_t;
+
+/*
+ the type of filter and additional parameter
+ type can be one of the filters
+ H5Z_FILTER_NONE 0, uncompress if compressed
+ H5Z_FILTER_DEFLATE 1 , deflation like gzip
+ H5Z_FILTER_SHUFFLE 2 , shuffle the data
+ H5Z_FILTER_FLETCHER32 3 , letcher32 checksum of EDC
+ H5Z_FILTER_SZIP 4 , szip compression
+*/
+
+#define CDVALUES 2
+
+typedef struct {
+ H5Z_filter_t filtn; /* filter identification number */
+ int cd_values[CDVALUES]; /* filter client data values */
+} filter_info_t;
+
+/* chunk lengths along each dimension and rank */
+typedef struct {
+ hsize_t chunk_lengths[MAX_VAR_DIMS];
+ int rank;
+} chunk_info_t;
+
+/* we currently define a maximum value for the filters array,
+ that corresponds to the current library filters */
+#define H5_REPACK_MAX_NFILTERS 4
+
+/* information for one object, contains PATH, CHUNK info and FILTER info */
+typedef struct {
+ char path[MAX_NC_NAME]; /* name of object */
+ filter_info_t filter[H5_REPACK_MAX_NFILTERS]; /* filter array */
+ int nfilters; /* current number of filters */
+ H5D_layout_t layout; /* layout information */
+ chunk_info_t chunk; /* chunk information */
+ hid_t refobj_id; /* object ID, references */
+} pack_info_t;
+
+/* store a table of all objects */
+typedef struct {
+ int size;
+ int nelems;
+ pack_info_t *objs;
+} pack_opttbl_t;
+
+
+/*-------------------------------------------------------------------------
+ * command line options
+ *-------------------------------------------------------------------------
+ */
+
+/* all the above, ready to go to the hrepack call */
+typedef struct {
+ pack_opttbl_t *op_tbl; /*table with all -c and -f options */
+ int all_layout; /*apply the layout to all objects */
+ int all_filter; /*apply the filter to all objects */
+ filter_info_t filter_g; /*global filter INFO for the ALL case */
+ chunk_info_t chunk_g; /*global chunk INFO for the ALL case */
+ H5D_layout_t layout_g; /*global layout information for the ALL case */
+ int verbose; /*verbose mode */
+ hsize_t threshold; /*minimum size to compress, in bytes */
+} pack_opt_t;
+
+
+
+/*-------------------------------------------------------------------------
+ * public functions
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int h5repack (const char* infile, const char* outfile, pack_opt_t *options);
+int h5repack_addfilter (const char* str, pack_opt_t *options);
+int h5repack_addlayout (const char* str, pack_opt_t *options);
+int h5repack_init (pack_opt_t *options, int verbose);
+int h5repack_end (pack_opt_t *options);
+int h5repack_verify (const char *fname,pack_opt_t *options);
+int h5repack_cmpdcpl (const char *fname1,
+ const char *fname2);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+/*-------------------------------------------------------------------------
+ * private functions
+ *-------------------------------------------------------------------------
+ */
+
+
+int check_objects(const char* fname,
+ pack_opt_t *options);
+
+int copy_objects(const char* fnamein,
+ const char* fnameout,
+ pack_opt_t *options);
+
+void print_objlist(const char *filename,
+ int nobjects,
+ trav_info_t *travi );
+
+int do_copy_objects(hid_t fidin,
+ hid_t fidout,
+ trav_table_t *travt,
+ pack_opt_t *options);
+
+int copy_attr(hid_t loc_in,
+ hid_t loc_out,
+ pack_opt_t *options
+ );
+
+int do_copy_refobjs(hid_t fidin,
+ hid_t fidout,
+ trav_table_t *travt,
+ pack_opt_t *options); /* repack options */
+
+
+
+void read_info(const char *filename,pack_opt_t *options);
+void init_packobject(pack_info_t *obj);
+int print_filters(hid_t dcpl_id);
+
+
+
+/*-------------------------------------------------------------------------
+ * filters
+ *-------------------------------------------------------------------------
+ */
+
+int filter_this(const char* name,
+ pack_opt_t *options,
+ pack_info_t *pack); /* info about object to filter */
+
+int apply_filters(const char* name, /* object name from traverse list */
+ int rank, /* rank of dataset */
+ hsize_t *dims, /* dimensions of dataset */
+ hid_t dcpl_id, /* dataset creation property list */
+ hid_t type_id, /* datatype */
+ pack_opt_t *options, /* repack options */
+ pack_info_t *obj); /* info about object to filter */
+
+int has_filter(hid_t dcpl_id,
+ H5Z_filter_t filtnin);
+
+int check_szip_params( unsigned bits_per_pixel,
+ unsigned pixels_per_block,
+ unsigned pixels_per_scanline,
+ hsize_t image_pixels);
+
+int check_szip(hid_t type_id, /* dataset datatype */
+ int rank, /* chunk rank */
+ hsize_t *dims, /* chunk dims */
+ unsigned szip_options_mask /*IN*/,
+ unsigned *szip_pixels_per_block /*IN,OUT*/,
+ pack_opt_t *options);
+
+int can_read(const char* name, /* object name from traverse list */
+ hid_t dcpl_id, /* dataset creation property list */
+ pack_opt_t *options); /* repack options */
+
+
+/*-------------------------------------------------------------------------
+ * layout functions
+ *-------------------------------------------------------------------------
+ */
+
+int has_layout(hid_t dcpl_id,
+ pack_info_t *obj);
+
+int layout_this(hid_t dcpl_id, /* DCPL from input object */
+ const char* name, /* object name from traverse list */
+ pack_opt_t *options, /* repack options */
+ pack_info_t *pack /*OUT*/) /* object to apply layout */;
+
+int apply_layout(hid_t dcpl_id,
+ pack_info_t *pack); /* info about object */
+
+
+/*-------------------------------------------------------------------------
+ * options table
+ *-------------------------------------------------------------------------
+ */
+int options_table_init( pack_opttbl_t **tbl );
+int options_table_free( pack_opttbl_t *table );
+int options_add_layout( obj_list_t *obj_list,
+ int n_objs,
+ pack_info_t *pack,
+ pack_opttbl_t *table );
+int options_add_filter ( obj_list_t *obj_list,
+ int n_objs,
+ filter_info_t filt,
+ pack_opttbl_t *table );
+pack_info_t* options_get_object( const char *path,
+ pack_opttbl_t *table);
+
+/*-------------------------------------------------------------------------
+ * parse functions
+ *-------------------------------------------------------------------------
+ */
+
+obj_list_t* parse_filter(const char *str,
+ int *n_objs,
+ filter_info_t *filt,
+ pack_opt_t *options);
+
+obj_list_t* parse_layout(const char *str,
+ int *n_objs,
+ pack_info_t *pack, /* info about object */
+ pack_opt_t *options);
+
+const char* get_sfilter (H5Z_filter_t filtn);
+int parse_number(char *str);
+
+/*-------------------------------------------------------------------------
+ * tests
+ *-------------------------------------------------------------------------
+ */
+
+#define FNAME1 "test1.h5"
+#define FNAME1OUT "test1out.h5"
+#define FNAME2 "test2.h5"
+#define FNAME2OUT "test2out.h5"
+#define FNAME3 "test3.h5"
+#define FNAME3OUT "test3out.h5"
+#define FNAME4 "test4.h5"
+#define FNAME4OUT "test4out.h5"
+#define FNAME5 "test5.h5"
+#define FNAME5OUT "test5out.h5"
+#define FNAME6 "test6.h5"
+
+int make_testfiles(void);
+
+int write_dset( hid_t loc_id,
+ int rank,
+ hsize_t *dims,
+ const char *dset_name,
+ hid_t type_id,
+ void *buf );
+int write_attr(hid_t loc_id,
+ int rank,
+ hsize_t *dims,
+ const char *attr_name,
+ hid_t type_id,
+ void *buf);
+void write_attr_in(hid_t loc_id,
+ const char* dset_name, /* for saving reference to dataset*/
+ hid_t fid, /* for reference create */
+ int make_diffs /* flag to modify data buffers */);
+void write_dset_in(hid_t loc_id,
+ const char* dset_name, /* for saving reference to dataset*/
+ hid_t file_id,
+ int make_diffs /* flag to modify data buffers */);
+
+int make_filters(hid_t loc_id);
+int make_layout(hid_t loc_id);
+
+
+/*-------------------------------------------------------------------------
+ * tests utils
+ *-------------------------------------------------------------------------
+ */
+int make_dset(hid_t loc_id,
+ const char *name,
+ hid_t sid,
+ hid_t dcpl,
+ void *buf);
+
+int make_attr(hid_t loc_id,
+ int rank,
+ hsize_t *dims,
+ const char *attr_name,
+ hid_t type_id,
+ void *buf);
+
+
+
+/*-------------------------------------------------------------------------
+ * check SZIP parameters
+ *-------------------------------------------------------------------------
+ */
+
+typedef struct
+{
+ int compression_mode;
+ int options_mask;
+ unsigned bits_per_pixel;
+ unsigned pixels_per_block;
+ unsigned pixels_per_scanline;
+ hsize_t pixels;
+
+}szip_comp_t;
+
+/* for SZIP */
+#if !defined (NN_OPTION_MASK)
+#define NN_OPTION_MASK 32
+#endif
+#if !defined (RAW_OPTION_MASK)
+#define RAW_OPTION_MASK 128
+#endif
+#if !defined (MAX_BLOCKS_PER_SCANLINE)
+#define MAX_BLOCKS_PER_SCANLINE 128
+#endif
+#if !defined (MAX_PIXELS_PER_BLOCK)
+#define MAX_PIXELS_PER_BLOCK 32
+#endif
+#if !defined (MAX_PIXELS_PER_SCANLINE)
+#define MAX_PIXELS_PER_SCANLINE (MAX_BLOCKS_PER_SCANLINE)*(MAX_PIXELS_PER_BLOCK)
+#endif
+#if !defined (NN_MODE)
+#define NN_MODE 1
+#endif
+
+
+
+#endif /* H5REPACK_H__ */