diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/test/h5diff/dynlib_diff.c | 57 | ||||
-rw-r--r-- | tools/test/h5diff/testfiles/h5diff_ud.txt | 4 | ||||
-rw-r--r-- | tools/test/h5diff/testfiles/h5diff_udfail.txt | 6 | ||||
-rw-r--r-- | tools/test/h5diff/testfiles/tudfilter.h5 | bin | 4816 -> 4816 bytes | |||
-rw-r--r-- | tools/test/h5diff/testfiles/tudfilter2.h5 | bin | 4816 -> 4816 bytes | |||
-rw-r--r-- | tools/test/h5dump/dynlib_dump.c | 57 | ||||
-rw-r--r-- | tools/test/h5dump/h5dumpgentest.c | 54 | ||||
-rw-r--r-- | tools/test/h5ls/CMakeTests.cmake | 2 | ||||
-rw-r--r-- | tools/test/h5ls/dynlib_ls.c | 57 | ||||
-rw-r--r-- | tools/test/h5ls/h5ls_plugin.sh.in | 2 | ||||
-rw-r--r-- | tools/testfiles/tudfilter.ddl | 2 | ||||
-rw-r--r-- | tools/testfiles/tudfilter.h5 | bin | 4816 -> 4816 bytes | |||
-rw-r--r-- | tools/testfiles/tudfilter.ls | 9 |
13 files changed, 124 insertions, 126 deletions
diff --git a/tools/test/h5diff/dynlib_diff.c b/tools/test/h5diff/dynlib_diff.c index 0d8be2b..d80777d 100644 --- a/tools/test/h5diff/dynlib_diff.c +++ b/tools/test/h5diff/dynlib_diff.c @@ -12,59 +12,52 @@ * to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* - * Programmer: Raymond Lu - * 13 February 2013 - * - * Purpose: Tests the plugin module (H5PL) + * Purpose: Tests the plugin module (H5PL) */ #include <stdlib.h> #include <stdio.h> #include "H5PLextern.h" -#define H5Z_FILTER_DYNLIB2 258 +#define H5Z_FILTER_DYNLIBUD 300 #define MULTIPLIER 3 -static size_t H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +static size_t H5Z_filter_dynlibud(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf); /* This message derives from H5Z */ -const H5Z_class2_t H5Z_DYNLIB2[1] = {{ +const H5Z_class2_t H5Z_DYNLIBUD[1] = {{ H5Z_CLASS_T_VERS, /* H5Z_class_t version */ - H5Z_FILTER_DYNLIB2, /* Filter id number */ + H5Z_FILTER_DYNLIBUD, /* Filter id number */ 1, 1, /* Encoding and decoding enabled */ - "dynlib2", /* Filter name for debugging */ + "dynlibud", /* Filter name for debugging */ NULL, /* The "can apply" callback */ NULL, /* The "set local" callback */ - (H5Z_func_t)H5Z_filter_dynlib2, /* The actual filter function */ + (H5Z_func_t)H5Z_filter_dynlibud, /* The actual filter function */ }}; H5PL_type_t H5PLget_plugin_type(void) {return H5PL_TYPE_FILTER;} -const void *H5PLget_plugin_info(void) {return H5Z_DYNLIB2;} +const void *H5PLget_plugin_info(void) {return H5Z_DYNLIBUD;} /*------------------------------------------------------------------------- - * Function: H5Z_filter_dynlib2 + * Function: H5Z_filter_dynlibud * - * Purpose: A dynlib2 filter method that multiplies the original value + * Purpose: A dynlib2 filter method that multiplies the original value * during write and divide the original value during read. It - * will be built as a shared library. plugin.c test will load - * and use this filter library. - * - * Return: Success: Data chunk size - * - * Failure: 0 + * will be built as a shared library. plugin.c test will load + * and use this filter library. * - * Programmer: Raymond Lu - * 29 March 2013 + * Return: Success: Data chunk size * + * Failure: 0 *------------------------------------------------------------------------- */ static size_t -H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +H5Z_filter_dynlibud(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 */ + char *int_ptr = (char *)*buf; /* Pointer to the data values */ size_t buf_left = *buf_size; /* Amount of data buffer left to process */ /* Check for the correct number of parameters */ @@ -75,20 +68,24 @@ H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, cd_values = cd_values; if(flags & H5Z_FLAG_REVERSE) { /*read*/ - /* Divide the original value with MULTIPLIER */ + /* Subtract the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ /= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp - MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end if */ else { /*write*/ - /* Multiply the original value with MULTIPLIER */ + /* Add the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ *= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp + MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end else */ return nbytes; -} /* end H5Z_filter_dynlib2() */ +} /* end H5Z_filter_dynlibud() */ diff --git a/tools/test/h5diff/testfiles/h5diff_ud.txt b/tools/test/h5diff/testfiles/h5diff_ud.txt index 7c9bb5e..ddda3ff 100644 --- a/tools/test/h5diff/testfiles/h5diff_ud.txt +++ b/tools/test/h5diff/testfiles/h5diff_ud.txt @@ -2,10 +2,10 @@ file1 file2 --------------------------------------- x x / - x x /dynlib2 + x x /dynlibud group : </> and </> 0 differences found -dataset: </dynlib2> and </dynlib2> +dataset: </dynlibud> and </dynlibud> 0 differences found EXIT CODE: 0 diff --git a/tools/test/h5diff/testfiles/h5diff_udfail.txt b/tools/test/h5diff/testfiles/h5diff_udfail.txt index 7eb1155..c154c6b 100644 --- a/tools/test/h5diff/testfiles/h5diff_udfail.txt +++ b/tools/test/h5diff/testfiles/h5diff_udfail.txt @@ -2,11 +2,11 @@ file1 file2 --------------------------------------- x x / - x x /dynlib2 + x x /dynlibud group : </> and </> 0 differences found -dataset: </dynlib2> and </dynlib2> +dataset: </dynlibud> and </dynlibud> 0 differences found -warning: dataset </dynlib2> cannot be read, user defined filter is not available +warning: dataset </dynlibud> cannot be read, user defined filter is not available EXIT CODE: 2 diff --git a/tools/test/h5diff/testfiles/tudfilter.h5 b/tools/test/h5diff/testfiles/tudfilter.h5 Binary files differindex eaf6a43..081b000 100644 --- a/tools/test/h5diff/testfiles/tudfilter.h5 +++ b/tools/test/h5diff/testfiles/tudfilter.h5 diff --git a/tools/test/h5diff/testfiles/tudfilter2.h5 b/tools/test/h5diff/testfiles/tudfilter2.h5 Binary files differindex eaf6a43..081b000 100644 --- a/tools/test/h5diff/testfiles/tudfilter2.h5 +++ b/tools/test/h5diff/testfiles/tudfilter2.h5 diff --git a/tools/test/h5dump/dynlib_dump.c b/tools/test/h5dump/dynlib_dump.c index 0d8be2b..d80777d 100644 --- a/tools/test/h5dump/dynlib_dump.c +++ b/tools/test/h5dump/dynlib_dump.c @@ -12,59 +12,52 @@ * to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* - * Programmer: Raymond Lu - * 13 February 2013 - * - * Purpose: Tests the plugin module (H5PL) + * Purpose: Tests the plugin module (H5PL) */ #include <stdlib.h> #include <stdio.h> #include "H5PLextern.h" -#define H5Z_FILTER_DYNLIB2 258 +#define H5Z_FILTER_DYNLIBUD 300 #define MULTIPLIER 3 -static size_t H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +static size_t H5Z_filter_dynlibud(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf); /* This message derives from H5Z */ -const H5Z_class2_t H5Z_DYNLIB2[1] = {{ +const H5Z_class2_t H5Z_DYNLIBUD[1] = {{ H5Z_CLASS_T_VERS, /* H5Z_class_t version */ - H5Z_FILTER_DYNLIB2, /* Filter id number */ + H5Z_FILTER_DYNLIBUD, /* Filter id number */ 1, 1, /* Encoding and decoding enabled */ - "dynlib2", /* Filter name for debugging */ + "dynlibud", /* Filter name for debugging */ NULL, /* The "can apply" callback */ NULL, /* The "set local" callback */ - (H5Z_func_t)H5Z_filter_dynlib2, /* The actual filter function */ + (H5Z_func_t)H5Z_filter_dynlibud, /* The actual filter function */ }}; H5PL_type_t H5PLget_plugin_type(void) {return H5PL_TYPE_FILTER;} -const void *H5PLget_plugin_info(void) {return H5Z_DYNLIB2;} +const void *H5PLget_plugin_info(void) {return H5Z_DYNLIBUD;} /*------------------------------------------------------------------------- - * Function: H5Z_filter_dynlib2 + * Function: H5Z_filter_dynlibud * - * Purpose: A dynlib2 filter method that multiplies the original value + * Purpose: A dynlib2 filter method that multiplies the original value * during write and divide the original value during read. It - * will be built as a shared library. plugin.c test will load - * and use this filter library. - * - * Return: Success: Data chunk size - * - * Failure: 0 + * will be built as a shared library. plugin.c test will load + * and use this filter library. * - * Programmer: Raymond Lu - * 29 March 2013 + * Return: Success: Data chunk size * + * Failure: 0 *------------------------------------------------------------------------- */ static size_t -H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +H5Z_filter_dynlibud(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 */ + char *int_ptr = (char *)*buf; /* Pointer to the data values */ size_t buf_left = *buf_size; /* Amount of data buffer left to process */ /* Check for the correct number of parameters */ @@ -75,20 +68,24 @@ H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, cd_values = cd_values; if(flags & H5Z_FLAG_REVERSE) { /*read*/ - /* Divide the original value with MULTIPLIER */ + /* Subtract the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ /= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp - MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end if */ else { /*write*/ - /* Multiply the original value with MULTIPLIER */ + /* Add the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ *= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp + MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end else */ return nbytes; -} /* end H5Z_filter_dynlib2() */ +} /* end H5Z_filter_dynlibud() */ diff --git a/tools/test/h5dump/h5dumpgentest.c b/tools/test/h5dump/h5dumpgentest.c index 7df9cbb..0cb9841 100644 --- a/tools/test/h5dump/h5dumpgentest.c +++ b/tools/test/h5dump/h5dumpgentest.c @@ -154,21 +154,21 @@ const H5Z_class2_t H5Z_MYFILTER[1] = {{ myfilter, /* The actual filter function */ }}; -#define H5Z_FILTER_DYNLIB2 258 +#define H5Z_FILTER_DYNLIBUD 300 #define MULTIPLIER 3 -static size_t H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +static size_t H5Z_filter_dynlibud(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf); /* This message derives from H5Z */ -const H5Z_class2_t H5Z_DYNLIB2[1] = {{ +const H5Z_class2_t H5Z_DYNLIBUD[1] = {{ H5Z_CLASS_T_VERS, /* H5Z_class_t version */ - H5Z_FILTER_DYNLIB2, /* Filter id number */ + H5Z_FILTER_DYNLIBUD, /* Filter id number */ 1, 1, /* Encoding and decoding enabled */ - "dynlib2", /* Filter name for debugging */ + "dynlibud", /* Filter name for debugging */ NULL, /* The "can apply" callback */ NULL, /* The "set local" callback */ - (H5Z_func_t)H5Z_filter_dynlib2, /* The actual filter function */ + (H5Z_func_t)H5Z_filter_dynlibud, /* The actual filter function */ }}; @@ -10314,6 +10314,7 @@ static void gent_udfilter(void) { hid_t fid; /* file id */ hid_t dcpl; /* dataset creation property list */ + hid_t dsid; /* dataset ID */ hid_t sid; /* dataspace ID */ hid_t tid; /* datatype ID */ @@ -10344,13 +10345,22 @@ static void gent_udfilter(void) ret = H5Pset_chunk(dcpl, SPACE2_RANK, chunk_dims); HDassert(ret >= 0); - ret = H5Zregister (H5Z_DYNLIB2); + ret = H5Zregister (H5Z_DYNLIBUD); HDassert(ret >= 0); - ret = H5Pset_filter (dcpl, H5Z_FILTER_DYNLIB2, H5Z_FLAG_MANDATORY, 0, NULL); + ret = H5Pset_filter (dcpl, H5Z_FILTER_DYNLIBUD, H5Z_FLAG_MANDATORY, 0, NULL); HDassert(ret >= 0); - ret=make_dset(fid, "dynlib2", sid, H5T_NATIVE_INT, dcpl, buf1); + /* create the dataset */ + dsid = H5Dcreate2(fid, "dynlibud", H5T_STD_I32LE, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT); + HDassert(dsid >= 0); + + /* write */ + ret = H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1); + HDassert(ret >= 0); + + /* close */ + ret = H5Dclose(dsid); HDassert(ret >= 0); /* remove the filters from the dcpl */ @@ -10372,9 +10382,9 @@ static void gent_udfilter(void) } /*------------------------------------------------------------------------- - * Function: H5Z_filter_dynlib2 + * Function: H5Z_filter_dynlibud * - * Purpose: A dynlib2 filter method that multiplies the original value + * Purpose: A dynlibud filter method that multiplies the original value * during write and divide the original value during read. It * will be built as a shared library. tools tests will load * and use this filter as a plugin library. @@ -10385,11 +10395,11 @@ static void gent_udfilter(void) *------------------------------------------------------------------------- */ static size_t -H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +H5Z_filter_dynlibud(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 */ + char *int_ptr = (char *)*buf; /* Pointer to the data values */ size_t buf_left = *buf_size; /* Amount of data buffer left to process */ /* Check for the correct number of parameters */ @@ -10400,22 +10410,26 @@ H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, cd_values = cd_values; if(flags & H5Z_FLAG_REVERSE) { /*read*/ - /* Divide the original value with MULTIPLIER */ + /* Subtract the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ /= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp - MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end if */ else { /*write*/ - /* Multiply the original value with MULTIPLIER */ + /* Add the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ *= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp + MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end else */ return nbytes; -} /* end H5Z_filter_dynlib2() */ +} /* end H5Z_filter_dynlibud() */ /*------------------------------------------------------------------------- * Function: main diff --git a/tools/test/h5ls/CMakeTests.cmake b/tools/test/h5ls/CMakeTests.cmake index fc15986..7b68ab1 100644 --- a/tools/test/h5ls/CMakeTests.cmake +++ b/tools/test/h5ls/CMakeTests.cmake @@ -443,4 +443,4 @@ ############################################################################## ### P L U G I N T E S T S ############################################################################## -ADD_H5_UD_TEST (h5ls_plugin_test 0 tudfilter -w80 -v -d tudfilter.h5) +ADD_H5_UD_TEST (h5ls_plugin_test 0 tudfilter -w80 -d tudfilter.h5) diff --git a/tools/test/h5ls/dynlib_ls.c b/tools/test/h5ls/dynlib_ls.c index 0d8be2b..d80777d 100644 --- a/tools/test/h5ls/dynlib_ls.c +++ b/tools/test/h5ls/dynlib_ls.c @@ -12,59 +12,52 @@ * to either file, you may request a copy from help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* - * Programmer: Raymond Lu - * 13 February 2013 - * - * Purpose: Tests the plugin module (H5PL) + * Purpose: Tests the plugin module (H5PL) */ #include <stdlib.h> #include <stdio.h> #include "H5PLextern.h" -#define H5Z_FILTER_DYNLIB2 258 +#define H5Z_FILTER_DYNLIBUD 300 #define MULTIPLIER 3 -static size_t H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +static size_t H5Z_filter_dynlibud(unsigned int flags, size_t cd_nelmts, const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf); /* This message derives from H5Z */ -const H5Z_class2_t H5Z_DYNLIB2[1] = {{ +const H5Z_class2_t H5Z_DYNLIBUD[1] = {{ H5Z_CLASS_T_VERS, /* H5Z_class_t version */ - H5Z_FILTER_DYNLIB2, /* Filter id number */ + H5Z_FILTER_DYNLIBUD, /* Filter id number */ 1, 1, /* Encoding and decoding enabled */ - "dynlib2", /* Filter name for debugging */ + "dynlibud", /* Filter name for debugging */ NULL, /* The "can apply" callback */ NULL, /* The "set local" callback */ - (H5Z_func_t)H5Z_filter_dynlib2, /* The actual filter function */ + (H5Z_func_t)H5Z_filter_dynlibud, /* The actual filter function */ }}; H5PL_type_t H5PLget_plugin_type(void) {return H5PL_TYPE_FILTER;} -const void *H5PLget_plugin_info(void) {return H5Z_DYNLIB2;} +const void *H5PLget_plugin_info(void) {return H5Z_DYNLIBUD;} /*------------------------------------------------------------------------- - * Function: H5Z_filter_dynlib2 + * Function: H5Z_filter_dynlibud * - * Purpose: A dynlib2 filter method that multiplies the original value + * Purpose: A dynlib2 filter method that multiplies the original value * during write and divide the original value during read. It - * will be built as a shared library. plugin.c test will load - * and use this filter library. - * - * Return: Success: Data chunk size - * - * Failure: 0 + * will be built as a shared library. plugin.c test will load + * and use this filter library. * - * Programmer: Raymond Lu - * 29 March 2013 + * Return: Success: Data chunk size * + * Failure: 0 *------------------------------------------------------------------------- */ static size_t -H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, +H5Z_filter_dynlibud(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 */ + char *int_ptr = (char *)*buf; /* Pointer to the data values */ size_t buf_left = *buf_size; /* Amount of data buffer left to process */ /* Check for the correct number of parameters */ @@ -75,20 +68,24 @@ H5Z_filter_dynlib2(unsigned int flags, size_t cd_nelmts, cd_values = cd_values; if(flags & H5Z_FLAG_REVERSE) { /*read*/ - /* Divide the original value with MULTIPLIER */ + /* Subtract the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ /= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp - MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end if */ else { /*write*/ - /* Multiply the original value with MULTIPLIER */ + /* Add the original value with MULTIPLIER */ while(buf_left > 0) { - *int_ptr++ *= MULTIPLIER; - buf_left -= sizeof(int); + char temp = *int_ptr; + *int_ptr = temp + MULTIPLIER; + int_ptr++; + buf_left -= sizeof(*int_ptr); } /* end while */ } /* end else */ return nbytes; -} /* end H5Z_filter_dynlib2() */ +} /* end H5Z_filter_dynlibud() */ diff --git a/tools/test/h5ls/h5ls_plugin.sh.in b/tools/test/h5ls/h5ls_plugin.sh.in index 3436071..24b6198 100644 --- a/tools/test/h5ls/h5ls_plugin.sh.in +++ b/tools/test/h5ls/h5ls_plugin.sh.in @@ -233,7 +233,7 @@ TOOLTEST() { COPY_TESTFILES_TO_TESTDIR # Run the test -TOOLTEST tudfilter.ls 0 -w80 -v -d tudfilter.h5 +TOOLTEST tudfilter.ls 0 -w80 -d tudfilter.h5 # print results if test $nerrors -ne 0 ; then diff --git a/tools/testfiles/tudfilter.ddl b/tools/testfiles/tudfilter.ddl index 5bdceec..b2aa7e6 100644 --- a/tools/testfiles/tudfilter.ddl +++ b/tools/testfiles/tudfilter.ddl @@ -1,6 +1,6 @@ HDF5 "tudfilter.h5" { GROUP "/" { - DATASET "dynlib2" { + DATASET "dynlibud" { DATATYPE H5T_STD_I32LE DATASPACE SIMPLE { ( 20, 10 ) / ( 20, 10 ) } DATA { diff --git a/tools/testfiles/tudfilter.h5 b/tools/testfiles/tudfilter.h5 Binary files differindex eaf6a43..081b000 100644 --- a/tools/testfiles/tudfilter.h5 +++ b/tools/testfiles/tudfilter.h5 diff --git a/tools/testfiles/tudfilter.ls b/tools/testfiles/tudfilter.ls index 7ca8682..1882888 100644 --- a/tools/testfiles/tudfilter.ls +++ b/tools/testfiles/tudfilter.ls @@ -1,11 +1,4 @@ -Opened "tudfilter.h5" with sec2 driver. -dynlib2 Dataset {20/20, 10/10} - Location: 1:800 - Links: 1 - Chunks: {10, 5} 200 bytes - Storage: 800 logical bytes, 800 allocated bytes, 100.00% utilization - Filter-0: dynlib2-258 {} - Type: native int +dynlibud Dataset {20, 10} Data: (0,0) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, (1,9) 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, |