summaryrefslogtreecommitdiffstats
path: root/hl/fortran/src/H5LTff.F90
diff options
context:
space:
mode:
authorScot Breitenfeld <brtnfld@hdfgroup.org>2015-04-29 20:12:34 (GMT)
committerScot Breitenfeld <brtnfld@hdfgroup.org>2015-04-29 20:12:34 (GMT)
commit68e4b6ef398c946b723955553f00db2fd289b8d3 (patch)
treebf063338e311f83c89bba7418499aa90e5054104 /hl/fortran/src/H5LTff.F90
parent2fe77fad31a969fec3594339e8854e1b739b829e (diff)
downloadhdf5-68e4b6ef398c946b723955553f00db2fd289b8d3.zip
hdf5-68e4b6ef398c946b723955553f00db2fd289b8d3.tar.gz
hdf5-68e4b6ef398c946b723955553f00db2fd289b8d3.tar.bz2
[svn-r26970] Added new pointer APIs for h5ltmake_dataset ahd h5ltread_dataset.
Diffstat (limited to 'hl/fortran/src/H5LTff.F90')
-rw-r--r--hl/fortran/src/H5LTff.F90156
1 files changed, 146 insertions, 10 deletions
diff --git a/hl/fortran/src/H5LTff.F90 b/hl/fortran/src/H5LTff.F90
index fe81ca4..8f7ad6e 100644
--- a/hl/fortran/src/H5LTff.F90
+++ b/hl/fortran/src/H5LTff.F90
@@ -30,7 +30,8 @@
! This is needed for Windows based operating systems.
!
-#include "H5config_f.inc"
+#include <H5config_f.inc>
+
MODULE h5lt
USE, INTRINSIC :: ISO_C_BINDING
USE h5fortran_types
@@ -67,6 +68,7 @@ MODULE h5lt
MODULE PROCEDURE h5ltmake_dataset_f_c_long_double6
MODULE PROCEDURE h5ltmake_dataset_f_c_long_double7
#endif
+ MODULE PROCEDURE h5ltmake_dataset_f_ptr
END INTERFACE
INTERFACE h5ltread_dataset_f
@@ -100,6 +102,7 @@ MODULE h5lt
MODULE PROCEDURE h5ltread_dataset_f_c_long_double6
MODULE PROCEDURE h5ltread_dataset_f_c_long_double7
#endif
+ MODULE PROCEDURE h5ltread_dataset_f_ptr
END INTERFACE
INTERFACE h5ltmake_dataset_int_f
@@ -277,7 +280,7 @@ MODULE h5lt
END INTERFACE
INTERFACE
- INTEGER FUNCTION h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,buf,dtype) &
+ INTEGER FUNCTION h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,buf,dtype, SizeOf) &
BIND(C,NAME='h5ltget_attribute_c')
IMPORT :: C_CHAR, C_PTR
IMPORT :: HID_T, SIZE_T, HSIZE_T
@@ -290,7 +293,8 @@ MODULE h5lt
TYPE(C_PTR), VALUE :: buf ! data buffer
CHARACTER(KIND=C_CHAR), DIMENSION(*), INTENT(in) :: dtype ! flag indicating the datatype of the
! the buffer:
- ! R=Real, D=DOUBLE, I=Interger, C=Character
+ ! R=Real, D=DOUBLE, I=Interger
+ INTEGER(size_t) :: SizeOf ! Sizeof the buf datatype
END FUNCTION h5ltget_attribute_c
END INTERFACE
@@ -300,6 +304,46 @@ CONTAINS
!-------------------------------------------------------------------------
!-------------------------------------------------------------------------
+ ! Function(s): h5ltmake_dataset_f_ptr
+ !
+ ! Purpose: Creates and writes a dataset of a type TYPE_ID
+ !
+ ! Return: Success: 0, Failure: -1
+ !
+ ! Programmer: M. Scot Breitenfeld
+ !
+ ! Date: APR 29, 2015
+ !
+ ! Comments:
+ !
+ ! Modifications:
+ !
+ !-------------------------------------------------------------------------
+
+ SUBROUTINE h5ltmake_dataset_f_ptr(loc_id,&
+ dset_name,&
+ rank,&
+ dims,&
+ type_id,&
+ buf,&
+ errcode )
+
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier
+ CHARACTER(len=*), INTENT(in) :: dset_name ! name of the dataset
+ INTEGER, INTENT(in) :: rank ! rank
+ INTEGER(hsize_t), DIMENSION(*), INTENT(in) :: dims ! size of the buffer buf
+ INTEGER(hid_t), INTENT(in) :: type_id ! datatype identifier
+ TYPE(C_PTR) :: buf ! data buffer
+ INTEGER :: errcode ! error code
+ INTEGER(size_t) :: namelen ! name length
+
+ namelen = LEN(dset_name)
+ errcode = h5ltmake_dataset_c(loc_id,namelen,dset_name,rank,dims,type_id,buf)
+
+ END SUBROUTINE h5ltmake_dataset_f_ptr
+
+ !-------------------------------------------------------------------------
! Function(s): h5ltmake_dataset_f_int(1-7)
!
! Purpose: Creates and writes a dataset of a type TYPE_ID
@@ -1027,6 +1071,43 @@ CONTAINS
END SUBROUTINE h5ltmake_dataset_f_c_long_double7
#endif
+ !-------------------------------------------------------------------------
+ ! Function(s): h5ltread_dataset_f_ptr
+ !
+ ! Purpose: Read a dataset of a type TYPE_ID
+ !
+ ! Return: Success: 0, Failure: -1
+ !
+ ! Programmer: M. Scot Breitenfeld
+ !
+ ! Date: Apr 29, 2015
+ !
+ ! Comments:
+ !
+ ! Modifications:
+ !
+ !-------------------------------------------------------------------------
+
+ SUBROUTINE h5ltread_dataset_f_ptr(loc_id,&
+ dset_name,&
+ type_id,&
+ buf,&
+ dims,&
+ errcode )
+
+ IMPLICIT NONE
+ INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier
+ CHARACTER(LEN=*), INTENT(in) :: dset_name ! name of the dataset
+ INTEGER(hid_t), INTENT(in) :: type_id ! datatype identifier
+ INTEGER(hsize_t), DIMENSION(*), INTENT(in) :: dims ! size of the buffer buf
+ TYPE(C_PTR) :: buf ! data buffer
+ INTEGER :: errcode ! error code
+ INTEGER(size_t) :: namelen
+
+ namelen = LEN(dset_name)
+ errcode = h5ltread_dataset_c(loc_id,namelen,dset_name,type_id, buf, dims)
+
+ END SUBROUTINE h5ltread_dataset_f_ptr
!-------------------------------------------------------------------------
! Function(s): h5ltread_dataset_f_int(1-7)
@@ -3414,6 +3495,44 @@ CONTAINS
END SUBROUTINE h5ltset_attribute_string_f
!-------------------------------------------------------------------------
+ ! Function: h5ltget_attribute_f
+ !
+ ! Purpose: Reads an attribute named ATTR_NAME
+ !
+ ! Return: Success: 0, Failure: -1
+ !
+ ! Programmer: M. Scot Breitenfeld
+ !
+ ! Date: Apr 29, 2015
+ !
+ ! Comments:
+ !
+ ! Modifications:
+ !
+ !-------------------------------------------------------------------------
+
+!!$ SUBROUTINE h5ltget_attribute_f(loc_id,&
+!!$ dset_name,&
+!!$ attr_name,&
+!!$ buf,&
+!!$ errcode )
+!!$
+!!$ IMPLICIT NONE
+!!$ INTEGER(hid_t), INTENT(in) :: loc_id ! file or group identifier
+!!$ CHARACTER(LEN=*), INTENT(in) :: dset_name ! name of the dataset
+!!$ CHARACTER(LEN=*), INTENT(in) :: attr_name ! name of the attribute
+!!$ INTEGER :: errcode ! error code
+!!$ TYPE(C_PTR) :: buf! data buffer
+!!$ INTEGER(size_t) :: namelen ! name length
+!!$ INTEGER(size_t) :: attrlen ! name length
+!!$
+!!$ namelen = LEN(dset_name)
+!!$ attrlen = LEN(attr_name)
+!!$ errcode = h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,buf,'I'//C_NULL_CHAR)
+!!$
+!!$ END SUBROUTINE h5ltget_attribute_f
+
+ !-------------------------------------------------------------------------
! Function: h5ltget_attribute_int_f
!
! Purpose: Reads an attribute named ATTR_NAME
@@ -3445,16 +3564,21 @@ CONTAINS
INTEGER(size_t) :: namelen ! name length
INTEGER(size_t) :: attrlen ! name length
TYPE(C_PTR) :: f_ptr
+ INTEGER(size_t) :: SizeOf
- f_ptr = C_LOC(buf(1))
+ f_ptr = C_LOC(buf(1))
+#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE
+ SizeOf = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)
+#else
+ SizeOf = SIZEOF(buf(1))
+#endif
namelen = LEN(dset_name)
attrlen = LEN(attr_name)
- errcode = h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,f_ptr,'I'//C_NULL_CHAR)
+ errcode = h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,f_ptr,'I'//C_NULL_CHAR, SizeOf)
END SUBROUTINE h5ltget_attribute_int_f
-
!-------------------------------------------------------------------------
! Function: h5ltget_attribute_float_f
!
@@ -3487,12 +3611,17 @@ CONTAINS
INTEGER(size_t) :: namelen ! name length
INTEGER(size_t) :: attrlen ! name length
TYPE(C_PTR) :: f_ptr
+ INTEGER(size_t) :: SizeOf
f_ptr = C_LOC(buf(1))
-
+#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE
+ SizeOf = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)
+#else
+ SizeOf = SIZEOF(buf(1))
+#endif
namelen = LEN(dset_name)
attrlen = LEN(attr_name)
- errcode = h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,f_ptr,'R'//C_NULL_CHAR)
+ errcode = h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,f_ptr,'R'//C_NULL_CHAR, SizeOf)
END SUBROUTINE h5ltget_attribute_float_f
@@ -3528,12 +3657,19 @@ CONTAINS
INTEGER(size_t) :: namelen ! name length
INTEGER(size_t) :: attrlen ! name length
TYPE(C_PTR) :: f_ptr
+ INTEGER(size_t) :: SizeOf
- f_ptr = C_LOC(buf(1))
+ f_ptr = C_LOC(buf(1))
+
+#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE
+ SizeOf = STORAGE_SIZE(buf(1), c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)
+#else
+ SizeOf = SIZEOF(buf(1))
+#endif
namelen = LEN(dset_name)
attrlen = LEN(attr_name)
- errcode = h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,f_ptr,'D'//C_NULL_CHAR)
+ errcode = h5ltget_attribute_c(loc_id,namelen,dset_name,attrlen,attr_name,f_ptr,'R'//C_NULL_CHAR, SizeOf)
END SUBROUTINE h5ltget_attribute_double_f