summaryrefslogtreecommitdiffstats
path: root/fortran/src/H5Rf.c
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/src/H5Rf.c')
-rw-r--r--fortran/src/H5Rf.c267
1 files changed, 267 insertions, 0 deletions
diff --git a/fortran/src/H5Rf.c b/fortran/src/H5Rf.c
new file mode 100644
index 0000000..16e0f4a
--- /dev/null
+++ b/fortran/src/H5Rf.c
@@ -0,0 +1,267 @@
+#include "H5f90.h"
+
+/*----------------------------------------------------------------------------
+ * Name: h5rcreate_object_c
+ * Purpose: Call H5Rcreate to create a reference to an object
+ * Inputs: loc_id - file or group identifier
+ * name - name of the dataset
+ * namelen - name length
+ * Outputs: ref - reference to the object
+ * Returns: 0 on success, -1 on failure
+ * Programmer: Elena Pourmal
+ * Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rcreate_object_c (_fcd ref, hid_t_f *loc_id, _fcd name, int_f *namelen)
+{
+ int ret_value = -1;
+ hid_t c_loc_id;
+ int ret_value_c;
+ char *c_name;
+ int c_namelen;
+ hobj_ref_t ref_c;
+ int i;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ c_namelen = *namelen;
+ c_name = (char *)HD5f2cstring(name, c_namelen);
+ if (c_name == NULL) return ret_value;
+
+ /*
+ * Call H5Rcreate function.
+ */
+ c_loc_id = *loc_id;
+ ret_value_c = H5Rcreate(&ref_c, c_loc_id, c_name, H5R_OBJECT, -1);
+ HDfree(c_name);
+ if (ret_value_c >= 0) {
+ for(i=0; i < H5R_OBJ_REF_BUF_SIZE; i++)
+ {
+#if defined(_UNICOS)
+ ref.c_pointer[i]=ref_c.oid[i];
+#else
+ ref[i]=ref_c.oid[i];
+#endif
+ }
+ ret_value = 0;
+ }
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5rcreate_region_c
+ * Purpose: Call H5Rcreate to create a reference to dataset region
+ * region
+ * Inputs: loc_id - file or group identifier
+ * name - name of the dataset
+ * namelen - name length
+ * space_id - dataset space identifier
+ * Outputs: ref - reference to the dataset region
+ * Returns: 0 on success, -1 on failure
+ * Programmer: Elena Pourmal
+ * Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rcreate_region_c (_fcd ref, hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *space_id)
+{
+ int ret_value = -1;
+ hid_t c_loc_id;
+ hid_t c_space_id;
+ int ret_value_c;
+ char *c_name;
+ int c_namelen;
+ hdset_reg_ref_t ref_c;
+ int i;
+
+ /*
+ * Convert FORTRAN name to C name
+ */
+ c_namelen = *namelen;
+ c_name = (char *)HD5f2cstring(name, c_namelen);
+ if (c_name == NULL) return ret_value;
+
+ /*
+ * Call H5Rcreate function.
+ */
+ c_loc_id = *loc_id;
+ c_space_id = *space_id;
+ ret_value_c = H5Rcreate(&ref_c, c_loc_id, c_name, H5R_DATASET_REGION, c_space_id);
+ HDfree(c_name);
+ if (ret_value_c >= 0) {
+ for(i=0; i < H5R_DSET_REG_REF_BUF_SIZE; i++)
+ {
+#if defined(_UNICOS)
+ ref.c_pointer[i]=ref_c.heapid[i];
+#else
+ ref[i]=ref_c.heapid[i];
+#endif
+ }
+ ret_value = 0;
+ }
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5rdereference_region_c
+ * Purpose: Call H5Rdereference to dereference to dataset region
+ * Inputs: dset_id - dataset identifier
+ * ref - reference to the dataset region
+ * Outputs: obj_id - dereferenced dataset identifier
+ * Returns: 0 on success, -1 on failure
+ * Programmer: Elena Pourmal
+ * Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rdereference_region_c (hid_t_f *dset_id, _fcd ref, hid_t_f *obj_id)
+{
+ int ret_value = -1;
+ hid_t c_dset_id;
+ hdset_reg_ref_t ref_c;
+ hid_t c_obj_id;
+ int i;
+
+ for(i=0; i < H5R_DSET_REG_REF_BUF_SIZE; i++) {
+
+#if defined(_UNICOS)
+ ref_c.heapid[i]=ref.c_pointer[i];
+#else
+ ref_c.heapid[i]=ref[i];
+#endif
+ }
+
+ /*
+ * Call H5Rdereference function.
+ */
+ c_dset_id = *dset_id;
+ c_obj_id = H5Rdereference(c_dset_id, H5R_DATASET_REGION, &ref_c);
+ if(c_obj_id < 0) return ret_value;
+ *obj_id = (hid_t_f)c_obj_id;
+ ret_value = 0;
+ return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name: h5rdereference_object_c
+ * Purpose: Call H5Rdereference to dereference an object
+ * Inputs: dset_id - dataset identifier
+ * ref - reference to an object
+ * Outputs: obj_id - dereferenced object identifier
+ * Returns: 0 on success, -1 on failure
+ * Programmer: Elena Pourmal
+ * Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rdereference_object_c (hid_t_f *dset_id, _fcd ref, hid_t_f *obj_id)
+{
+ int ret_value = -1;
+ hid_t c_dset_id;
+ hid_t c_obj_id;
+ hobj_ref_t ref_c;
+ int i;
+
+ for(i=0; i < H5R_OBJ_REF_BUF_SIZE; i++) {
+
+#if defined(_UNICOS)
+ ref_c.oid[i]=ref.c_pointer[i];
+#else
+ ref_c.oid[i]=ref[i];
+#endif
+ }
+
+ /*
+ * Call H5Rdereference function.
+ */
+ c_dset_id = *dset_id;
+ c_obj_id = H5Rdereference(c_dset_id, H5R_OBJECT, &ref_c);
+ if(c_obj_id < 0) return ret_value;
+ *obj_id = (hid_t_f)c_obj_id;
+ ret_value = 0;
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5rget_region_region_object_c
+ * Purpose: Call H5Rget_region to dereference dataspace region
+ * Inputs: dset_id - dataset identifier
+ * ref - reference to the dataset region
+ * Outputs: space_id - dereferenced dataset dataspace identifier
+ * Returns: 0 on success, -1 on failure
+ * Programmer: Elena Pourmal
+ * Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rget_region_region_c (hid_t_f *dset_id, _fcd ref, hid_t_f *space_id)
+{
+ int ret_value = -1;
+ hid_t c_dset_id;
+ hid_t c_space_id;
+ hdset_reg_ref_t ref_c;
+ int i;
+
+ for(i=0; i < H5R_DSET_REG_REF_BUF_SIZE; i++) {
+
+#if defined(_UNICOS)
+ ref_c.heapid[i]=ref.c_pointer[i];
+#else
+ ref_c.heapid[i]=ref[i];
+#endif
+ }
+
+ /*
+ * Call H5Rget_region function.
+ */
+ c_dset_id = *dset_id;
+ c_space_id = H5Rget_region(c_dset_id, H5R_DATASET_REGION, &ref_c);
+ if(c_space_id < 0) return ret_value;
+ *space_id = (hid_t_f)c_space_id;
+ ret_value = 0;
+ return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name: h5rget_object_type_obj_c
+ * Purpose: Call H5Rget_object_type to retrieve the type of the object reference points
+ * to
+ * Inputs: dset_id - dataset identifier
+ * ref - reference to the dataset region
+ * Outputs: obj_type - type of dereferenced object
+ * Returns: 0 on success, -1 on failure
+ * Programmer: Elena Pourmal
+ * Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rget_object_type_obj_c (hid_t_f *dset_id, _fcd ref, int_f *obj_type)
+{
+ int ret_value = -1;
+ hid_t c_dset_id;
+ int c_obj_type;
+ hobj_ref_t ref_c;
+ int i;
+
+ for(i=0; i < H5R_OBJ_REF_BUF_SIZE; i++) {
+
+#if defined(_UNICOS)
+ ref_c.oid[i]=ref.c_pointer[i];
+#else
+ ref_c.oid[i]=ref[i];
+#endif
+ }
+
+ /*
+ * Call H5Rget_object_type function.
+ */
+ c_dset_id = *dset_id;
+ c_obj_type = H5Rget_object_type(c_dset_id, &ref_c);
+ if(c_obj_type < 0) return ret_value;
+ *obj_type = (int_f)c_obj_type;
+ ret_value = 0;
+ return ret_value;
+}