/* * Class: hdf_hdf5lib_H5 * Method: H5Aiterate_by_name * Signature: (JLjava/lang/String;IIJLjava/lang/Object;Ljava/lang/Object;J)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Aiterate_1by_1name (JNIEnv *env, jclass clss, jlong grp_id, jstring name, jint idx_type, jint order, jlong idx, jobject callback_op, jobject op_data, jlong access_id) { const char *lName; hsize_t start_idx = (hsize_t)idx; herr_t status = -1; ENVPTR->GetJavaVM(ENVPAR &jvm); visit_callback = callback_op; if ((op_data == NULL) || (callback_op == NULL)) { h5nullArgument(env, "H5Literate_by_name: op_data or callback_op is NULL"); } /* end if */ else { PIN_JAVA_STRING(name, lName); if (lName != NULL) { status = H5Aiterate_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5A_operator2_t)H5A_iterate_cb, (void*)op_data, (hid_t)access_id); UNPIN_JAVA_STRING(name, lName); if (status < 0) h5libraryError(env); } } /* end else */ return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Aiterate_1by_1name */
/*------------------------------------------------------------------------- * Function: trav_print_visit_obj * * Purpose: Callback for visiting object, when printing info * * Return: 0 on success, * -1 on failure *------------------------------------------------------------------------- */ static int trav_print_visit_obj(const char *path, const H5O_info_t *oinfo, const char *already_visited, void *udata) { trav_print_udata_t *print_udata = (trav_print_udata_t *)udata; /* Print the name of the object */ /* (no new-line, so that objects that we've encountered before can print * the name of the original object) */ switch(oinfo->type) { case H5O_TYPE_GROUP: printf(" %-10s %s", "group", path); break; case H5O_TYPE_DATASET: printf(" %-10s %s", "dataset", path); break; case H5O_TYPE_NAMED_DATATYPE: printf(" %-10s %s", "datatype", path); break; case H5O_TYPE_UNKNOWN: case H5O_TYPE_NTYPES: default: printf(" %-10s %s", "unknown object type", path); break; } /* end switch */ /* Check if we've already seen this object */ if(NULL == already_visited) { trav_path_op_data_t op_data; op_data.path = path; /* Finish printing line about object */ printf("\n"); if(trav_verbosity > 0) H5Aiterate_by_name(print_udata->fid, path, trav_index_by, trav_index_order, NULL, trav_attr, &op_data, H5P_DEFAULT); } else /* Print the link's original name */ printf(" -> %s\n", already_visited); return(0); } /* end trav_print_visit_obj() */