mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r14220] Description:
Change H5Aiterate2 -> H5Aiterate_by_name to be more consistent with other new API routine names Re-add H5Aiterate2, to operate on a particular object 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
8d71b4cbcd
commit
b8bb790649
@ -209,7 +209,7 @@ int H5Object::iterateAttrs( attr_operator_t user_op, unsigned *_idx, void *op_da
|
||||
|
||||
// call the C library routine H5Aiterate2 to iterate the attributes
|
||||
hsize_t idx = (hsize_t)*_idx;
|
||||
int ret_value = H5Aiterate2(id, ".", H5_INDEX_NAME, H5_ITER_INC, &idx, userAttrOpWrpr, (void *) userData, H5P_DEFAULT);
|
||||
int ret_value = H5Aiterate2(id, H5_INDEX_NAME, H5_ITER_INC, &idx, userAttrOpWrpr, (void *) userData);
|
||||
|
||||
// release memory
|
||||
delete userData;
|
||||
|
@ -210,7 +210,7 @@ main (void)
|
||||
/*
|
||||
* Get attribute info using iteration function.
|
||||
*/
|
||||
ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, NULL, attr_info, NULL, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, NULL, attr_info, NULL);
|
||||
|
||||
/*
|
||||
* Close the dataset and the file.
|
||||
|
@ -207,7 +207,7 @@ find_palette(hid_t loc_id, const char *name, const H5A_info_t *ainfo,
|
||||
|
||||
herr_t H5IM_find_palette( hid_t loc_id )
|
||||
{
|
||||
return H5Aiterate2(loc_id, ".", H5_INDEX_NAME, H5_ITER_INC, NULL, find_palette, NULL, H5P_DEFAULT);
|
||||
return H5Aiterate2(loc_id, H5_INDEX_NAME, H5_ITER_INC, NULL, find_palette, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1423,7 +1423,7 @@ herr_t H5LTfind_attribute( hid_t loc_id, const char* attr_name )
|
||||
herr_t
|
||||
H5LT_find_attribute( hid_t loc_id, const char* attr_name )
|
||||
{
|
||||
return H5Aiterate2(loc_id, ".", H5_INDEX_NAME, H5_ITER_INC, NULL, find_attr, (void *)attr_name, H5P_DEFAULT);
|
||||
return H5Aiterate2(loc_id, H5_INDEX_NAME, H5_ITER_INC, NULL, find_attr, (void *)attr_name);
|
||||
}
|
||||
|
||||
|
||||
|
92
src/H5A.c
92
src/H5A.c
@ -1824,9 +1824,8 @@ done:
|
||||
PURPOSE
|
||||
Calls a user's function for each attribute on an object
|
||||
USAGE
|
||||
herr_t H5Aiterate2(loc_id, obj_name, idx_type, order, idx, op, op_data, lapl_id)
|
||||
herr_t H5Aiterate2(loc_id, idx_type, order, idx, op, op_data)
|
||||
hid_t loc_id; IN: Base location for object
|
||||
const char *obj_name; IN: Name of object relative to location
|
||||
H5_index_t idx_type; IN: Type of index to use
|
||||
H5_iter_order_t order; IN: Order to iterate over index
|
||||
hsize_t *idx; IN/OUT: Starting (IN) & Ending (OUT) attribute
|
||||
@ -1834,7 +1833,6 @@ done:
|
||||
H5A_operator2_t op; IN: User's function to pass each attribute to
|
||||
void *op_data; IN/OUT: User's data to pass through to iterator
|
||||
operator function
|
||||
hid_t lapl_id; IN: Link access property list
|
||||
RETURNS
|
||||
Returns a negative value if an error occurs, the return value of the
|
||||
last operator if it was non-zero (which can be a negative value), or zero
|
||||
@ -1862,7 +1860,89 @@ done:
|
||||
attribute.
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5Aiterate2(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
hsize_t *idx, H5A_operator2_t op, void *op_data)
|
||||
{
|
||||
H5A_attr_iter_op_t attr_op; /* Attribute operator */
|
||||
hsize_t start_idx; /* Index of attribute to start iterating at */
|
||||
hsize_t last_attr; /* Index of last attribute examined */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(H5Aiterate2, FAIL)
|
||||
H5TRACE6("e", "iIiIo*hx*x", loc_id, idx_type, order, idx, op,
|
||||
op_data);
|
||||
|
||||
/* check arguments */
|
||||
if(H5I_ATTR == H5I_get_type(loc_id))
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
|
||||
if(idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index type specified")
|
||||
if(order <= H5_ITER_UNKNOWN || order >= H5_ITER_N)
|
||||
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration order specified")
|
||||
|
||||
/* Build attribute operator info */
|
||||
attr_op.op_type = H5A_ATTR_OP_APP2;
|
||||
attr_op.u.app_op2 = op;
|
||||
|
||||
/* Call attribute iteration routine */
|
||||
last_attr = start_idx = (idx ? *idx : 0);
|
||||
if((ret_value = H5O_attr_iterate(loc_id, H5AC_ind_dxpl_id, idx_type, order, start_idx, &last_attr, &attr_op, op_data)) < 0)
|
||||
HERROR(H5E_ATTR, H5E_BADITER, "error iterating over attributes");
|
||||
|
||||
/* Set the last attribute information */
|
||||
if(idx)
|
||||
*idx = last_attr;
|
||||
|
||||
done:
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Aiterate2() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
NAME
|
||||
H5Aiterate_by_name
|
||||
PURPOSE
|
||||
Calls a user's function for each attribute on an object
|
||||
USAGE
|
||||
herr_t H5Aiterate2(loc_id, obj_name, idx_type, order, idx, op, op_data, lapl_id)
|
||||
hid_t loc_id; IN: Base location for object
|
||||
const char *obj_name; IN: Name of object relative to location
|
||||
H5_index_t idx_type; IN: Type of index to use
|
||||
H5_iter_order_t order; IN: Order to iterate over index
|
||||
hsize_t *idx; IN/OUT: Starting (IN) & Ending (OUT) attribute
|
||||
in index & order
|
||||
H5A_operator2_t op; IN: User's function to pass each attribute to
|
||||
void *op_data; IN/OUT: User's data to pass through to iterator
|
||||
operator function
|
||||
hid_t lapl_id; IN: Link access property list
|
||||
RETURNS
|
||||
Returns a negative value if an error occurs, the return value of the
|
||||
last operator if it was non-zero (which can be a negative value), or zero
|
||||
if all attributes were processed.
|
||||
|
||||
DESCRIPTION
|
||||
This function interates over the attributes of dataset or group
|
||||
specified with 'loc_id' & 'obj_name'. For each attribute of the object,
|
||||
the 'op_data' and some additional information (specified below) are passed
|
||||
to the 'op' function. The iteration begins with the '*idx'
|
||||
object in the group and the next attribute to be processed by the operator
|
||||
is returned in '*idx'.
|
||||
The operation receives the ID for the group or dataset being iterated
|
||||
over ('loc_id'), the name of the current attribute about the object
|
||||
('attr_name'), the attribute's "info" struct ('ainfo') and the pointer to
|
||||
the operator data passed in to H5Aiterate_by_name ('op_data'). The return values
|
||||
from an operator are:
|
||||
A. Zero causes the iterator to continue, returning zero when all
|
||||
attributes have been processed.
|
||||
B. Positive causes the iterator to immediately return that positive
|
||||
value, indicating short-circuit success. The iterator can be
|
||||
restarted at the next attribute.
|
||||
C. Negative causes the iterator to immediately return that value,
|
||||
indicating failure. The iterator can be restarted at the next
|
||||
attribute.
|
||||
--------------------------------------------------------------------------*/
|
||||
herr_t
|
||||
H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op, void *op_data,
|
||||
hid_t lapl_id)
|
||||
{
|
||||
@ -1877,7 +1957,7 @@ H5Aiterate2(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
hsize_t last_attr; /* Index of last attribute examined */
|
||||
herr_t ret_value; /* Return value */
|
||||
|
||||
FUNC_ENTER_API(H5Aiterate2, FAIL)
|
||||
FUNC_ENTER_API(H5Aiterate_by_name, FAIL)
|
||||
H5TRACE8("e", "i*sIiIo*hx*xi", loc_id, obj_name, idx_type, order, idx, op,
|
||||
op_data, lapl_id);
|
||||
|
||||
@ -1935,7 +2015,7 @@ done:
|
||||
HDONE_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't free location")
|
||||
|
||||
FUNC_LEAVE_API(ret_value)
|
||||
} /* H5Aiterate2() */
|
||||
} /* H5Aiterate_by_name() */
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------
|
||||
|
@ -71,7 +71,9 @@ H5_DLL herr_t H5Aget_info_by_idx(hid_t loc_id, const char *obj_name,
|
||||
H5_DLL herr_t H5Arename(hid_t loc_id, const char *old_name, const char *new_name);
|
||||
H5_DLL herr_t H5Arename_by_name(hid_t loc_id, const char *obj_name,
|
||||
const char *old_attr_name, const char *new_attr_name, hid_t lapl_id);
|
||||
H5_DLL herr_t H5Aiterate2(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
H5_DLL herr_t H5Aiterate2(hid_t loc_id, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op, void *op_data);
|
||||
H5_DLL herr_t H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type,
|
||||
H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op, void *op_data,
|
||||
hid_t lapd_id);
|
||||
H5_DLL herr_t H5Adelete2(hid_t loc_id, const char *obj_name,
|
||||
|
@ -486,8 +486,8 @@ extern const char * entry_type_names[NUMBER_OF_ENTRY_TYPES];
|
||||
|
||||
/* call back function declarations: */
|
||||
|
||||
herr_t check_write_permitted(const H5F_t UNUSED * f,
|
||||
hid_t UNUSED dxpl_id,
|
||||
herr_t check_write_permitted(const H5F_t * f,
|
||||
hid_t dxpl_id,
|
||||
hbool_t * write_permitted_ptr);
|
||||
|
||||
herr_t pico_clear(H5F_t * f, void * thing, hbool_t dest);
|
||||
|
@ -94,11 +94,11 @@ typedef enum dtype_t {
|
||||
static int num_opaque_conversions_g = 0;
|
||||
|
||||
static int opaque_check(int tag_it);
|
||||
static herr_t convert_opaque(hid_t UNUSED st, hid_t UNUSED dt,
|
||||
static herr_t convert_opaque(hid_t st, hid_t dt,
|
||||
H5T_cdata_t *cdata,
|
||||
size_t UNUSED nelmts, size_t UNUSED buf_stride,
|
||||
size_t UNUSED bkg_stride, void UNUSED *_buf,
|
||||
void UNUSED *bkg, hid_t UNUSED dset_xfer_plid);
|
||||
size_t nelmts, size_t buf_stride,
|
||||
size_t bkg_stride, void *_buf,
|
||||
void *bkg, hid_t dset_xfer_plid);
|
||||
static int opaque_long(void);
|
||||
static int opaque_funcs(void);
|
||||
|
||||
|
189
test/tattr.c
189
test/tattr.c
@ -1448,7 +1448,7 @@ test_attr_iterate(hid_t fapl)
|
||||
|
||||
/* Iterate over attributes on dataset */
|
||||
count = 0;
|
||||
ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, NULL, attr_op1, &count, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, NULL, attr_op1, &count);
|
||||
VERIFY(ret, 0, "H5Aiterate2");
|
||||
|
||||
/* Close dataset */
|
||||
@ -1466,7 +1466,7 @@ test_attr_iterate(hid_t fapl)
|
||||
|
||||
/* Iterate over attributes on dataset */
|
||||
count = 0;
|
||||
ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, NULL, attr_op1, &count, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, NULL, attr_op1, &count);
|
||||
VERIFY(ret, 0, "H5Aiterate2");
|
||||
|
||||
/* Close dataset */
|
||||
@ -5694,8 +5694,9 @@ attr_iterate2_fail_cb(hid_t UNUSED group_id, const char UNUSED *attr_name,
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
attr_iterate_check(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
unsigned max_attrs, attr_iter_info_t *iter_info)
|
||||
attr_iterate_check(hid_t fid, const char *dsetname, hid_t obj_id,
|
||||
H5_index_t idx_type, H5_iter_order_t order, unsigned max_attrs,
|
||||
attr_iter_info_t *iter_info)
|
||||
{
|
||||
unsigned v; /* Local index variable */
|
||||
hsize_t skip; /* # of attributes to skip on object */
|
||||
@ -5715,7 +5716,7 @@ attr_iterate_check(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? 0 : (max_attrs - 1);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate2(obj_id, ".", idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(obj_id, idx_type, order, &skip, attr_iterate2_cb, iter_info);
|
||||
CHECK(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
/* Verify that we visited all the attributes */
|
||||
@ -5724,6 +5725,38 @@ attr_iterate_check(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
VERIFY(iter_info->visited[v], TRUE, "H5Aiterate2");
|
||||
|
||||
|
||||
/* Iterate over attributes on object */
|
||||
iter_info->nskipped = (unsigned)(skip = 0);
|
||||
iter_info->order = order;
|
||||
iter_info->stop = -1;
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? 0 : (max_attrs - 1);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate_by_name(fid, dsetname, idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Verify that we visited all the attributes */
|
||||
VERIFY(skip, max_attrs, "H5Aiterate_by_name");
|
||||
for(v = 0; v < max_attrs; v++)
|
||||
VERIFY(iter_info->visited[v], TRUE, "H5Aiterate_by_name");
|
||||
|
||||
|
||||
/* Iterate over attributes on object */
|
||||
iter_info->nskipped = (unsigned)(skip = 0);
|
||||
iter_info->order = order;
|
||||
iter_info->stop = -1;
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? 0 : (max_attrs - 1);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate_by_name(obj_id, ".", idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Verify that we visited all the attributes */
|
||||
VERIFY(skip, max_attrs, "H5Aiterate_by_name");
|
||||
for(v = 0; v < max_attrs; v++)
|
||||
VERIFY(iter_info->visited[v], TRUE, "H5Aiterate_by_name");
|
||||
|
||||
|
||||
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
||||
/* Iterate over attributes on object, with H5Aiterate1 */
|
||||
iter_info->nskipped = oskip = 0;
|
||||
@ -5749,7 +5782,7 @@ attr_iterate_check(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? skip : ((max_attrs - 1) - skip);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate2(obj_id, ".", idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(obj_id, idx_type, order, &skip, attr_iterate2_cb, iter_info);
|
||||
CHECK(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
/* Verify that we visited all the attributes */
|
||||
@ -5774,6 +5807,70 @@ attr_iterate_check(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
} /* end else */
|
||||
|
||||
|
||||
/* Skip over some attributes on object */
|
||||
iter_info->nskipped = (unsigned)(skip = max_attrs / 2);
|
||||
iter_info->order = order;
|
||||
iter_info->stop = -1;
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? skip : ((max_attrs - 1) - skip);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate_by_name(fid, dsetname, idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Verify that we visited all the attributes */
|
||||
VERIFY(skip, max_attrs, "H5Aiterate_by_name");
|
||||
if(order == H5_ITER_INC) {
|
||||
for(v = 0; v < (max_attrs / 2); v++)
|
||||
VERIFY(iter_info->visited[v + (max_attrs / 2)], TRUE, "H5Aiterate_by_name");
|
||||
} /* end if */
|
||||
else if(order == H5_ITER_DEC) {
|
||||
for(v = 0; v < (max_attrs / 2); v++)
|
||||
VERIFY(iter_info->visited[v], TRUE, "H5Aiterate_by_name");
|
||||
} /* end if */
|
||||
else {
|
||||
unsigned nvisit = 0; /* # of links visited */
|
||||
|
||||
HDassert(order == H5_ITER_NATIVE);
|
||||
for(v = 0; v < max_attrs; v++)
|
||||
if(iter_info->visited[v] == TRUE)
|
||||
nvisit++;
|
||||
|
||||
VERIFY(skip, (max_attrs / 2), "H5Aiterate_by_name");
|
||||
} /* end else */
|
||||
|
||||
|
||||
/* Skip over some attributes on object */
|
||||
iter_info->nskipped = (unsigned)(skip = max_attrs / 2);
|
||||
iter_info->order = order;
|
||||
iter_info->stop = -1;
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? skip : ((max_attrs - 1) - skip);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate_by_name(obj_id, ".", idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Verify that we visited all the attributes */
|
||||
VERIFY(skip, max_attrs, "H5Aiterate_by_name");
|
||||
if(order == H5_ITER_INC) {
|
||||
for(v = 0; v < (max_attrs / 2); v++)
|
||||
VERIFY(iter_info->visited[v + (max_attrs / 2)], TRUE, "H5Aiterate_by_name");
|
||||
} /* end if */
|
||||
else if(order == H5_ITER_DEC) {
|
||||
for(v = 0; v < (max_attrs / 2); v++)
|
||||
VERIFY(iter_info->visited[v], TRUE, "H5Aiterate_by_name");
|
||||
} /* end if */
|
||||
else {
|
||||
unsigned nvisit = 0; /* # of links visited */
|
||||
|
||||
HDassert(order == H5_ITER_NATIVE);
|
||||
for(v = 0; v < max_attrs; v++)
|
||||
if(iter_info->visited[v] == TRUE)
|
||||
nvisit++;
|
||||
|
||||
VERIFY(skip, (max_attrs / 2), "H5Aiterate_by_name");
|
||||
} /* end else */
|
||||
|
||||
|
||||
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
||||
/* Skip over some attributes on object, with H5Aiterate1 */
|
||||
iter_info->nskipped = oskip = max_attrs / 2;
|
||||
@ -5815,12 +5912,38 @@ attr_iterate_check(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? 0 : (max_attrs - 1);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate2(obj_id, ".", idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(obj_id, idx_type, order, &skip, attr_iterate2_cb, iter_info);
|
||||
CHECK(ret, FAIL, "H5Aiterate2");
|
||||
VERIFY(ret, CORDER_ITER_STOP, "H5Aiterate2");
|
||||
VERIFY(iter_info->ncalled, 3, "H5Aiterate2");
|
||||
|
||||
|
||||
/* Iterate over attributes on object, stopping in the middle */
|
||||
iter_info->nskipped = (unsigned)(skip = 0);
|
||||
iter_info->order = order;
|
||||
iter_info->stop = 3;
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? 0 : (max_attrs - 1);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate_by_name(fid, dsetname, idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
VERIFY(ret, CORDER_ITER_STOP, "H5Aiterate_by_name");
|
||||
VERIFY(iter_info->ncalled, 3, "H5Aiterate_by_name");
|
||||
|
||||
|
||||
/* Iterate over attributes on object, stopping in the middle */
|
||||
iter_info->nskipped = (unsigned)(skip = 0);
|
||||
iter_info->order = order;
|
||||
iter_info->stop = 3;
|
||||
iter_info->ncalled = 0;
|
||||
iter_info->curr = order != H5_ITER_DEC ? 0 : (max_attrs - 1);
|
||||
HDmemset(iter_info->visited, 0, sizeof(hbool_t) * iter_info->max_visit);
|
||||
ret = H5Aiterate_by_name(obj_id, ".", idx_type, order, &skip, attr_iterate2_cb, iter_info, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
VERIFY(ret, CORDER_ITER_STOP, "H5Aiterate_by_name");
|
||||
VERIFY(iter_info->ncalled, 3, "H5Aiterate_by_name");
|
||||
|
||||
|
||||
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
||||
/* Iterate over attributes on object, stopping in the middle, with H5Aiterate1() */
|
||||
iter_info->nskipped = oskip = 0;
|
||||
@ -5838,9 +5961,17 @@ attr_iterate_check(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order,
|
||||
|
||||
/* Check for iteration routine indicating failure */
|
||||
skip = 0;
|
||||
ret = H5Aiterate2(obj_id, ".", idx_type, order, &skip, attr_iterate2_fail_cb, NULL, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(obj_id, idx_type, order, &skip, attr_iterate2_fail_cb, NULL);
|
||||
VERIFY(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
skip = 0;
|
||||
ret = H5Aiterate_by_name(fid, dsetname, idx_type, order, &skip, attr_iterate2_fail_cb, NULL, H5P_DEFAULT);
|
||||
VERIFY(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
skip = 0;
|
||||
ret = H5Aiterate_by_name(obj_id, ".", idx_type, order, &skip, attr_iterate2_fail_cb, NULL, H5P_DEFAULT);
|
||||
VERIFY(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Retrieve current # of errors */
|
||||
if(old_nerrs == GetTestNumErrs())
|
||||
return(0);
|
||||
@ -5877,6 +6008,7 @@ test_attr_iterate2(hbool_t new_format, hid_t fcpl, hid_t fapl)
|
||||
hbool_t *visited = NULL; /* Array of flags for visiting links */
|
||||
hsize_t idx; /* Start index for iteration */
|
||||
hbool_t use_index; /* Use index on creation order values */
|
||||
const char *dsetname; /* Name of dataset for attributes */
|
||||
char attrname[NAME_BUF_SIZE]; /* Name of attribute */
|
||||
unsigned curr_dset; /* Current dataset to work on */
|
||||
unsigned u; /* Local index variable */
|
||||
@ -5959,14 +6091,17 @@ test_attr_iterate2(hbool_t new_format, hid_t fcpl, hid_t fapl)
|
||||
switch(curr_dset) {
|
||||
case 0:
|
||||
my_dataset = dset1;
|
||||
dsetname = DSET1_NAME;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
my_dataset = dset2;
|
||||
dsetname = DSET2_NAME;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
my_dataset = dset3;
|
||||
dsetname = DSET3_NAME;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -5980,9 +6115,15 @@ test_attr_iterate2(hbool_t new_format, hid_t fcpl, hid_t fapl)
|
||||
VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
|
||||
|
||||
/* Check for iterating over object with no attributes (should be OK) */
|
||||
ret = H5Aiterate2(my_dataset, ".", idx_type, order, NULL, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(my_dataset, idx_type, order, NULL, attr_iterate2_cb, NULL);
|
||||
CHECK(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
ret = H5Aiterate_by_name(fid, dsetname, idx_type, order, NULL, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
ret = H5Aiterate_by_name(my_dataset, ".", idx_type, order, NULL, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
CHECK(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Create attributes, up to limit of compact form */
|
||||
for(u = 0; u < max_compact; u++) {
|
||||
/* Create attribute */
|
||||
@ -6014,11 +6155,19 @@ test_attr_iterate2(hbool_t new_format, hid_t fcpl, hid_t fapl)
|
||||
|
||||
/* Check for out of bound iteration */
|
||||
idx = u;
|
||||
ret = H5Aiterate2(my_dataset, ".", idx_type, order, &idx, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(my_dataset, idx_type, order, &idx, attr_iterate2_cb, NULL);
|
||||
VERIFY(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
idx = u;
|
||||
ret = H5Aiterate_by_name(fid, dsetname, idx_type, order, &idx, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
VERIFY(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
idx = u;
|
||||
ret = H5Aiterate_by_name(my_dataset, ".", idx_type, order, &idx, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
VERIFY(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Test iteration over attributes stored compactly */
|
||||
ret = attr_iterate_check(my_dataset, idx_type, order, u, &iter_info);
|
||||
ret = attr_iterate_check(fid, dsetname, my_dataset, idx_type, order, u, &iter_info);
|
||||
CHECK(ret, FAIL, "attr_iterate_check");
|
||||
} /* end for */
|
||||
|
||||
@ -6028,14 +6177,17 @@ test_attr_iterate2(hbool_t new_format, hid_t fcpl, hid_t fapl)
|
||||
switch(curr_dset) {
|
||||
case 0:
|
||||
my_dataset = dset1;
|
||||
dsetname = DSET1_NAME;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
my_dataset = dset2;
|
||||
dsetname = DSET2_NAME;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
my_dataset = dset3;
|
||||
dsetname = DSET3_NAME;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -6088,11 +6240,19 @@ test_attr_iterate2(hbool_t new_format, hid_t fcpl, hid_t fapl)
|
||||
|
||||
/* Check for out of bound iteration */
|
||||
idx = u;
|
||||
ret = H5Aiterate2(my_dataset, ".", idx_type, order, &idx, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(my_dataset, idx_type, order, &idx, attr_iterate2_cb, NULL);
|
||||
VERIFY(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
idx = u;
|
||||
ret = H5Aiterate_by_name(fid, dsetname, idx_type, order, &idx, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
VERIFY(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
idx = u;
|
||||
ret = H5Aiterate_by_name(my_dataset, ".", idx_type, order, &idx, attr_iterate2_cb, NULL, H5P_DEFAULT);
|
||||
VERIFY(ret, FAIL, "H5Aiterate_by_name");
|
||||
|
||||
/* Test iteration over attributes stored densely */
|
||||
ret = attr_iterate_check(my_dataset, idx_type, order, u, &iter_info);
|
||||
ret = attr_iterate_check(fid, dsetname, my_dataset, idx_type, order, u, &iter_info);
|
||||
CHECK(ret, FAIL, "attr_iterate_check");
|
||||
} /* end for */
|
||||
|
||||
@ -6459,7 +6619,8 @@ test_attr_open_by_idx(hbool_t new_format, hid_t fcpl, hid_t fapl)
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
attr_open_check(hid_t fid, const char *dsetname, hid_t obj_id, unsigned max_attrs)
|
||||
attr_open_check(hid_t fid, const char *dsetname, hid_t obj_id,
|
||||
unsigned max_attrs)
|
||||
{
|
||||
hid_t attr_id; /* ID of attribute to test */
|
||||
H5A_info_t ainfo; /* Attribute info */
|
||||
|
@ -443,28 +443,28 @@ static void test_iter_attr(hid_t fapl, hbool_t new_format)
|
||||
/* Test skipping exactly as many attributes as there are */
|
||||
idx = NATTR;
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info);
|
||||
} H5E_END_TRY;
|
||||
VERIFY(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
/* Test skipping more attributes than there are */
|
||||
idx = NATTR + 1;
|
||||
H5E_BEGIN_TRY {
|
||||
ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info, H5P_DEFAULT);
|
||||
ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info);
|
||||
} H5E_END_TRY;
|
||||
VERIFY(ret, FAIL, "H5Aiterate2");
|
||||
|
||||
/* Test all attributes on dataset, when callback always returns 0 */
|
||||
info.command = RET_ZERO;
|
||||
idx = 0;
|
||||
if((ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info, H5P_DEFAULT)) > 0)
|
||||
if((ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info)) > 0)
|
||||
TestErrPrintf("Attribute iteration function didn't return zero correctly!\n");
|
||||
|
||||
/* Test all attributes on dataset, when callback always returns 1 */
|
||||
/* This also tests the "restarting" ability, because the index changes */
|
||||
info.command = RET_TWO;
|
||||
idx = i = 0;
|
||||
while((ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info, H5P_DEFAULT)) > 0) {
|
||||
while((ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info)) > 0) {
|
||||
/* Verify return value from iterator gets propagated correctly */
|
||||
VERIFY(ret, 2, "H5Aiterate2");
|
||||
|
||||
@ -490,7 +490,7 @@ static void test_iter_attr(hid_t fapl, hbool_t new_format)
|
||||
/* This also tests the "restarting" ability, because the index changes */
|
||||
info.command = new_format ? RET_CHANGE2 : RET_CHANGE;
|
||||
idx = i = 0;
|
||||
while((ret = H5Aiterate2(dataset, ".", H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info, H5P_DEFAULT)) > 0) {
|
||||
while((ret = H5Aiterate2(dataset, H5_INDEX_NAME, H5_ITER_INC, &idx, aiter_cb, &info)) > 0) {
|
||||
/* Verify return value from iterator gets propagated correctly */
|
||||
VERIFY(ret, 1, "H5Aiterate2");
|
||||
|
||||
|
@ -1816,9 +1816,9 @@ dump_named_datatype(hid_t tid, const char *name)
|
||||
in the datatype's create property list for attributes, then, sort by creation order, otherwise by name */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(tid, ".", sort_by, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(tid, sort_by, sort_order, NULL, dump_attr_cb, NULL);
|
||||
else
|
||||
H5Aiterate2(tid, ".", H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(tid, H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL);
|
||||
|
||||
indent -= COL;
|
||||
end_obj(dump_header_format->datatypeend,
|
||||
@ -1928,15 +1928,15 @@ dump_group(hid_t gid, const char *name)
|
||||
/* attribute iteration: if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
|
||||
in the group for attributes, then, sort by creation order, otherwise by name */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, ".", sort_by, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
if((sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, sort_by, sort_order, NULL, dump_attr_cb, NULL);
|
||||
else
|
||||
H5Aiterate2(gid, ".", H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(gid, H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL);
|
||||
|
||||
/* if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
|
||||
in the group, then, sort by creation order, otherwise by name */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
if((sort_by == H5_INDEX_CRT_ORDER) && (crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Literate(gid, ".", sort_by, sort_order, NULL, dump_all_cb, NULL, H5P_DEFAULT);
|
||||
else
|
||||
H5Literate(gid, ".", H5_INDEX_NAME, sort_order, NULL, dump_all_cb, NULL, H5P_DEFAULT);
|
||||
@ -1951,15 +1951,15 @@ dump_group(hid_t gid, const char *name)
|
||||
/* attribute iteration: if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
|
||||
in the group for attributes, then, sort by creation order, otherwise by name */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, ".", sort_by, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
if((sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, sort_by, sort_order, NULL, dump_attr_cb, NULL);
|
||||
else
|
||||
H5Aiterate2(gid, ".", H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(gid, H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL);
|
||||
|
||||
/* if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
|
||||
in the group, then, sort by creation order, otherwise by name */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
if((sort_by == H5_INDEX_CRT_ORDER) && (crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Literate(gid, ".", sort_by, sort_order, NULL, dump_all_cb, NULL, H5P_DEFAULT);
|
||||
else
|
||||
H5Literate(gid, ".", H5_INDEX_NAME, sort_order, NULL, dump_all_cb, NULL, H5P_DEFAULT);
|
||||
@ -2057,9 +2057,9 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
|
||||
in the group for attributes, then, sort by creation order, otherwise by name */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(did, ".", sort_by, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(did, sort_by, sort_order, NULL, dump_attr_cb, NULL);
|
||||
else
|
||||
H5Aiterate2(did, ".", H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(did, H5_INDEX_NAME, sort_order, NULL, dump_attr_cb, NULL);
|
||||
|
||||
indent -= COL;
|
||||
|
||||
@ -5431,10 +5431,10 @@ xml_dump_group(hid_t gid, const char *name)
|
||||
|
||||
/* 1. do all the attributes of the group */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, ".", sort_by, sort_order, NULL, dump_function_table->dump_attribute_function, NULL, H5P_DEFAULT);
|
||||
if((sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, sort_by, sort_order, NULL, dump_function_table->dump_attribute_function, NULL);
|
||||
else
|
||||
H5Aiterate2(gid, ".", H5_INDEX_NAME, sort_order, NULL, dump_function_table->dump_attribute_function, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(gid, H5_INDEX_NAME, sort_order, NULL, dump_function_table->dump_attribute_function, NULL);
|
||||
|
||||
if(isRoot && unamedtype) {
|
||||
unsigned u;
|
||||
@ -5495,10 +5495,10 @@ xml_dump_group(hid_t gid, const char *name)
|
||||
|
||||
/* 1. do all the attributes of the group */
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, ".", sort_by, sort_order, NULL, dump_function_table->dump_attribute_function, NULL, H5P_DEFAULT);
|
||||
if((sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(gid, sort_by, sort_order, NULL, dump_function_table->dump_attribute_function, NULL);
|
||||
else
|
||||
H5Aiterate2(gid, ".", H5_INDEX_NAME, sort_order, NULL, dump_function_table->dump_attribute_function, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(gid, H5_INDEX_NAME, sort_order, NULL, dump_function_table->dump_attribute_function, NULL);
|
||||
|
||||
|
||||
if(isRoot && unamedtype) {
|
||||
@ -6153,10 +6153,10 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
|
||||
|
||||
indent += COL;
|
||||
|
||||
if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(did, ".", sort_by, sort_order, NULL, dump_function_table->dump_attribute_function, NULL, H5P_DEFAULT);
|
||||
if((sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED))
|
||||
H5Aiterate2(did, sort_by, sort_order, NULL, dump_function_table->dump_attribute_function, NULL);
|
||||
else
|
||||
H5Aiterate2(did, ".", H5_INDEX_NAME, sort_order, NULL, dump_function_table->dump_attribute_function, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(did, H5_INDEX_NAME, sort_order, NULL, dump_function_table->dump_attribute_function, NULL);
|
||||
|
||||
indent -= COL;
|
||||
tempi = H5Dget_storage_size(did);
|
||||
|
@ -1787,7 +1787,7 @@ list(hid_t group, const char *name, const H5L_info_t *linfo, void *_iter)
|
||||
|
||||
/* Display attributes */
|
||||
if(oi.type >= 0)
|
||||
H5Aiterate2(obj, ".", H5_INDEX_NAME, H5_ITER_INC, NULL, list_attr, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(obj, H5_INDEX_NAME, H5_ITER_INC, NULL, list_attr, NULL);
|
||||
|
||||
/* Object location & reference count */
|
||||
printf(" %-10s %lu:"H5_PRINTF_HADDR_FMT"\n", "Location:", oi.fileno, oi.addr);
|
||||
@ -2315,7 +2315,7 @@ main(int argc, const char *argv[])
|
||||
if(verbose_g > 0) {
|
||||
if((root = H5Gopen2(file, "/", H5P_DEFAULT)) < 0)
|
||||
leave(1);
|
||||
H5Aiterate2(root, ".", H5_INDEX_NAME, H5_ITER_INC, NULL, list_attr, NULL, H5P_DEFAULT);
|
||||
H5Aiterate2(root, H5_INDEX_NAME, H5_ITER_INC, NULL, list_attr, NULL);
|
||||
if(H5Gclose(root) < 0)
|
||||
leave(1);
|
||||
} /* end if */
|
||||
|
Loading…
Reference in New Issue
Block a user