summaryrefslogtreecommitdiffstats
path: root/tools/lib/h5tools.h
diff options
context:
space:
mode:
authorAllen Byrne <byrn@hdfgroup.org>2020-10-01 16:47:45 (GMT)
committerAllen Byrne <byrn@hdfgroup.org>2020-10-01 16:47:45 (GMT)
commit1ba1f2f3222cbe8df0bf601929a4bffd478d7e02 (patch)
treeae51dfc33cf40432dad25a5088767115a98f195e /tools/lib/h5tools.h
parent8eef7d295cc3dd134aef0a826f1de4287629996d (diff)
downloadhdf5-1ba1f2f3222cbe8df0bf601929a4bffd478d7e02.zip
hdf5-1ba1f2f3222cbe8df0bf601929a4bffd478d7e02.tar.gz
hdf5-1ba1f2f3222cbe8df0bf601929a4bffd478d7e02.tar.bz2
Source formatted
Diffstat (limited to 'tools/lib/h5tools.h')
-rw-r--r--tools/lib/h5tools.h353
1 files changed, 182 insertions, 171 deletions
diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h
index 0e830c0..cc94904 100644
--- a/tools/lib/h5tools.h
+++ b/tools/lib/h5tools.h
@@ -23,78 +23,88 @@
#include "hdf5.h"
#include "h5tools_error.h"
-#define ESCAPE_HTML 1
-#define OPT(X,S) ((X) ? (X) : (S))
-#define OPTIONAL_LINE_BREAK "\001" /* Special strings embedded in the output */
+#define ESCAPE_HTML 1
+#define OPT(X, S) ((X) ? (X) : (S))
+#define OPTIONAL_LINE_BREAK "\001" /* Special strings embedded in the output */
#define START_OF_DATA 0x0001
-#define END_OF_DATA 0x0002
+#define END_OF_DATA 0x0002
/* format for hsize_t */
-#define HSIZE_T_FORMAT "%" H5_PRINTF_LL_WIDTH "u"
+#define HSIZE_T_FORMAT "%" H5_PRINTF_LL_WIDTH "u"
-#define H5TOOLS_DUMP_MAX_RANK H5S_MAX_RANK
+#define H5TOOLS_DUMP_MAX_RANK H5S_MAX_RANK
/* Stream macros */
-#define FLUSHSTREAM(S) if(S != NULL) HDfflush(S)
-#define PRINTSTREAM(S, F, ...) if(S != NULL) HDfprintf(S, F, __VA_ARGS__)
-#define PRINTVALSTREAM(S, V) if(S != NULL) HDfprintf(S, V)
-#define PUTSTREAM(X,S) do { if(S != NULL) HDfputs(X, S); } while(0)
+#define FLUSHSTREAM(S) \
+ if (S != NULL) \
+ HDfflush(S)
+#define PRINTSTREAM(S, F, ...) \
+ if (S != NULL) \
+ HDfprintf(S, F, __VA_ARGS__)
+#define PRINTVALSTREAM(S, V) \
+ if (S != NULL) \
+ HDfprintf(S, V)
+#define PUTSTREAM(X, S) \
+ do { \
+ if (S != NULL) \
+ HDfputs(X, S); \
+ } while (0)
/*
* Strings for output - these were duplicated from the h5dump.h
* file in order to support region reference data display
*/
-#define ATTRIBUTE "ATTRIBUTE"
-#define BLOCK "BLOCK"
-#define SUPER_BLOCK "SUPER_BLOCK"
-#define COMPRESSION "COMPRESSION"
-#define CONCATENATOR "//"
-#define COMPLEX "COMPLEX"
-#define COUNT "COUNT"
-#define CSET "CSET"
-#define CTYPE "CTYPE"
-#define DATA "DATA"
-#define DATASPACE "DATASPACE"
-#define EXTERNAL "EXTERNAL"
-#define FILENO "FILENO"
-#define HARDLINK "HARDLINK"
-#define NLINK "NLINK"
-#define OBJID "OBJECTID"
-#define OBJNO "OBJNO"
-#define S_SCALAR "SCALAR"
-#define S_SIMPLE "SIMPLE"
-#define S_NULL "NULL"
-#define SOFTLINK "SOFTLINK"
-#define EXTLINK "EXTERNAL_LINK"
-#define UDLINK "USERDEFINED_LINK"
-#define START "START"
-#define STRIDE "STRIDE"
-#define STRSIZE "STRSIZE"
-#define STRPAD "STRPAD"
-#define SUBSET "SUBSET"
-#define FILTERS "FILTERS"
-#define DEFLATE "COMPRESSION DEFLATE"
-#define DEFLATE_LEVEL "LEVEL"
-#define SHUFFLE "PREPROCESSING SHUFFLE"
-#define FLETCHER32 "CHECKSUM FLETCHER32"
-#define SZIP "COMPRESSION SZIP"
-#define NBIT "COMPRESSION NBIT"
-#define SCALEOFFSET "COMPRESSION SCALEOFFSET"
-#define SCALEOFFSET_MINBIT "MIN BITS"
-#define STORAGE_LAYOUT "STORAGE_LAYOUT"
-#define CONTIGUOUS "CONTIGUOUS"
-#define COMPACT "COMPACT"
-#define CHUNKED "CHUNKED"
-#define EXTERNAL_FILE "EXTERNAL_FILE"
-#define FILLVALUE "FILLVALUE"
-#define FILE_CONTENTS "FILE_CONTENTS"
-#define PACKED_BITS "PACKED_BITS"
-#define PACKED_OFFSET "OFFSET"
-#define PACKED_LENGTH "LENGTH"
-#define REGION "REGION"
-
-#define BEGIN "{"
-#define END "}"
+#define ATTRIBUTE "ATTRIBUTE"
+#define BLOCK "BLOCK"
+#define SUPER_BLOCK "SUPER_BLOCK"
+#define COMPRESSION "COMPRESSION"
+#define CONCATENATOR "//"
+#define COMPLEX "COMPLEX"
+#define COUNT "COUNT"
+#define CSET "CSET"
+#define CTYPE "CTYPE"
+#define DATA "DATA"
+#define DATASPACE "DATASPACE"
+#define EXTERNAL "EXTERNAL"
+#define FILENO "FILENO"
+#define HARDLINK "HARDLINK"
+#define NLINK "NLINK"
+#define OBJID "OBJECTID"
+#define OBJNO "OBJNO"
+#define S_SCALAR "SCALAR"
+#define S_SIMPLE "SIMPLE"
+#define S_NULL "NULL"
+#define SOFTLINK "SOFTLINK"
+#define EXTLINK "EXTERNAL_LINK"
+#define UDLINK "USERDEFINED_LINK"
+#define START "START"
+#define STRIDE "STRIDE"
+#define STRSIZE "STRSIZE"
+#define STRPAD "STRPAD"
+#define SUBSET "SUBSET"
+#define FILTERS "FILTERS"
+#define DEFLATE "COMPRESSION DEFLATE"
+#define DEFLATE_LEVEL "LEVEL"
+#define SHUFFLE "PREPROCESSING SHUFFLE"
+#define FLETCHER32 "CHECKSUM FLETCHER32"
+#define SZIP "COMPRESSION SZIP"
+#define NBIT "COMPRESSION NBIT"
+#define SCALEOFFSET "COMPRESSION SCALEOFFSET"
+#define SCALEOFFSET_MINBIT "MIN BITS"
+#define STORAGE_LAYOUT "STORAGE_LAYOUT"
+#define CONTIGUOUS "CONTIGUOUS"
+#define COMPACT "COMPACT"
+#define CHUNKED "CHUNKED"
+#define EXTERNAL_FILE "EXTERNAL_FILE"
+#define FILLVALUE "FILLVALUE"
+#define FILE_CONTENTS "FILE_CONTENTS"
+#define PACKED_BITS "PACKED_BITS"
+#define PACKED_OFFSET "OFFSET"
+#define PACKED_LENGTH "LENGTH"
+#define REGION "REGION"
+
+#define BEGIN "{"
+#define END "}"
/*
* dump structure for output - this was duplicated from the h5dump.h
@@ -259,19 +269,19 @@ typedef struct h5tool_format_t {
* Numeric data is also subject to the formats for individual elements.
*/
hbool_t raw;
- const char *fmt_raw;
- const char *fmt_int;
- const char *fmt_uint;
- const char *fmt_schar;
- const char *fmt_uchar;
- const char *fmt_short;
- const char *fmt_ushort;
- const char *fmt_long;
- const char *fmt_ulong;
- const char *fmt_llong;
- const char *fmt_ullong;
- const char *fmt_double;
- const char *fmt_float;
+ const char *fmt_raw;
+ const char *fmt_int;
+ const char *fmt_uint;
+ const char *fmt_schar;
+ const char *fmt_uchar;
+ const char *fmt_short;
+ const char *fmt_ushort;
+ const char *fmt_long;
+ const char *fmt_ulong;
+ const char *fmt_llong;
+ const char *fmt_ullong;
+ const char *fmt_double;
+ const char *fmt_float;
int ascii;
int str_locale;
unsigned str_repeat;
@@ -292,9 +302,9 @@ typedef struct h5tool_format_t {
* linebreaks: a boolean value to determine if we want to break the line
* after each row of an array.
*/
- const char *arr_pre;
- const char *arr_sep;
- const char *arr_suf;
+ const char *arr_pre;
+ const char *arr_sep;
+ const char *arr_suf;
int arr_linebreak;
/*
@@ -319,12 +329,11 @@ typedef struct h5tool_format_t {
* end: a string to print after we reach the last element of
* each compound type. prints out before the suf.
*/
- const char *cmpd_name;
- const char *cmpd_sep;
- const char *cmpd_pre;
- const char *cmpd_suf;
- const char *cmpd_end;
-
+ const char *cmpd_name;
+ const char *cmpd_sep;
+ const char *cmpd_pre;
+ const char *cmpd_suf;
+ const char *cmpd_end;
/*
* Fields associated with vlen data types.
@@ -343,10 +352,10 @@ typedef struct h5tool_format_t {
* end: a string to print after we reach the last element of
* each compound type. prints out before the suf.
*/
- const char *vlen_sep;
- const char *vlen_pre;
- const char *vlen_suf;
- const char *vlen_end;
+ const char *vlen_sep;
+ const char *vlen_pre;
+ const char *vlen_suf;
+ const char *vlen_end;
/*
* Fields associated with the individual elements.
@@ -362,9 +371,9 @@ typedef struct h5tool_format_t {
* are followed on the same line by another element. The
* default is a single space.
*/
- const char *elmt_fmt;
- const char *elmt_suf1;
- const char *elmt_suf2;
+ const char *elmt_fmt;
+ const char *elmt_suf1;
+ const char *elmt_suf2;
/*
* Fields associated with the index values printed at the left edge of
@@ -383,9 +392,9 @@ typedef struct h5tool_format_t {
* printf(3c) format which should include a format for a
* character string. The default is "%s".
*/
- const char *idx_n_fmt; /*index number format */
- const char *idx_sep; /*separator between numbers */
- const char *idx_fmt; /*entire index format */
+ const char *idx_n_fmt; /*index number format */
+ const char *idx_sep; /*separator between numbers */
+ const char *idx_fmt; /*entire index format */
/*
* Fields associated with entire lines.
@@ -441,15 +450,15 @@ typedef struct h5tool_format_t {
* indentlevel: a string that shows how far to indent if extra spacing
* is needed. dumper uses it.
*/
- unsigned line_ncols; /*columns of output */
- size_t line_per_line; /*max elements per line */
- const char *line_pre; /*prefix at front of each line */
- const char *line_1st; /*alternate pre. on first line */
- const char *line_cont; /*alternate pre. on continuation*/
- const char *line_suf; /*string to append to each line */
- const char *line_sep; /*separates lines */
- int line_multi_new; /*split multi-line outputs? */
- const char *line_indent; /*for extra identation if we need it*/
+ unsigned line_ncols; /*columns of output */
+ size_t line_per_line; /*max elements per line */
+ const char *line_pre; /*prefix at front of each line */
+ const char *line_1st; /*alternate pre. on first line */
+ const char *line_cont; /*alternate pre. on continuation*/
+ const char *line_suf; /*string to append to each line */
+ const char *line_sep; /*separates lines */
+ int line_multi_new; /*split multi-line outputs? */
+ const char *line_indent; /*for extra identation if we need it*/
/*used to skip the first set of checks for line length*/
int skip_first;
@@ -479,7 +488,7 @@ typedef struct h5tool_format_t {
} h5tool_format_t;
typedef struct subset_d {
- hsize_t *data;
+ hsize_t * data;
unsigned int len;
} subset_d;
@@ -492,24 +501,24 @@ struct subset_t {
};
typedef struct h5tools_context_t {
- size_t cur_column; /* current column for output */
- size_t cur_elmt; /* current element/output line */
- int need_prefix; /* is line prefix needed? */
+ size_t cur_column; /* current column for output */
+ size_t cur_elmt; /* current element/output line */
+ int need_prefix; /* is line prefix needed? */
unsigned ndims; /* dimensionality */
- hsize_t p_min_idx[H5S_MAX_RANK]; /* min selected index */
- hsize_t p_max_idx[H5S_MAX_RANK]; /* max selected index */
- int prev_multiline; /* was prev datum multiline? */
- size_t prev_prefix_len; /* length of previous prefix */
- int continuation; /* continuation of previous data?*/
- hsize_t size_last_dim; /* the size of the last dimension, needed so we can break after each row */
- unsigned indent_level; /* the number of times we need some extra indentation */
- unsigned default_indent_level; /* this is used when the indent level gets changed */
- hsize_t acc[H5S_MAX_RANK]; /* accumulator position */
- hsize_t pos[H5S_MAX_RANK]; /* matrix position */
- hsize_t sm_pos; /* current stripmine element position */
- struct subset_t *sset; /* subsetting parameters */
- int display_index; /* */
- int display_char; /* */
+ hsize_t p_min_idx[H5S_MAX_RANK]; /* min selected index */
+ hsize_t p_max_idx[H5S_MAX_RANK]; /* max selected index */
+ int prev_multiline; /* was prev datum multiline? */
+ size_t prev_prefix_len; /* length of previous prefix */
+ int continuation; /* continuation of previous data?*/
+ hsize_t size_last_dim; /* the size of the last dimension, needed so we can break after each row */
+ unsigned indent_level; /* the number of times we need some extra indentation */
+ unsigned default_indent_level; /* this is used when the indent level gets changed */
+ hsize_t acc[H5S_MAX_RANK]; /* accumulator position */
+ hsize_t pos[H5S_MAX_RANK]; /* matrix position */
+ hsize_t sm_pos; /* current stripmine element position */
+ struct subset_t *sset; /* subsetting parameters */
+ int display_index; /* */
+ int display_char; /* */
} h5tools_context_t;
/* The following include, h5tools_str.h, must be after the
@@ -518,43 +527,43 @@ typedef struct h5tools_context_t {
#include "h5tools_str.h"
-H5TOOLS_DLLVAR h5tool_format_t h5tools_dataformat;
+H5TOOLS_DLLVAR h5tool_format_t h5tools_dataformat;
H5TOOLS_DLLVAR const h5tools_dump_header_t h5tools_standardformat;
-H5TOOLS_DLLVAR const h5tools_dump_header_t* h5tools_dump_header_format;
+H5TOOLS_DLLVAR const h5tools_dump_header_t *h5tools_dump_header_format;
#ifdef __cplusplus
extern "C" {
#endif
-H5TOOLS_DLLVAR unsigned packed_bits_num; /* number of packed bits to display */
-H5TOOLS_DLLVAR unsigned packed_data_offset; /* offset of packed bits to display */
-H5TOOLS_DLLVAR unsigned packed_data_length; /* length of packed bits to display */
-H5TOOLS_DLLVAR unsigned long long packed_data_mask; /* mask in which packed bits to display */
-H5TOOLS_DLLVAR FILE *rawattrstream; /* output stream for raw attribute data */
-H5TOOLS_DLLVAR FILE *rawdatastream; /* output stream for raw data */
-H5TOOLS_DLLVAR FILE *rawinstream; /* input stream for raw input */
-H5TOOLS_DLLVAR FILE *rawoutstream; /* output stream for raw output */
-H5TOOLS_DLLVAR FILE *rawerrorstream; /* output stream for raw error */
-H5TOOLS_DLLVAR int bin_output; /* binary output */
-H5TOOLS_DLLVAR int bin_form; /* binary form */
-H5TOOLS_DLLVAR int region_output; /* region output */
-H5TOOLS_DLLVAR int oid_output; /* oid output */
-H5TOOLS_DLLVAR int data_output; /* data output */
-H5TOOLS_DLLVAR int attr_data_output; /* attribute data output */
+H5TOOLS_DLLVAR unsigned packed_bits_num; /* number of packed bits to display */
+H5TOOLS_DLLVAR unsigned packed_data_offset; /* offset of packed bits to display */
+H5TOOLS_DLLVAR unsigned packed_data_length; /* length of packed bits to display */
+H5TOOLS_DLLVAR unsigned long long packed_data_mask; /* mask in which packed bits to display */
+H5TOOLS_DLLVAR FILE *rawattrstream; /* output stream for raw attribute data */
+H5TOOLS_DLLVAR FILE *rawdatastream; /* output stream for raw data */
+H5TOOLS_DLLVAR FILE *rawinstream; /* input stream for raw input */
+H5TOOLS_DLLVAR FILE *rawoutstream; /* output stream for raw output */
+H5TOOLS_DLLVAR FILE *rawerrorstream; /* output stream for raw error */
+H5TOOLS_DLLVAR int bin_output; /* binary output */
+H5TOOLS_DLLVAR int bin_form; /* binary form */
+H5TOOLS_DLLVAR int region_output; /* region output */
+H5TOOLS_DLLVAR int oid_output; /* oid output */
+H5TOOLS_DLLVAR int data_output; /* data output */
+H5TOOLS_DLLVAR int attr_data_output; /* attribute data output */
/* sort parameters */
-H5TOOLS_DLLVAR H5_index_t sort_by; /* sort_by [creation_order | name] */
-H5TOOLS_DLLVAR H5_iter_order_t sort_order; /* sort_order [ascending | descending] */
+H5TOOLS_DLLVAR H5_index_t sort_by; /* sort_by [creation_order | name] */
+H5TOOLS_DLLVAR H5_iter_order_t sort_order; /* sort_order [ascending | descending] */
/* things to display or which are set via command line parameters */
-H5TOOLS_DLLVAR int enable_error_stack; /* re-enable error stack; disable=0 enable=1 */
+H5TOOLS_DLLVAR int enable_error_stack; /* re-enable error stack; disable=0 enable=1 */
/* Strings for output */
-#define H5_TOOLS_GROUP "GROUP"
-#define H5_TOOLS_DATASET "DATASET"
-#define H5_TOOLS_DATATYPE "DATATYPE"
-#define H5_TOOLS_ATTRIBUTE "ATTRIBUTE"
-#define H5_TOOLS_UNKNOWN "UNKNOWN"
+#define H5_TOOLS_GROUP "GROUP"
+#define H5_TOOLS_DATASET "DATASET"
+#define H5_TOOLS_DATATYPE "DATATYPE"
+#define H5_TOOLS_ATTRIBUTE "ATTRIBUTE"
+#define H5_TOOLS_UNKNOWN "UNKNOWN"
/* Definitions of useful routines */
H5TOOLS_DLL void h5tools_init(void);
@@ -564,8 +573,8 @@ H5TOOLS_DLL int h5tools_set_attr_output_file(const char *fname, int is_bin);
H5TOOLS_DLL int h5tools_set_input_file(const char *fname, int is_bin);
H5TOOLS_DLL int h5tools_set_output_file(const char *fname, int is_bin);
H5TOOLS_DLL int h5tools_set_error_file(const char *fname, int is_bin);
-H5TOOLS_DLL hid_t h5tools_fopen(const char *fname, unsigned flags, hid_t fapl,
- const char *driver, char *drivername, size_t drivername_len);
+H5TOOLS_DLL hid_t h5tools_fopen(const char *fname, unsigned flags, hid_t fapl, const char *driver,
+ char *drivername, size_t drivername_len);
H5TOOLS_DLL hid_t h5tools_get_little_endian_type(hid_t type);
H5TOOLS_DLL hid_t h5tools_get_big_endian_type(hid_t type);
H5TOOLS_DLL htri_t h5tools_detect_vlen(hid_t tid);
@@ -573,38 +582,40 @@ H5TOOLS_DLL htri_t h5tools_detect_vlen_str(hid_t tid);
H5TOOLS_DLL hbool_t h5tools_is_obj_same(hid_t loc_id1, const char *name1, hid_t loc_id2, const char *name2);
H5TOOLS_DLL void init_acc_pos(h5tools_context_t *ctx, hsize_t *dims);
H5TOOLS_DLL hbool_t h5tools_is_zero(const void *_mem, size_t size);
-H5TOOLS_DLL int h5tools_canreadf(const char* name, hid_t dcpl_id);
+H5TOOLS_DLL int h5tools_canreadf(const char *name, hid_t dcpl_id);
H5TOOLS_DLL int h5tools_can_encode(H5Z_filter_t filtn);
-H5TOOLS_DLL void h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hsize_t elmtno, int secnum);
-H5TOOLS_DLL void h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, hsize_t elmtno, hsize_t *ptdata, int secnum);
+H5TOOLS_DLL void h5tools_simple_prefix(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
+ hsize_t elmtno, int secnum);
+H5TOOLS_DLL void h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info,
+ h5tools_context_t *ctx, hsize_t elmtno, hsize_t *ptdata,
+ int secnum);
H5TOOLS_DLL int render_bin_output(FILE *stream, hid_t container, hid_t tid, void *_mem, hsize_t nelmts);
-H5TOOLS_DLL int render_bin_output_region_data_blocks(hid_t region_id, FILE *stream,
- hid_t container, unsigned ndims, hid_t type_id, hsize_t nblocks, hsize_t *ptdata);
-H5TOOLS_DLL hbool_t render_bin_output_region_blocks(hid_t region_space, hid_t region_id,
- FILE *stream, hid_t container);
-H5TOOLS_DLL int render_bin_output_region_data_points(hid_t region_space, hid_t region_id,
- FILE* stream, hid_t container, unsigned ndims, hid_t type_id, hsize_t npoints);
-H5TOOLS_DLL hbool_t render_bin_output_region_points(hid_t region_space, hid_t region_id,
- FILE *stream, hid_t container);
-
-H5TOOLS_DLL hbool_t h5tools_render_element(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, h5tools_str_t *buffer, hsize_t *curr_pos,
- size_t ncols, hsize_t local_elmt_counter, hsize_t elmt_counter);
+H5TOOLS_DLL int render_bin_output_region_data_blocks(hid_t region_id, FILE *stream, hid_t container,
+ unsigned ndims, hid_t type_id, hsize_t nblocks,
+ hsize_t *ptdata);
+H5TOOLS_DLL hbool_t render_bin_output_region_blocks(hid_t region_space, hid_t region_id, FILE *stream,
+ hid_t container);
+H5TOOLS_DLL int render_bin_output_region_data_points(hid_t region_space, hid_t region_id, FILE *stream,
+ hid_t container, unsigned ndims, hid_t type_id,
+ hsize_t npoints);
+H5TOOLS_DLL hbool_t render_bin_output_region_points(hid_t region_space, hid_t region_id, FILE *stream,
+ hid_t container);
+
+H5TOOLS_DLL hbool_t h5tools_render_element(FILE *stream, const h5tool_format_t *info, h5tools_context_t *ctx,
+ h5tools_str_t *buffer, hsize_t *curr_pos, size_t ncols,
+ hsize_t local_elmt_counter, hsize_t elmt_counter);
H5TOOLS_DLL hbool_t h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
- h5tools_context_t *ctx, /*in,out*/
- h5tools_str_t *buffer, /*string into which to render */
- hsize_t *curr_pos, /*total data element position*/
- size_t ncols, hsize_t *ptdata,
- hsize_t local_elmt_counter, /*element counter*/
- hsize_t elmt_counter);
+ h5tools_context_t *ctx, /*in,out*/
+ h5tools_str_t * buffer, /*string into which to render */
+ hsize_t * curr_pos, /*total data element position*/
+ size_t ncols, hsize_t *ptdata,
+ hsize_t local_elmt_counter, /*element counter*/
+ hsize_t elmt_counter);
#ifdef __cplusplus
}
#endif
#endif /* H5TOOLS_H__ */
-