/****if* H5Of/h5oopen_by_idx_c * NAME * h5oopen_by_idx_c * PURPOSE * Calls H5Oopen_by_idx_c * INPUTS * loc_id - A file or group identifier. * group_name - Name of group, relative to loc_id, in which object is located. * group_namelen - Length of group_name * index_type - Type of index by which objects are ordered. * order - Order of iteration within index. * n - Object to open. * lapl_id - Link access property list. * OUTPUTS * obj_id - An object identifier for the opened object. * RETURNS * 0 on success, -1 on failure * AUTHOR * M. Scot Breitenfeld * May 17, 2012 * SOURCE */ int_f nh5oopen_by_idx_c (hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, int_f *index_type, int_f *order, hsize_t_f *n, hid_t_f *obj_id, hid_t_f *lapl_id) /******/ { char *c_group_name = NULL; /* Buffer to hold C string */ int_f ret_value = 0; H5_index_t c_index_type; H5_iter_order_t c_order; /* * Convert FORTRAN string to C string */ if((c_group_name = HD5f2cstring( group_name, (size_t)*group_namelen)) == NULL) HGOTO_DONE(FAIL); c_index_type = (H5_index_t)*index_type; c_order = (H5_iter_order_t)*order; /* * Call H5Oopen_by_idx function. */ if((*obj_id =(hid_t_f)H5Oopen_by_idx((hid_t)*loc_id, c_group_name, c_index_type, c_order, (hsize_t)*n, (hid_t)*lapl_id)) < 0) HGOTO_DONE(FAIL); done: if(c_group_name) HDfree(c_group_name); return ret_value; }
void DCGroup::getEntriesInternal(H5Handle base, const std::string baseGroup, std::string baseName, VisitObjCBType *param) throw (DCException) { H5G_info_t group_info; H5Gget_info(base, &group_info); for (size_t i = 0; i < group_info.nlinks; ++i) { std::string currentBaseName = baseName; std::string currentEntryName = ""; H5O_info_t obj_info; H5Oget_info_by_idx(base, ".", H5_INDEX_NAME, H5_ITER_INC, i, &obj_info, H5P_DEFAULT); if (param->entries) { ssize_t len_name = H5Lget_name_by_idx(base, ".", H5_INDEX_NAME, H5_ITER_INC, i, NULL, 0, H5P_LINK_ACCESS_DEFAULT); char *link_name_c = new char[len_name + 1]; H5Lget_name_by_idx(base, ".", H5_INDEX_NAME, H5_ITER_INC, i, link_name_c, len_name + 1, H5P_LINK_ACCESS_DEFAULT); currentEntryName = std::string(link_name_c) + std::string("/"); currentBaseName += currentEntryName; delete[] link_name_c; } if (obj_info.type == H5O_TYPE_GROUP) { hid_t group_id = H5Oopen_by_idx(base, ".", H5_INDEX_NAME, H5_ITER_INC, i, H5P_DEFAULT); getEntriesInternal(group_id, baseGroup, currentBaseName, param); H5Oclose(group_id); } if (obj_info.type == H5O_TYPE_DATASET) { if (param->entries) param->entries[param->count].name = currentEntryName; param->count++; } } }
/* * Class: hdf_hdf5lib_H5 * Method: _H5Oopen_by_idx * Signature: (JLjava/lang/String;IIJJ)J; */ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jint index_field, jint order, jlong link_n, jlong lapl_id) { hid_t retVal = -1; const char *oName; PIN_JAVA_STRING(name, oName); if (oName != NULL) { retVal = H5Oopen_by_idx((hid_t)loc_id, oName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (hid_t)lapl_id ); UNPIN_JAVA_STRING(name, oName); if (retVal < 0) h5libraryError(env); } return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx */
/* * Class: hdf_hdf5lib_H5 * Method: _H5Oopen_by_idx * Signature: (JLjava/lang/String;IIJJ)J; */ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jint index_field, jint order, jlong link_n, jlong lapl_id) { const char *grpName = NULL; hid_t retVal = H5I_INVALID_HID; UNUSED(clss); if (NULL == name) H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Oopen_by_idx: object name is NULL"); PIN_JAVA_STRING(ENVONLY, name, grpName, NULL, "H5Oopen_by_idx: object name not pinned"); if ((retVal = H5Oopen_by_idx((hid_t)loc_id, grpName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (hid_t)lapl_id)) < 0) H5_LIBRARY_ERROR(ENVONLY); done: if (grpName) UNPIN_JAVA_STRING(ENVONLY, name, grpName); return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx */
SWIGEXPORT hid_t JNICALL Java_permafrost_hdf_libhdf_ObjectLibExtensionJNI_JHOopen_1by_1idx( JNIEnv *jenv, jclass jcls, jint loc_id, jstring group_name, jint idx_type, jint order, jlong n, jint lapl_id, jintArray type, jobjectArray name ) { jint sz = 0; char* pGroupName = NULL; hid_t obj_id = -1; jint jiType; char* pName = NULL; char* tmpName = NULL; const int szName = 64; int lenName = 0; jstring jname; if (!group_name) { SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, "Null group name."); return (-1); } else if (!type) { SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, "Null type array."); return (-1); } else if (!name) { SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, "Null object name array."); return (-1); } sz = (*jenv)->GetArrayLength(jenv, type); if (sz < 1) { SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, "Zero-length type array."); return (-1); } sz = (*jenv)->GetArrayLength(jenv, name); if (sz < 1) { SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, "Zero-length object name array."); return (-1); } pGroupName = (char *)(*jenv)->GetStringUTFChars(jenv, group_name, 0); if (!pGroupName) return -1; obj_id = H5Oopen_by_idx( (hid_t)loc_id, pGroupName, (H5_index_t) idx_type, (H5_iter_order_t) order, (hsize_t) n, (hid_t) lapl_id ); if (pGroupName) (*jenv)->ReleaseStringUTFChars(jenv, group_name, (const char *) pGroupName); if (obj_id <= 0) return (obj_id); jiType = (jint) H5Iget_type(obj_id); (*jenv)->SetIntArrayRegion(jenv, type, 0, 1, &jiType); pName = (char*) calloc(szName, sizeof(char)); lenName = H5Iget_name(obj_id, pName, szName-1); if (lenName >= szName) { char* tmpName = (char*) realloc(pName, sizeof(char)*lenName+1); if (!tmpName) { free(pName); pName = NULL; H5Oclose(loc_id); return (-1); } pName = tmpName; lenName = H5Iget_name(obj_id, pName, lenName); } jname = (*jenv)->NewStringUTF(jenv, pName); (*jenv)->SetObjectArrayElement(jenv, name, 0, jname); free(pName); return (obj_id); }