summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlrknox <lrknox>2017-04-13 17:42:27 (GMT)
committerlrknox <lrknox>2017-04-13 17:42:27 (GMT)
commit32e706e2cc1cb73cc6cacf78e9174b7afa5e5430 (patch)
tree1fb96d63d689ad331ffc19f00478d8eab8726508
parentc96423b6431f0ab9efbefa03481258f598b85a7e (diff)
parent906c1819188755a04fde6cc0ad7346775a6e61b8 (diff)
downloadhdf5-32e706e2cc1cb73cc6cacf78e9174b7afa5e5430.zip
hdf5-32e706e2cc1cb73cc6cacf78e9174b7afa5e5430.tar.gz
hdf5-32e706e2cc1cb73cc6cacf78e9174b7afa5e5430.tar.bz2
Merge branch 'develop' into hdf5_1_10_1
-rw-r--r--java/src/hdf/hdf5lib/H5.java3
-rw-r--r--java/src/jni/h5dImp.c91
-rw-r--r--java/src/jni/h5dImp.h9
-rw-r--r--test/fheap.c13
4 files changed, 114 insertions, 2 deletions
diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java
index 03d7b6b..1f0dd3a 100644
--- a/java/src/hdf/hdf5lib/H5.java
+++ b/java/src/hdf/hdf5lib/H5.java
@@ -1796,6 +1796,9 @@ public class H5 implements java.io.Serializable {
return H5Dread_short(dataset_id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf, true);
}
+ public synchronized static native int H5DreadVL(long dataset_id, long mem_type_id, long mem_space_id,
+ long file_space_id, long xfer_plist_id, Object[] buf) throws HDF5LibraryException, NullPointerException;
+
public synchronized static native int H5Dread_string(long dataset_id, long mem_type_id, long mem_space_id,
long file_space_id, long xfer_plist_id, String[] buf) throws HDF5LibraryException, NullPointerException;
diff --git a/java/src/jni/h5dImp.c b/java/src/jni/h5dImp.c
index d869601..66efed0 100644
--- a/java/src/jni/h5dImp.c
+++ b/java/src/jni/h5dImp.c
@@ -53,6 +53,7 @@ extern jobject visit_callback;
/* Local Prototypes */
/********************/
+static herr_t H5DreadVL_asstr (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
static herr_t H5DreadVL_str (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
static herr_t H5DreadVL_array (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
static herr_t H5DwriteVL_str (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf);
@@ -992,6 +993,96 @@ Java_hdf_hdf5lib_H5_H5Dwrite_1double
/*
* Class: hdf_hdf5lib_H5
+ * Method: H5DreadVL
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5DreadVL
+ (JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id,
+ jlong file_space_id, jlong xfer_plist_id, jobjectArray buf)
+{
+ herr_t status = -1;
+ htri_t isVlenStr=0;
+
+ if (buf == NULL) {
+ h5nullArgument(env, "H5DreadVL: buf is NULL");
+ } /* end if */
+ else {
+ isVlenStr = H5Tdetect_class((hid_t)mem_type_id, H5T_STRING);
+
+ if (isVlenStr)
+ h5badArgument(env, "H5DreadVL: type is not variable length non-string");
+ else
+ status = H5DreadVL_asstr(env, (hid_t)dataset_id, (hid_t)mem_type_id,
+ (hid_t)mem_space_id, (hid_t)file_space_id,
+ (hid_t)xfer_plist_id, buf);
+ } /* end else */
+
+ return (jint)status;
+} /* end Java_hdf_hdf5lib_H5_H5Dread_1VLStrings */
+
+herr_t
+H5DreadVL_asstr
+ (JNIEnv *env, hid_t did, hid_t tid, hid_t mem_sid, hid_t file_sid, hid_t xfer_plist_id, jobjectArray buf)
+{
+ jint i;
+ jint n;
+ jstring jstr;
+ h5str_t h5str;
+ hvl_t *rdata;
+ size_t size;
+ size_t max_len = 0;
+ herr_t status = -1;
+
+ n = ENVPTR->GetArrayLength(ENVPAR buf);
+ rdata = (hvl_t*)HDcalloc((size_t)n, sizeof(hvl_t));
+ if (rdata == NULL) {
+ h5JNIFatalError(env, "H5DreadVL_notstr: failed to allocate buff for read");
+ } /* end if */
+ else {
+ status = H5Dread(did, tid, mem_sid, file_sid, xfer_plist_id, rdata);
+
+ if (status < 0) {
+ H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, rdata);
+ HDfree(rdata);
+ h5JNIFatalError(env, "H5DreadVL_notstr: failed to read data");
+ } /* end if */
+ else {
+ max_len = 1;
+ for (i=0; i < n; i++) {
+ if ((rdata + i)->len > max_len)
+ max_len = (rdata + i)->len;
+ }
+
+ size = H5Tget_size(tid) * max_len;
+ HDmemset(&h5str, 0, sizeof(h5str_t));
+ h5str_new(&h5str, 4 * size);
+
+ if (h5str.s == NULL) {
+ H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, rdata);
+ HDfree(rdata);
+ h5JNIFatalError(env, "H5DreadVL_notstr: failed to allocate buf");
+ } /* end if */
+ else {
+ for (i=0; i < n; i++) {
+ h5str.s[0] = '\0';
+ h5str_sprintf(&h5str, did, tid, rdata+i, 0);
+ jstr = ENVPTR->NewStringUTF(ENVPAR h5str.s);
+ ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr);
+ } /* end for */
+ h5str_free(&h5str);
+
+ H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, rdata);
+ HDfree(rdata);
+ } /* end else */
+ } /* end else */
+ } /* end else */
+
+ return status;
+}
+
+/*
+ * Class: hdf_hdf5lib_H5
* Method: H5Dread_string
* Signature: (JJJJJ[Ljava/lang/String;)I
*/
diff --git a/java/src/jni/h5dImp.h b/java/src/jni/h5dImp.h
index 22b8f63..3cf24fe 100644
--- a/java/src/jni/h5dImp.h
+++ b/java/src/jni/h5dImp.h
@@ -204,6 +204,15 @@ Java_hdf_hdf5lib_H5_H5Dwrite_1double
/*
* Class: hdf_hdf5lib_H5
+ * Method: H5DreadVL
+ * Signature: (JJJJJ[Ljava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL
+Java_hdf_hdf5lib_H5_H5DreadVL
+(JNIEnv*, jclass, jlong, jlong, jlong, jlong, jlong, jobjectArray);
+
+/*
+ * Class: hdf_hdf5lib_H5
* Method: H5Dread_string
* Signature: (JJJJJ[Ljava/lang/String;)I
*/
diff --git a/test/fheap.c b/test/fheap.c
index 11ee760..4be6cb9 100644
--- a/test/fheap.c
+++ b/test/fheap.c
@@ -16386,14 +16386,23 @@ main(void)
/*
* Caution when turning on ExpressMode 0:
- * It will activate testing with different combinations of
+ * It will activate testing with different combinations of
* page buffering and file space strategy and the
* running time will be long.
+ * For parallel build, the last two tests for page buffering
+ * are skipped because this feature is disabled in parallel.
+ * Activate full testing when this feature is re-enabled
+ * in the future for parallel build.
*/
if(ExpressMode > 1)
HDprintf("***Express test mode on. Some tests may be skipped\n");
- else if(ExpressMode == 0)
+ else if(ExpressMode == 0) {
+#ifdef H5_HAVE_PARALLEL
+ num_pb_fs = NUM_PB_FS - 2;
+#else
num_pb_fs = NUM_PB_FS;
+#endif
+ }
/* Initialize heap creation parameters */
init_small_cparam(&small_cparam);