mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-31 17:10:47 +08:00
[svn-r14228] Description:
Change H5Llink to H5Olink, which makes more sense. Tested on: FreeBSD/32 6.2 (duty) in debug mode FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe, in debug mode Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN, in production mode Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN, in production mode Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN, w/szip filter, in production mode Mac OS X/32 10.4.10 (amazon) in debug mode
This commit is contained in:
parent
88cf7ce60b
commit
ecaf22fa04
@ -197,7 +197,7 @@ done:
|
||||
* create other datasets.
|
||||
*
|
||||
* The resulting ID should be linked into the file with
|
||||
* H5Llink or it will be deleted when closed.
|
||||
* H5Olink or it will be deleted when closed.
|
||||
*
|
||||
* Return: Success: The object ID of the new dataset. At this
|
||||
* point, the dataset is ready to receive its
|
||||
|
@ -2101,10 +2101,8 @@ H5D_istore_readvv(const H5D_io_info_t *io_info,
|
||||
haddr_t chunk_addr, void *chunk, void *buf)
|
||||
{
|
||||
H5D_t *dset=io_info->dset; /* Local pointer to the dataset info */
|
||||
H5D_istore_ud1_t udata; /*B-tree pass-through */
|
||||
size_t u; /* Local index variables */
|
||||
ssize_t ret_value; /* Return value */
|
||||
ssize_t naccessed; /* Number of bytes accessed in chunk */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5D_istore_readvv, FAIL)
|
||||
|
||||
@ -2285,8 +2283,6 @@ H5D_istore_writevv(const H5D_io_info_t *io_info,
|
||||
haddr_t chunk_addr, void *chunk, const void *buf)
|
||||
{
|
||||
H5D_t *dset = io_info->dset; /* Local pointer to the dataset info */
|
||||
H5D_istore_ud1_t udata; /*B-tree pass-through */
|
||||
size_t u; /* Local index variables */
|
||||
ssize_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_NOAPI(H5D_istore_writevv, FAIL)
|
||||
@ -2304,6 +2300,9 @@ H5D_istore_writevv(const H5D_io_info_t *io_info,
|
||||
HDassert(buf);
|
||||
|
||||
#ifdef QAK
|
||||
{
|
||||
size_t u; /* Local index variables */
|
||||
|
||||
HDfprintf(stderr,"%s: io_info->store->chunk.offset={",FUNC);
|
||||
for(u=0; u<dset->shared->layout.u.chunk.ndims; u++)
|
||||
HDfprintf(stderr,"%Hd%s",io_info->store->chunk.offset[u],(u<(dset->shared->layout.u.chunk.ndims-1) ? ", " : "}\n"));
|
||||
@ -2313,6 +2312,7 @@ HDfprintf(stderr,"%s: chunk_len_arr[%Zu]=%Zu\n",FUNC,*chunk_curr_seq,chunk_len_a
|
||||
HDfprintf(stderr,"%s: chunk_offset_arr[%Zu]=%Hu\n",FUNC,*chunk_curr_seq,chunk_offset_arr[*chunk_curr_seq]);
|
||||
HDfprintf(stderr,"%s: mem_len_arr[%Zu]=%Zu\n",FUNC,*mem_curr_seq,mem_len_arr[*mem_curr_seq]);
|
||||
HDfprintf(stderr,"%s: mem_offset_arr[%Zu]=%Hu\n",FUNC,*mem_curr_seq,mem_offset_arr[*mem_curr_seq]);
|
||||
}
|
||||
#endif /* QAK */
|
||||
|
||||
/*
|
||||
|
@ -252,10 +252,10 @@ done:
|
||||
* property list GAPL_ID.
|
||||
*
|
||||
* The resulting ID should be linked into the file with
|
||||
* H5Llink or it will be deleted when closed.
|
||||
* H5Olink or it will be deleted when closed.
|
||||
*
|
||||
* Given the default setting, H5Gcreate_anon() followed by
|
||||
* H5Llink() will have the same function as H5Gcreate2().
|
||||
* H5Olink() will have the same function as H5Gcreate2().
|
||||
*
|
||||
* Usage: H5Gcreate_anon(loc_id, char *name, gcpl_id, gapl_id)
|
||||
* hid_t loc_id; IN: File or group identifier
|
||||
|
57
src/H5L.c
57
src/H5L.c
@ -407,61 +407,6 @@ done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Lcopy() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Llink
|
||||
*
|
||||
* Purpose: Creates a hard link from NEW_NAME to the object specified
|
||||
* by OBJ_ID using properties defined in the Link Creation
|
||||
* Property List LCPL.
|
||||
*
|
||||
* This function should be used to link objects that have just
|
||||
* been created.
|
||||
*
|
||||
* CUR_NAME and NEW_NAME are interpreted relative to
|
||||
* CUR_LOC_ID and NEW_LOC_ID, which is either a file ID or a
|
||||
* group ID.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: James Laird
|
||||
* Tuesday, December 13, 2005
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5Llink(hid_t new_loc_id, const char *new_name, hid_t obj_id, hid_t lcpl_id,
|
||||
hid_t lapl_id)
|
||||
{
|
||||
H5G_loc_t new_loc;
|
||||
H5G_loc_t obj_loc;
|
||||
herr_t ret_value=SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(H5Llink, FAIL)
|
||||
H5TRACE5("e", "i*siii", new_loc_id, new_name, obj_id, lcpl_id, lapl_id);
|
||||
|
||||
/* Check arguments */
|
||||
if(new_loc_id == H5L_SAME_LOC)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "cannot use H5L_SAME_LOC when only one location is specified")
|
||||
if(H5G_loc(new_loc_id, &new_loc) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
|
||||
if(H5G_loc(obj_id, &obj_loc) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
|
||||
if(!new_name || !*new_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
|
||||
if(HDstrlen(new_name) > H5L_MAX_LINK_NAME_LEN)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "name too long")
|
||||
if(lcpl_id != H5P_DEFAULT && (TRUE != H5P_isa_class(lcpl_id, H5P_LINK_CREATE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
|
||||
|
||||
/* Link to the object */
|
||||
if(H5L_link(&new_loc, new_name, &obj_loc, lcpl_id, lapl_id, H5AC_dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "unable to create link")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Llink() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Lcreate_soft
|
||||
@ -1488,7 +1433,7 @@ done:
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5L_link
|
||||
*
|
||||
* Purpose: Creates a link from OBJ_ID to CUR_NAME. See H5Llink() for
|
||||
* Purpose: Creates a link from OBJ_ID to CUR_NAME. See H5Olink() for
|
||||
* full documentation.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
|
@ -140,8 +140,6 @@ typedef herr_t (*H5L_iterate_t)(hid_t group, const char *name, const H5L_info_t
|
||||
/*********************/
|
||||
/* Public Prototypes */
|
||||
/*********************/
|
||||
H5_DLL herr_t H5Llink(hid_t cur_loc_id, const char *cur_name,
|
||||
hid_t obj_id, hid_t lcpl_id, hid_t lapl_id);
|
||||
H5_DLL herr_t H5Lmove(hid_t src_loc, const char *src_name, hid_t dst_loc,
|
||||
const char *dst_name, hid_t lcpl_id, hid_t lapl_id);
|
||||
H5_DLL herr_t H5Lcopy(hid_t src_loc, const char *src_name, hid_t dst_loc,
|
||||
|
55
src/H5O.c
55
src/H5O.c
@ -367,6 +367,61 @@ done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Oopen_by_addr() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Olink
|
||||
*
|
||||
* Purpose: Creates a hard link from NEW_NAME to the object specified
|
||||
* by OBJ_ID using properties defined in the Link Creation
|
||||
* Property List LCPL.
|
||||
*
|
||||
* This function should be used to link objects that have just
|
||||
* been created.
|
||||
*
|
||||
* NEW_NAME is interpreted relative to
|
||||
* NEW_LOC_ID, which is either a file ID or a
|
||||
* group ID.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
* Programmer: James Laird
|
||||
* Tuesday, December 13, 2005
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
herr_t
|
||||
H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name, hid_t lcpl_id,
|
||||
hid_t lapl_id)
|
||||
{
|
||||
H5G_loc_t new_loc;
|
||||
H5G_loc_t obj_loc;
|
||||
herr_t ret_value = SUCCEED; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(H5Olink, FAIL)
|
||||
H5TRACE5("e", "ii*sii", obj_id, new_loc_id, new_name, lcpl_id, lapl_id);
|
||||
|
||||
/* Check arguments */
|
||||
if(H5G_loc(obj_id, &obj_loc) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
|
||||
if(new_loc_id == H5L_SAME_LOC)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "cannot use H5L_SAME_LOC when only one location is specified")
|
||||
if(H5G_loc(new_loc_id, &new_loc) < 0)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
|
||||
if(!new_name || !*new_name)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
|
||||
if(HDstrlen(new_name) > H5L_MAX_LINK_NAME_LEN)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "name too long")
|
||||
if(lcpl_id != H5P_DEFAULT && (TRUE != H5P_isa_class(lcpl_id, H5P_LINK_CREATE)))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a link creation property list")
|
||||
|
||||
/* Link to the object */
|
||||
if(H5L_link(&new_loc, new_name, &obj_loc, lcpl_id, lapl_id, H5AC_dxpl_id) < 0)
|
||||
HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "unable to create link")
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* end H5Olink() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Oincr_refcount
|
||||
|
@ -147,6 +147,8 @@ H5_DLL herr_t H5Oget_info_by_name(hid_t loc_id, const char *name, H5O_info_t *oi
|
||||
H5_DLL herr_t H5Oget_info_by_idx(hid_t loc_id, const char *group_name,
|
||||
H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5O_info_t *oinfo,
|
||||
hid_t lapl_id);
|
||||
H5_DLL herr_t H5Olink(hid_t obj_id, hid_t new_loc_id, const char *new_name,
|
||||
hid_t lcpl_id, hid_t lapl_id);
|
||||
H5_DLL herr_t H5Oincr_refcount(hid_t object_id);
|
||||
H5_DLL herr_t H5Odecr_refcount(hid_t object_id);
|
||||
H5_DLL herr_t H5Ocopy(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
|
||||
|
@ -131,7 +131,7 @@ done:
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: H5Pset_create_intermediate_group
|
||||
*
|
||||
* Purpose: set crt_intmd_group so that H5Lcreate_*, H5Llink, etc.
|
||||
* Purpose: set crt_intmd_group so that H5Lcreate_*, H5Olink, etc.
|
||||
* will create missing groups along the given path "name"
|
||||
*
|
||||
* Note: XXX: This property should really be an access property. -QAK
|
||||
@ -169,7 +169,7 @@ done:
|
||||
* Function: H5Pget_create_intermediate_group
|
||||
*
|
||||
* Purpose: Returns the crt_intmd_group, which is set to create missing
|
||||
* groups during H5Llink, etc.
|
||||
* groups during H5Olink, etc.
|
||||
*
|
||||
* Return: Non-negative on success/Negative on failure
|
||||
*
|
||||
|
@ -209,7 +209,7 @@ done:
|
||||
* into a "named", immutable type.
|
||||
*
|
||||
* The resulting ID should be linked into the file with
|
||||
* H5Llink or it will be deleted when closed.
|
||||
* H5Olink or it will be deleted when closed.
|
||||
*
|
||||
* Note: Datatype access property list is unused currently, but is
|
||||
* checked for sanity anyway.
|
||||
|
133
test/links.c
133
test/links.c
@ -688,134 +688,6 @@ toomany(hid_t fapl, hbool_t new_format)
|
||||
return -1;
|
||||
} /* end toomany() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_h5l_create
|
||||
*
|
||||
* Purpose: Tests H5Lcreate
|
||||
*
|
||||
* Return: Success: 0
|
||||
* Failure: number of errors
|
||||
*
|
||||
* Programmer: James Laird
|
||||
* Monday, January 30, 2006
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
test_h5l_create(hid_t fapl, hbool_t new_format)
|
||||
{
|
||||
hid_t file_id=-1;
|
||||
hid_t group_id=-1;
|
||||
hid_t space_id=-1;
|
||||
hid_t dset_id=-1;
|
||||
hid_t type_id=-1;
|
||||
hid_t lcpl_id=-1;
|
||||
char filename[1024];
|
||||
hsize_t dims[2];
|
||||
int i, n, j;
|
||||
int wdata[H5L_DIM1][H5L_DIM2];
|
||||
int rdata[H5L_DIM1][H5L_DIM2];
|
||||
|
||||
if(new_format)
|
||||
TESTING("H5Llink (w/new group format)")
|
||||
else
|
||||
TESTING("H5Llink")
|
||||
|
||||
/* Create file */
|
||||
h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
|
||||
|
||||
if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
|
||||
|
||||
/* Create and commit a datatype with no name */
|
||||
if((type_id = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR
|
||||
if(H5Tcommit_anon(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
|
||||
if(!H5Tcommitted(type_id)) TEST_ERROR
|
||||
|
||||
/* Create the dataspace */
|
||||
dims[0] = H5L_DIM1;
|
||||
dims[1] = H5L_DIM2;
|
||||
if((space_id = H5Screate_simple(2 ,dims, NULL)) < 0) TEST_ERROR
|
||||
|
||||
/* Create a dataset with no name using the committed datatype*/
|
||||
if ((dset_id = H5Dcreate_anon(file_id, type_id, space_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
||||
|
||||
/* Verify that we can write to and read from the dataset */
|
||||
/* Initialize the dataset */
|
||||
for (i = n = 0; i < H5L_DIM1; i++)
|
||||
for (j = 0; j < H5L_DIM2; j++)
|
||||
wdata[i][j] = n++;
|
||||
|
||||
/* Write the data to the dataset */
|
||||
if (H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata) < 0) TEST_ERROR
|
||||
|
||||
/* Read the data back */
|
||||
if (H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata) < 0) TEST_ERROR
|
||||
|
||||
/* Verify the data */
|
||||
for (i = 0; i < H5L_DIM1; i++)
|
||||
for (j = 0; j < H5L_DIM2; j++)
|
||||
if (wdata[i][j] != rdata[i][j])
|
||||
TEST_ERROR
|
||||
|
||||
/* Create a group with no name*/
|
||||
if((group_id = H5Gcreate_anon(file_id, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
||||
|
||||
/* Link nameless datatype into nameless group */
|
||||
if(H5Llink(group_id, "datatype", type_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
|
||||
|
||||
/* Create LCPL with intermediate group creation flag set */
|
||||
if((lcpl_id = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR
|
||||
if(H5Pset_create_intermediate_group(lcpl_id, TRUE) < 0) TEST_ERROR
|
||||
|
||||
/* Link nameless dataset into nameless group with intermediate group */
|
||||
if(H5Llink(group_id, "inter_group/dataset", dset_id, lcpl_id, H5P_DEFAULT) < 0) TEST_ERROR
|
||||
|
||||
/* Close IDs for dataset and datatype */
|
||||
if(H5Dclose(dset_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(type_id) < 0) TEST_ERROR
|
||||
|
||||
/* Re-open datatype using new link */
|
||||
if((type_id = H5Topen2(group_id, "datatype", H5P_DEFAULT)) < 0) TEST_ERROR
|
||||
|
||||
/* Link nameless group to root group and close the group ID*/
|
||||
if(H5Llink(file_id, "/group", group_id, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
|
||||
if(H5Gclose(group_id) < 0) TEST_ERROR
|
||||
|
||||
/* Open dataset through root group and verify its data */
|
||||
if((dset_id = H5Dopen2(file_id, "/group/inter_group/dataset", H5P_DEFAULT)) < 0) TEST_ERROR
|
||||
|
||||
/* Read data from dataset */
|
||||
if (H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata) < 0) TEST_ERROR
|
||||
for (i = 0; i < H5L_DIM1; i++)
|
||||
for (j = 0; j < H5L_DIM2; j++)
|
||||
if (wdata[i][j] != rdata[i][j])
|
||||
TEST_ERROR
|
||||
|
||||
/* Close open IDs */
|
||||
if(H5Dclose(dset_id) < 0) TEST_ERROR
|
||||
if(H5Tclose(type_id) < 0) TEST_ERROR
|
||||
if(H5Pclose(lcpl_id) < 0) TEST_ERROR
|
||||
if(H5Sclose(space_id) < 0) TEST_ERROR
|
||||
if(H5Fclose(file_id) < 0) TEST_ERROR
|
||||
|
||||
PASSED();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5E_BEGIN_TRY {
|
||||
H5Gclose(group_id);
|
||||
H5Dclose(dset_id);
|
||||
H5Tclose(type_id);
|
||||
H5Pclose(lcpl_id);
|
||||
H5Sclose(space_id);
|
||||
H5Fclose(file_id);
|
||||
} H5E_END_TRY;
|
||||
return 1;
|
||||
} /* end test_h5l_create() */
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_lcpl
|
||||
@ -5052,8 +4924,8 @@ lapl_nlinks(hid_t fapl, hbool_t new_format)
|
||||
if(H5Lcopy(fid, "soft17", fid, "soft17/newer_soft", H5P_DEFAULT, plist) < 0) TEST_ERROR
|
||||
if(H5Lmove(fid, "soft17/newer_soft", fid, "soft17/newest_soft", H5P_DEFAULT, plist) < 0) TEST_ERROR
|
||||
|
||||
/* H5Llink */
|
||||
if(H5Llink(fid, "soft17/link_to_group", gid, H5P_DEFAULT, plist) < 0) TEST_ERROR
|
||||
/* H5Olink */
|
||||
if(H5Olink(gid, fid, "soft17/link_to_group", H5P_DEFAULT, plist) < 0) TEST_ERROR
|
||||
|
||||
/* H5Lcreate_hard and H5Lcreate_soft */
|
||||
if(H5Lcreate_hard(fid, "soft17", fid, "soft17/link2_to_group", H5P_DEFAULT, plist) < 0) TEST_ERROR
|
||||
@ -9732,7 +9604,6 @@ main(void)
|
||||
nerrors += toomany((new_format ? fapl2 : fapl), new_format) < 0 ? 1 : 0;
|
||||
|
||||
/* Test new H5L link creation routine */
|
||||
nerrors += test_h5l_create((new_format ? fapl2 : fapl), new_format);
|
||||
nerrors += test_lcpl((new_format ? fapl2 : fapl), new_format);
|
||||
nerrors += test_move((new_format ? fapl2 : fapl), new_format);
|
||||
nerrors += test_copy((new_format ? fapl2 : fapl), new_format);
|
||||
|
165
test/th5o.c
165
test/th5o.c
@ -23,17 +23,15 @@
|
||||
|
||||
#include "testhdf5.h"
|
||||
|
||||
/*#include "H5private.h"
|
||||
#include "H5Bprivate.h"
|
||||
#include "H5Sprivate.h"
|
||||
#include "H5Pprivate.h"
|
||||
*/
|
||||
|
||||
#define TEST_FILENAME "th5o_file"
|
||||
|
||||
#define RANK 2
|
||||
#define DIM0 5
|
||||
#define DIM1 10
|
||||
|
||||
#define TEST6_DIM1 100
|
||||
#define TEST6_DIM2 100
|
||||
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
@ -632,16 +630,16 @@ test_h5o_plist(void)
|
||||
/* Create the group anonymously and link it in */
|
||||
grp = H5Gcreate_anon(fid, gcpl, H5P_DEFAULT);
|
||||
CHECK(grp, FAIL, "H5Gcreate_anon");
|
||||
ret = H5Llink(fid, "group", grp, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Llink");
|
||||
ret = H5Olink(grp, fid, "group", H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Olink");
|
||||
|
||||
/* Commit the type inside the group anonymously and link it in */
|
||||
dtype = H5Tcopy(H5T_NATIVE_INT);
|
||||
CHECK(dtype, FAIL, "H5Tcopy");
|
||||
ret = H5Tcommit_anon(fid, dtype, tcpl, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Tcommit_anon");
|
||||
ret = H5Llink(fid, "datatype", dtype, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Llink");
|
||||
ret = H5Olink(dtype, fid, "datatype", H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Olink");
|
||||
|
||||
/* Create the dataspace for the dataset. */
|
||||
dspace = H5Screate(H5S_SCALAR);
|
||||
@ -650,8 +648,8 @@ test_h5o_plist(void)
|
||||
/* Create the dataset anonymously and link it in */
|
||||
dset = H5Dcreate_anon(fid, H5T_NATIVE_INT, dspace, dcpl, H5P_DEFAULT);
|
||||
CHECK(dset, FAIL, "H5Dcreate_anon");
|
||||
ret = H5Llink(fid, "dataset", dset, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Llink");
|
||||
ret = H5Olink(dset, fid, "dataset", H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Olink");
|
||||
ret = H5Sclose(dspace);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
|
||||
@ -756,6 +754,147 @@ test_h5o_plist(void)
|
||||
CHECK(ret, FAIL, "H5Pclose");
|
||||
} /* test_h5o_plist() */
|
||||
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
** test_h5o_link(): Test creating link to object
|
||||
**
|
||||
****************************************************************/
|
||||
static void
|
||||
test_h5o_link(void)
|
||||
{
|
||||
hid_t file_id=-1;
|
||||
hid_t group_id=-1;
|
||||
hid_t space_id=-1;
|
||||
hid_t dset_id=-1;
|
||||
hid_t type_id=-1;
|
||||
hid_t fapl_id=-1;
|
||||
hid_t lcpl_id=-1;
|
||||
hsize_t dims[2] = {TEST6_DIM1, TEST6_DIM2};
|
||||
htri_t committed; /* Whether the named datatype is committed */
|
||||
hbool_t new_format; /* Whether to use the new format or not */
|
||||
int wdata[TEST6_DIM1][TEST6_DIM2];
|
||||
int rdata[TEST6_DIM1][TEST6_DIM2];
|
||||
int i, n, j;
|
||||
herr_t ret; /* Value returned from API calls */
|
||||
|
||||
/* Initialize the raw data */
|
||||
for(i = n = 0; i < TEST6_DIM1; i++)
|
||||
for(j = 0; j < TEST6_DIM2; j++)
|
||||
wdata[i][j] = n++;
|
||||
|
||||
/* Create the dataspace */
|
||||
space_id = H5Screate_simple(2 ,dims, NULL);
|
||||
CHECK(space_id, FAIL, "H5Screate_simple");
|
||||
|
||||
/* Create LCPL with intermediate group creation flag set */
|
||||
lcpl_id = H5Pcreate(H5P_LINK_CREATE);
|
||||
CHECK(lcpl_id, FAIL, "H5Pcreate");
|
||||
ret = H5Pset_create_intermediate_group(lcpl_id, TRUE);
|
||||
CHECK(ret, FAIL, "H5Pset_create_intermediate_group");
|
||||
|
||||
/* Loop over using new group format */
|
||||
for(new_format = FALSE; new_format <= TRUE; new_format++) {
|
||||
|
||||
/* Make a FAPL that uses the "use the latest version of the format" flag */
|
||||
fapl_id = H5Pcreate(H5P_FILE_ACCESS);
|
||||
CHECK(fapl_id, FAIL, "H5Pcreate");
|
||||
|
||||
/* Set the "use the latest version of the format" flag for creating objects in the file */
|
||||
ret = H5Pset_latest_format(fapl_id, new_format);
|
||||
CHECK(ret, FAIL, "H5Pset_latest_format");
|
||||
|
||||
/* Create a new HDF5 file */
|
||||
file_id = H5Fcreate(TEST_FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
|
||||
CHECK(file_id, FAIL, "H5Fcreate");
|
||||
|
||||
/* Close the FAPL */
|
||||
ret = H5Pclose(fapl_id);
|
||||
CHECK(ret, FAIL, "H5Pclose");
|
||||
|
||||
|
||||
/* Create and commit a datatype with no name */
|
||||
type_id = H5Tcopy(H5T_NATIVE_INT);
|
||||
CHECK(type_id, FAIL, "H5Fcreate");
|
||||
ret = H5Tcommit_anon(file_id, type_id, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Tcommit_anon");
|
||||
committed = H5Tcommitted(type_id);
|
||||
VERIFY(committed, TRUE, "H5Tcommitted");
|
||||
|
||||
/* Create a dataset with no name using the committed datatype*/
|
||||
dset_id = H5Dcreate_anon(file_id, type_id, space_id, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(dset_id, FAIL, "H5Dcreate_anon");
|
||||
|
||||
/* Verify that we can write to and read from the dataset */
|
||||
|
||||
/* Write the data to the dataset */
|
||||
ret = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
|
||||
CHECK(ret, FAIL, "H5Dwrite");
|
||||
|
||||
/* Read the data back */
|
||||
ret = H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
|
||||
CHECK(ret, FAIL, "H5Dread");
|
||||
|
||||
/* Verify the data */
|
||||
for(i = 0; i < TEST6_DIM1; i++)
|
||||
for(j = 0; j < TEST6_DIM2; j++)
|
||||
VERIFY(wdata[i][j], rdata[i][j], "H5Dread");
|
||||
|
||||
/* Create a group with no name*/
|
||||
group_id = H5Gcreate_anon(file_id, H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(group_id, FAIL, "H5Gcreate_anon");
|
||||
|
||||
/* Link nameless datatype into nameless group */
|
||||
ret = H5Olink(type_id, group_id, "datatype", H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Olink");
|
||||
|
||||
/* Link nameless dataset into nameless group with intermediate group */
|
||||
ret = H5Olink(dset_id, group_id, "inter_group/dataset", lcpl_id, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Olink");
|
||||
|
||||
/* Close IDs for dataset and datatype */
|
||||
ret = H5Dclose(dset_id);
|
||||
CHECK(ret, FAIL, "H5Dclose");
|
||||
ret = H5Tclose(type_id);
|
||||
CHECK(ret, FAIL, "H5Tclose");
|
||||
|
||||
/* Re-open datatype using new link */
|
||||
type_id = H5Topen2(group_id, "datatype", H5P_DEFAULT);
|
||||
CHECK(type_id, FAIL, "H5Topen2");
|
||||
|
||||
/* Link nameless group to root group and close the group ID*/
|
||||
ret = H5Olink(group_id, file_id, "/group", H5P_DEFAULT, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Olink");
|
||||
ret = H5Gclose(group_id);
|
||||
CHECK(ret, FAIL, "H5Gclose");
|
||||
|
||||
/* Open dataset through root group and verify its data */
|
||||
dset_id = H5Dopen2(file_id, "/group/inter_group/dataset", H5P_DEFAULT);
|
||||
CHECK(dset_id, FAIL, "H5Dopen2");
|
||||
|
||||
/* Read data from dataset */
|
||||
ret = H5Dread(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
|
||||
CHECK(ret, FAIL, "H5Dread");
|
||||
for(i = 0; i < TEST6_DIM1; i++)
|
||||
for(j = 0; j < TEST6_DIM2; j++)
|
||||
VERIFY(wdata[i][j], rdata[i][j], "H5Dread");
|
||||
|
||||
/* Close open IDs */
|
||||
ret = H5Dclose(dset_id);
|
||||
CHECK(ret, FAIL, "H5Dclose");
|
||||
ret = H5Tclose(type_id);
|
||||
CHECK(ret, FAIL, "H5Tclose");
|
||||
ret = H5Fclose(file_id);
|
||||
CHECK(ret, FAIL, "H5Fclose");
|
||||
} /* end for */
|
||||
|
||||
/* Close remaining IDs */
|
||||
ret = H5Sclose(space_id);
|
||||
CHECK(ret, FAIL, "H5Sclose");
|
||||
ret = H5Pclose(lcpl_id);
|
||||
CHECK(ret, FAIL, "H5Pclose");
|
||||
} /* end test_h5o_link() */
|
||||
|
||||
|
||||
/****************************************************************
|
||||
**
|
||||
@ -773,6 +912,7 @@ test_h5o(void)
|
||||
test_h5o_close(); /* Test generic close function */
|
||||
test_h5o_refcount(); /* Test incrementing and decrementing reference count */
|
||||
test_h5o_plist(); /* Test object creation properties */
|
||||
test_h5o_link(); /* Test object link routine */
|
||||
} /* test_h5o() */
|
||||
|
||||
|
||||
@ -793,3 +933,4 @@ cleanup_h5o(void)
|
||||
{
|
||||
remove(TEST_FILENAME);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user