From 6b4e6d992d18322920b4a413a17423c92a3f7026 Mon Sep 17 00:00:00 2001 From: Scot Breitenfeld Date: Thu, 13 Oct 2011 00:18:19 -0500 Subject: [svn-r21537] Description: Modified h5oget_info_by_name_f to return a derive type h5o_info_t Tested: jam( gfortran, pgi, intel) --- fortran/src/H5Of.c | 89 +++++++++++++++++++++++-------- fortran/src/H5Off_F03.f90 | 131 +++++++++++++++++++--------------------------- 2 files changed, 123 insertions(+), 97 deletions(-) diff --git a/fortran/src/H5Of.c b/fortran/src/H5Of.c index a23f2a7..ffbf661 100644 --- a/fortran/src/H5Of.c +++ b/fortran/src/H5Of.c @@ -240,12 +240,13 @@ nh5oopen_by_addr_c (hid_t_f *loc_id, haddr_t_f *addr, hid_t_f *obj_id) */ int_f nh5oget_info_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, - H5O_info_t *object_info) + H5O_info_t_f *object_info) /******/ { char *c_name = NULL; /* Buffer to hold C string */ int_f ret_value = 0; /* Return value */ H5O_info_t Oinfo; + struct tm *ts; /* * Convert FORTRAN name to C name @@ -261,27 +262,73 @@ nh5oget_info_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f * HGOTO_DONE(FAIL); object_info->fileno = Oinfo.fileno; - object_info->addr = Oinfo.addr; - object_info->type = Oinfo.type; - object_info->rc = Oinfo.rc; - object_info->atime = Oinfo.atime; - object_info->mtime = Oinfo.mtime; - object_info->ctime = Oinfo.ctime; - object_info->btime = Oinfo.btime; - object_info->num_attrs = Oinfo.num_attrs; - - -/* printf("fileno %d %d\n",object_info->fileno, Oinfo.fileno); */ -/* printf("string %d %d\n",object_info.rc, Oinfo.rc); */ - -/* printf("atime %lld %lld\n",(long long int)object_info.atime, (long long int)Oinfo.atime); */ -/* printf("atime %lld %lld\n",(long long int)object_info.mtime, (long long int)Oinfo.mtime); */ -/* printf("atime %lld %lld\n",(long long int)object_info.ctime, (long long int)Oinfo.ctime); */ -/* printf("atime %lld %lld\n",(long long int)object_info.btime, (long long int)Oinfo.btime); */ -/* printf("string %f %f\n",object_info.addr, Oinfo.addr); */ -/* printf("num_attrs %d %d\n",object_info.num_attrs, Oinfo.num_attrs); */ -/* printf("num_attrs %f %f\n",object_info.hdr.version, Oinfo.hdr.version); */ + object_info->addr = (haddr_t_f)Oinfo.addr; + + + object_info->type = (int_f)Oinfo.type; + object_info->rc = (int_f)Oinfo.rc; + + ts = gmtime(&Oinfo.atime); + + object_info->atime[0] = (int_f)ts->tm_year+1900; /* year starts at 1900 */ + object_info->atime[1] = (int_f)ts->tm_mon+1; /* month starts at 0 in C */ + object_info->atime[2] = (int_f)ts->tm_mday; +/* object_info->atime[3] = (int_f)ts->tm_gmtoff; /\* convert from seconds to minutes *\/ */ + object_info->atime[4] = (int_f)ts->tm_hour; + object_info->atime[5] = (int_f)ts->tm_min; + object_info->atime[6] = (int_f)ts->tm_sec; + object_info->atime[7] = -32767; /* millisecond is not available, assign it -HUGE(0) */ + + ts = gmtime(&Oinfo.btime); + + object_info->btime[0] = (int_f)ts->tm_year+1900; /* year starts at 1900 */ + object_info->btime[1] = (int_f)ts->tm_mon+1; /* month starts at 0 in C */ + object_info->btime[2] = (int_f)ts->tm_mday; +/* object_info->btime[3] = (int_f)ts->tm_gmtoff/60; /\* convert from seconds to minutes *\/ */ + object_info->btime[4] = (int_f)ts->tm_hour; + object_info->btime[5] = (int_f)ts->tm_min; + object_info->btime[6] = (int_f)ts->tm_sec; + object_info->btime[7] = -32767; /* millisecond is not available, assign it -HUGE(0) */ + + ts = gmtime(&Oinfo.ctime); + + object_info->ctime[0] = (int_f)ts->tm_year+1900; /* year starts at 1900 */ + object_info->ctime[1] = (int_f)ts->tm_mon+1; /* month starts at 0 in C */ + object_info->ctime[2] = (int_f)ts->tm_mday; +/* object_info->ctime[3] = (int_f)ts->tm_gmtoff/60; /\* convert from seconds to minutes *\/ */ + object_info->ctime[4] = (int_f)ts->tm_hour; + object_info->ctime[5] = (int_f)ts->tm_min; + object_info->ctime[6] = (int_f)ts->tm_sec; + object_info->ctime[7] = -32767; /* millisecond is not available, assign it -HUGE(0) */ + + ts = gmtime(&Oinfo.mtime); + + object_info->mtime[0] = (int_f)ts->tm_year+1900; /* year starts at 1900 */ + object_info->mtime[1] = (int_f)ts->tm_mon+1; /* month starts at 0 in C */ + object_info->mtime[2] = (int_f)ts->tm_mday; +/* object_info->mtime[3] = (int_f)ts->tm_gmtoff/60; /\* convert from seconds to minutes *\/ */ + object_info->mtime[4] = (int_f)ts->tm_hour; + object_info->mtime[5] = (int_f)ts->tm_min; + object_info->mtime[6] = (int_f)ts->tm_sec; + object_info->mtime[7] = -32767; /* millisecond is not available, assign it -HUGE(0) */ + + object_info->num_attrs = (hsize_t_f)Oinfo.num_attrs; + + object_info->hdr.version = (int_f)Oinfo.hdr.version; + object_info->hdr.nmesgs = (int_f)Oinfo.hdr.nmesgs; + object_info->hdr.nchunks = (int_f)Oinfo.hdr.nchunks; + object_info->hdr.flags = (int_f)Oinfo.hdr.flags; + + object_info->hdr.space.total = (hsize_t_f)Oinfo.hdr.space.total; + object_info->hdr.space.meta = (hsize_t_f)Oinfo.hdr.space.meta; + object_info->hdr.space.mesg = (hsize_t_f)Oinfo.hdr.space.mesg; + object_info->hdr.space.free = (hsize_t_f)Oinfo.hdr.space.free; + + object_info->hdr.mesg.present = Oinfo.hdr.mesg.present; + object_info->hdr.mesg.shared = Oinfo.hdr.mesg.shared; + object_info->meta_size.obj.index_size = (hsize_t_f)Oinfo.meta_size.obj.index_size; + object_info->meta_size.obj.heap_size = (hsize_t_f)Oinfo.meta_size.obj.heap_size; done: return ret_value; diff --git a/fortran/src/H5Off_F03.f90 b/fortran/src/H5Off_F03.f90 index 4233c14..c6da3d0 100644 --- a/fortran/src/H5Off_F03.f90 +++ b/fortran/src/H5Off_F03.f90 @@ -5,9 +5,9 @@ ! ! PURPOSE ! This file contains Fortran 90 and Fortran 2003 interfaces for H5O functions. -! It contains the same functions as H5Off_DEPRECIATE.f90 but includes the +! It contains the same functions as H5Off_F90.f90 but includes the ! Fortran 2003 functions and the interface listings. This file will be compiled -! instead of H5Off_DEPRECIATE.f90 if Fortran 2003 functions are enabled. +! instead of H5Off_F90.f90 if Fortran 2003 functions are enabled. ! ! COPYRIGHT ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * @@ -36,40 +36,38 @@ MODULE H5O_PROVISIONAL USE H5GLOBAL - USE ISO_C_BINDING + USE, INTRINSIC :: ISO_C_BINDING IMPLICIT NONE - +!****t* H5T (F03)/h5o_info_t +! +! Fortran2003 Derived Type: +! enum, bind(c) enumerator :: H5O_TYPE_UNKNOWN_F = -1 enumerator :: H5O_TYPE_GROUP_F, H5O_TYPE_DATASET_F, H5O_TYPE_NAMED_DATATYPE_F, H5O_TYPE_NTYPES_F end enum - TYPE, BIND(C) :: space_t INTEGER(hsize_t) :: total ! Total space for storing object header in file INTEGER(hsize_t) :: meta ! Space within header for object header metadata information INTEGER(hsize_t) :: mesg ! Space within header for actual message information INTEGER(hsize_t) :: free ! Free space within object header END TYPE space_t - + TYPE, BIND(C) :: mesg_t INTEGER(c_int64_t) :: present ! Flags to indicate presence of message type in header INTEGER(c_int64_t) :: shared ! Flags to indicate message type is shared in header END TYPE mesg_t TYPE, BIND(C) :: hdr_t - INTEGER(c_int) :: version ! Version number of header format in file - ! unsigned version - INTEGER(c_int) :: nmesgs ! Number of object header messages - ! unsigned nmesgs - INTEGER(c_int) :: nchunks ! Number of object header chunks - ! unsigned nchunks - INTEGER(c_int) :: flags ! Object header status flags - ! unsigned flags - TYPE(space_t) :: space - TYPE(mesg_t) :: mesg + INTEGER :: version ! Version number of header format in file + INTEGER :: nmesgs ! Number of object header messages + INTEGER :: nchunks ! Number of object header chunks + INTEGER :: flags ! Object header status flags + TYPE(space_t) :: space + TYPE(mesg_t) :: mesg END TYPE hdr_t ! Extra metadata storage for obj & attributes @@ -83,28 +81,29 @@ MODULE H5O_PROVISIONAL TYPE(H5_ih_info_t) :: attr ! v2 B-tree & heap for attributes ENDTYPE meta_size_t + TYPE, BIND(C) :: h5o_info_t + INTEGER(c_long) :: fileno ! File number that object is located in + INTEGER(HADDR_T) :: addr ! Object address in file + INTEGER :: type ! Basic object type (group, dataset, etc.) + INTEGER :: rc ! Reference count of object - TYPE, BIND(C) :: H5O_info_t - INTEGER(c_long) :: fileno ! File number that object is located in - ! unsigned long - INTEGER(HADDR_T) :: addr ! Object address in file - INTEGER(c_int) :: TYPE ! Basic object type (group, dataset, etc.) - ! H5O_type_t type which is type enum - INTEGER(c_int) :: rc ! Reference count of object - ! unsigned rc - INTEGER(c_int) :: atime ! Access time - INTEGER(c_int) :: mtime ! Modification time - INTEGER(c_int) :: ctime ! Change time - INTEGER(c_int) :: btime ! Birth time - INTEGER(hsize_t) :: num_attrs ! # of attributes attached to object + INTEGER, DIMENSION(8) :: atime ! Access time ! -- NOTE -- + INTEGER, DIMENSION(8) :: mtime ! Modification time ! Returns an integer array + INTEGER, DIMENSION(8) :: ctime ! Change time ! as specified in the Fortran + INTEGER, DIMENSION(8) :: btime ! Birth time ! intrinsic DATE_AND_TIME(VALUES) + + INTEGER(hsize_t) :: num_attrs ! # of attributes attached to object TYPE(hdr_t) :: hdr + TYPE(meta_size_t) :: meta_size - END TYPE H5O_info_t + END TYPE h5o_info_t + +!***** CONTAINS -!****s* H5O (F03)/h5ovisit_f +!****s* H5O (F03)/h5ovisit_f_F03 ! ! NAME ! h5ovisit_f @@ -113,53 +112,43 @@ CONTAINS ! Recursively visits all objects starting from a specified object. ! ! Inputs: -! group_id - Identifier of the group at which the recursive iteration begins -! index_type - Type of index; valid values include: -! H5_INDEX_NAME_F -! H5_INDEX_CRT_ORDER_F -! order - Order in which index is traversed; valid values include: -! H5_ITER_DEC_F -! H5_ITER_INC_F -! H5_ITER_NATIVE_F -! op - Callback function passing data regarding the group to the calling application -! op_data - User-defined pointer to data required by the application for its processing of the group +! group_id - Identifier of the group at which the recursive iteration begins +! index_type - Type of index; valid values include: +! H5_INDEX_NAME_F +! H5_INDEX_CRT_ORDER_F +! order - Order in which index is traversed; valid values include: +! H5_ITER_DEC_F +! H5_ITER_INC_F +! H5_ITER_NATIVE_F +! op - Callback function passing data regarding the group to the calling application +! op_data - User-defined pointer to data required by the application for its processing of the group ! ! Outputs: -! idx - returns the return value of the first operator that returns a positive value, or -! zero if all members were processed with no operator returning non-zero. -! hdferr - error code: -! 0 on success and -1 on failure +! return_value - returns the return value of the first operator that returns a positive value, or +! zero if all members were processed with no operator returning non-zero. +! hdferr - Returns 0 if successful and -1 if fails ! AUTHOR ! M. Scot Breitenfeld ! November 19, 2008 ! -! Signature: +! Fortran2003 Interface: SUBROUTINE h5ovisit_f(group_id, index_type, order, op, op_data, return_value, hdferr) - USE ISO_C_BINDING + USE, INTRINSIC :: ISO_C_BINDING IMPLICIT NONE INTEGER(HID_T), INTENT(IN) :: group_id INTEGER, INTENT(IN) :: index_type INTEGER, INTENT(IN) :: order -!!$ INTEGER(HSIZE_T), INTENT(INOUT) :: idx ! IN : Iteration position at which to start -!!$ ! OUT: Position at which an interrupted iteration may be restarted - - TYPE(C_FUNPTR):: op ! Callback function passing data regarding the link to the calling application - TYPE(C_PTR) :: op_data ! User-defined pointer to data required by the application for its processing of the link - - INTEGER, INTENT(OUT) :: return_value ! Success: The return value of the first operator that - ! returns non-zero, or zero if all members were - ! processed with no operator returning non-zero. - ! Failure: Negative if something goes wrong within the - ! library, or the negative value returned by one - ! of the operators. - - INTEGER, INTENT(OUT) :: hdferr ! Error code: - ! 0 on success and -1 on failure + TYPE(C_FUNPTR):: op + TYPE(C_PTR) :: op_data + INTEGER, INTENT(OUT) :: return_value + INTEGER, INTENT(OUT) :: hdferr !***** +!!$ INTEGER(HSIZE_T), INTENT(INOUT) :: idx ! IN : Iteration position at which to start +!!$ ! OUT: Position at which an interrupted iteration may be restarted INTERFACE INTEGER FUNCTION h5ovisit_c(group_id, index_type, order, op, op_data) - USE ISO_C_BINDING + USE, INTRINSIC :: ISO_C_BINDING USE H5GLOBAL !DEC$IF DEFINED(HDF5F90_WINDOWS) !DEC$ATTRIBUTES C,reference,decorate,alias:'H5OVISIT_C'::h5ovisit_c @@ -182,10 +171,8 @@ CONTAINS END SUBROUTINE h5ovisit_f - - ! -!!$!****s* H5O/h5oget_info_by_name_f +!!$!****s* H5O (F03)/h5oget_info_by_name_f_F03 ! ! NAME ! h5oget_info_by_name_f @@ -208,20 +195,15 @@ CONTAINS ! M. Scot Breitenfeld ! December 1, 2008 ! -! Signature: +! Fortran2003 Interface: SUBROUTINE h5oget_info_by_name_f(loc_id, name, & object_info, hdferr, lapl_id) - ! f_corder_valid, corder, cset, data_size, hdferr, lapl_id) - USE ISO_C_BINDING + USE, INTRINSIC :: ISO_C_BINDING IMPLICIT NONE INTEGER(HID_T) , INTENT(IN) :: loc_id CHARACTER(LEN=*), INTENT(IN) :: name TYPE(C_PTR) :: object_info -!!$ LOGICAL , INTENT(OUT) :: f_corder_valid -!!$ INTEGER , INTENT(OUT) :: corder -!!$ INTEGER , INTENT(OUT) :: cset -!!$ INTEGER(HSIZE_T), INTENT(OUT) :: data_size INTEGER , INTENT(OUT) :: hdferr INTEGER(HID_T) , INTENT(IN) , OPTIONAL :: lapl_id !***** @@ -255,9 +237,6 @@ CONTAINS object_info) -!!$ f_corder_valid =.FALSE. -!!$ IF (corder_valid .EQ. 1) f_corder_valid =.TRUE. - END SUBROUTINE H5Oget_info_by_name_f END MODULE H5O_PROVISIONAL -- cgit v0.12