diff options
author | Raymond Lu <songyulu@hdfgroup.org> | 2013-03-13 19:35:26 (GMT) |
---|---|---|
committer | Raymond Lu <songyulu@hdfgroup.org> | 2013-03-13 19:35:26 (GMT) |
commit | 55822485c64197a6c2c4a623824fcdcd10a57d31 (patch) | |
tree | 1b790e029a613c3e87a4640f5f94406b1751ccd1 /test/plugin_lib/dynlib1.c | |
parent | d9baac8b0b857d82dd0e520a624d6396814417a9 (diff) | |
download | hdf5-55822485c64197a6c2c4a623824fcdcd10a57d31.zip hdf5-55822485c64197a6c2c4a623824fcdcd10a57d31.tar.gz hdf5-55822485c64197a6c2c4a623824fcdcd10a57d31.tar.bz2 |
[svn-r23346] First commit for DESY project. It has the basic functionality of loading dynamically filter libraries and a simple test for it.
Tested on koala.
Diffstat (limited to 'test/plugin_lib/dynlib1.c')
-rw-r--r-- | test/plugin_lib/dynlib1.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/plugin_lib/dynlib1.c b/test/plugin_lib/dynlib1.c new file mode 100644 index 0000000..619fe66 --- /dev/null +++ b/test/plugin_lib/dynlib1.c @@ -0,0 +1,73 @@ +#include "dynlib1.h" + +/* This message derives from H5Z */ +const H5Z_class2_t H5Z_DYNLIB1[1] = {{ + H5Z_CLASS_T_VERS, /* H5Z_class_t version */ + H5Z_FILTER_DYNLIB1, /* Filter id number */ + 1, 1, /* Encoding and decoding enabled */ + "dynlib1", /* Filter name for debugging */ + NULL, /* The "can apply" callback */ + NULL, /* The "set local" callback */ + (H5Z_func_t)H5Z_filter_dynlib1, /* The actual filter function */ +}}; + +const H5PL_type_t H5PL_get_plugin_type(void) {return H5PL_TYPE_FILTER;} +const int H5PL_get_plugin_version(void) {return (int)FILTER_DYNLIB1_VERS;} +const char* H5PL_get_plugin_name(void) {return "dynlib1";} +const H5Z_class2_t* H5PL_get_plugin_info(void) {return H5Z_DYNLIB1;} + +/*------------------------------------------------------------------------- + * Function: H5Z_filter_dynlib1 + * + * Purpose: A dynlib1 compression method that doesn't do anything. + * + * Return: Success: Data chunk size + * + * Failure: 0 + * + * Programmer: Robb Matzke + * Tuesday, April 21, 1998 + * + *------------------------------------------------------------------------- + */ +static size_t +H5Z_filter_dynlib1(unsigned int flags, size_t cd_nelmts, + const unsigned int *cd_values, size_t nbytes, + size_t *buf_size, void **buf) +{ + int *int_ptr=(int *)*buf; /* Pointer to the data values */ + size_t buf_left=*buf_size; /* Amount of data buffer left to process */ + int add_on = 0; + +/*fprintf(stderr, "cd_nelmts=%d, cd_values=%d\n", cd_nelmts, cd_values[0]);*/ + /* Check for the correct number of parameters */ + if(cd_nelmts==0) + return(0); + + /* Check that permanent parameters are set correctly */ + if(cd_values[0]<0 || cd_values[0]>9) + return(0); + + add_on = cd_values[0]; + +/*fprintf(stderr, "add_on=%d\n", add_on);*/ + + if(flags & H5Z_FLAG_REVERSE) { /*read*/ + /* Substract the "add on" value to all the data values */ + while(buf_left>0) { + *int_ptr++ -= add_on; + buf_left -= sizeof(int); + } /* end while */ + } /* end if */ + else { /*write*/ + /* Add the "add on" value to all the data values */ + while(buf_left>0) { + *int_ptr++ += add_on; + buf_left -= sizeof(int); + } /* end while */ + } /* end else */ + +/*fprintf(stderr, "nbytes=%d\n", nbytes);*/ + + return nbytes; +} |