2004-02-10 23:42:55 +08:00
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
2007-02-07 22:56:24 +08:00
|
|
|
* Copyright by The HDF Group. *
|
2004-02-10 23:42:55 +08:00
|
|
|
* All rights reserved. *
|
|
|
|
* *
|
|
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
|
|
* terms governing use, modification, and redistribution, is contained in *
|
2017-04-18 03:32:16 +08:00
|
|
|
* the COPYING file, which can be found at the root of the source code *
|
2021-02-17 22:52:36 +08:00
|
|
|
* distribution tree, or in https://www.hdfgroup.org/licenses. *
|
2017-04-18 03:32:16 +08:00
|
|
|
* If you do not have access to either file, you may request a copy from *
|
|
|
|
* help@hdfgroup.org. *
|
2004-02-10 23:42:55 +08:00
|
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
|
1998-02-14 06:04:07 +08:00
|
|
|
/*
|
2005-08-14 04:53:35 +08:00
|
|
|
* This program creates a group in the file and two datasets in the group.
|
1999-06-26 02:11:08 +08:00
|
|
|
* Hard link to the group object is created and one of the datasets is accessed
|
2005-08-14 04:53:35 +08:00
|
|
|
* under new name.
|
1999-06-26 02:11:08 +08:00
|
|
|
* Iterator functions are used to find information about the objects
|
2005-08-14 04:53:35 +08:00
|
|
|
* in the root group and in the created group.
|
|
|
|
*/
|
1998-02-14 06:04:07 +08:00
|
|
|
|
1998-02-10 23:22:51 +08:00
|
|
|
#include "hdf5.h"
|
|
|
|
|
2020-09-30 22:27:10 +08:00
|
|
|
#define H5FILE_NAME "group.h5"
|
|
|
|
#define RANK 2
|
1998-02-10 23:22:51 +08:00
|
|
|
|
2020-01-17 05:29:34 +08:00
|
|
|
static herr_t file_info(hid_t loc_id, const char *name, const H5L_info2_t *linfo,
|
2020-09-30 22:27:10 +08:00
|
|
|
void *opdata); /* Link iteration operator function */
|
2020-01-17 05:29:34 +08:00
|
|
|
static herr_t group_info(hid_t loc_id, const char *name, const H5L_info2_t *linfo,
|
2020-09-30 22:27:10 +08:00
|
|
|
void *opdata); /* Link iteration operator function */
|
1998-09-01 03:21:23 +08:00
|
|
|
int
|
|
|
|
main(void)
|
1998-02-10 23:22:51 +08:00
|
|
|
{
|
|
|
|
|
2020-09-30 22:27:10 +08:00
|
|
|
hid_t file;
|
|
|
|
hid_t grp;
|
|
|
|
hid_t dataset, dataspace;
|
|
|
|
hid_t plist;
|
1998-09-01 03:21:23 +08:00
|
|
|
|
2020-09-30 22:27:10 +08:00
|
|
|
herr_t status;
|
|
|
|
hsize_t dims[2];
|
|
|
|
hsize_t cdims[2];
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2020-09-30 22:27:10 +08:00
|
|
|
int idx_f, idx_g;
|
1998-09-01 03:21:23 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Create a file.
|
|
|
|
*/
|
2001-06-06 02:00:37 +08:00
|
|
|
file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
|
|
|
/*
|
2005-08-14 04:53:35 +08:00
|
|
|
* Create a group in the file.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
2007-08-24 04:25:25 +08:00
|
|
|
grp = H5Gcreate2(file, "/Data", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
1998-10-27 02:02:52 +08:00
|
|
|
/*
|
|
|
|
* Create dataset "Compressed Data" in the group using absolute
|
2005-08-14 04:53:35 +08:00
|
|
|
* name. Dataset creation property list is modified to use
|
|
|
|
* GZIP compression with the compression effort set to 6.
|
|
|
|
* Note that compression can be used only when dataset is chunked.
|
1998-10-27 02:02:52 +08:00
|
|
|
*/
|
2020-09-30 22:27:10 +08:00
|
|
|
dims[0] = 1000;
|
|
|
|
dims[1] = 20;
|
|
|
|
cdims[0] = 20;
|
|
|
|
cdims[1] = 20;
|
1998-10-27 02:02:52 +08:00
|
|
|
dataspace = H5Screate_simple(RANK, dims, NULL);
|
|
|
|
plist = H5Pcreate(H5P_DATASET_CREATE);
|
2020-09-30 22:27:10 +08:00
|
|
|
H5Pset_chunk(plist, 2, cdims);
|
|
|
|
H5Pset_deflate(plist, 6);
|
|
|
|
dataset =
|
|
|
|
H5Dcreate2(file, "/Data/Compressed_Data", H5T_NATIVE_INT, dataspace, H5P_DEFAULT, plist, H5P_DEFAULT);
|
2005-08-14 04:53:35 +08:00
|
|
|
/*
|
1999-06-26 02:11:08 +08:00
|
|
|
* Close the first dataset .
|
|
|
|
*/
|
|
|
|
H5Sclose(dataspace);
|
|
|
|
H5Dclose(dataset);
|
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
/*
|
1999-06-26 02:11:08 +08:00
|
|
|
* Create the second dataset.
|
|
|
|
*/
|
2020-09-30 22:27:10 +08:00
|
|
|
dims[0] = 500;
|
|
|
|
dims[1] = 20;
|
1999-06-26 02:11:08 +08:00
|
|
|
dataspace = H5Screate_simple(RANK, dims, NULL);
|
2020-09-30 22:27:10 +08:00
|
|
|
dataset = H5Dcreate2(file, "/Data/Float_Data", H5T_NATIVE_FLOAT, dataspace, H5P_DEFAULT, H5P_DEFAULT,
|
2022-07-27 05:45:46 +08:00
|
|
|
H5P_DEFAULT);
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
/*
|
1999-06-26 02:11:08 +08:00
|
|
|
*Close the second dataset and file.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
1998-10-27 02:02:52 +08:00
|
|
|
H5Sclose(dataspace);
|
|
|
|
H5Dclose(dataset);
|
2001-10-04 01:57:56 +08:00
|
|
|
H5Pclose(plist);
|
2006-01-26 00:53:14 +08:00
|
|
|
H5Gclose(grp);
|
1998-10-27 02:02:52 +08:00
|
|
|
H5Fclose(file);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
|
|
|
/*
|
2005-08-14 04:53:35 +08:00
|
|
|
* Now reopen the file and group in the file.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
2001-06-06 02:00:37 +08:00
|
|
|
file = H5Fopen(H5FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
|
2007-08-28 23:02:54 +08:00
|
|
|
grp = H5Gopen2(file, "Data", H5P_DEFAULT);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
/*
|
|
|
|
* Access "Compressed_Data" dataset in the group.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
[svn-r14193] Description:
Make H5Dopen versioned and change all internal usage to use H5Dopen2
Add simple regression test for H5Dopen1
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
2007-10-09 03:59:36 +08:00
|
|
|
dataset = H5Dopen2(grp, "Compressed_Data", H5P_DEFAULT);
|
2020-09-30 22:27:10 +08:00
|
|
|
if (dataset < 0)
|
|
|
|
printf(" Dataset 'Compressed-Data' is not found. \n");
|
1998-10-27 02:02:52 +08:00
|
|
|
printf("\"/Data/Compressed_Data\" dataset is open \n");
|
1998-09-01 03:21:23 +08:00
|
|
|
|
|
|
|
/*
|
1998-10-27 02:02:52 +08:00
|
|
|
* Close the dataset.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
1998-10-27 02:02:52 +08:00
|
|
|
status = H5Dclose(dataset);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
|
|
|
/*
|
1998-10-27 02:02:52 +08:00
|
|
|
* Create hard link to the Data group.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
2007-08-29 03:47:00 +08:00
|
|
|
status = H5Lcreate_hard(file, "Data", H5L_SAME_LOC, "Data_new", H5P_DEFAULT, H5P_DEFAULT);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
/*
|
1998-10-27 02:02:52 +08:00
|
|
|
* We can access "Compressed_Data" dataset using created
|
2005-08-14 04:53:35 +08:00
|
|
|
* hard link "Data_new".
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
[svn-r14193] Description:
Make H5Dopen versioned and change all internal usage to use H5Dopen2
Add simple regression test for H5Dopen1
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
2007-10-09 03:59:36 +08:00
|
|
|
dataset = H5Dopen2(file, "/Data_new/Compressed_Data", H5P_DEFAULT);
|
2020-09-30 22:27:10 +08:00
|
|
|
if (dataset < 0)
|
|
|
|
printf(" Dataset is not found. \n");
|
1998-10-27 02:02:52 +08:00
|
|
|
printf("\"/Data_new/Compressed_Data\" dataset is open \n");
|
1998-09-01 03:21:23 +08:00
|
|
|
|
|
|
|
/*
|
1998-10-27 02:02:52 +08:00
|
|
|
* Close the dataset.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
1998-10-27 02:02:52 +08:00
|
|
|
status = H5Dclose(dataset);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
/*
|
1999-06-26 02:11:08 +08:00
|
|
|
* Use iterator to see the names of the objects in the root group.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
2020-01-17 05:29:34 +08:00
|
|
|
idx_f = H5Literate2(file, H5_INDEX_NAME, H5_ITER_INC, NULL, file_info, NULL);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
1998-10-27 02:02:52 +08:00
|
|
|
/*
|
|
|
|
* Unlink name "Data" and use iterator to see the names
|
|
|
|
* of the objects in the file root direvtory.
|
|
|
|
*/
|
2020-09-30 22:27:10 +08:00
|
|
|
if (H5Ldelete(file, "Data", H5P_DEFAULT) < 0)
|
|
|
|
printf(" H5Ldelete failed \n");
|
2005-08-14 04:53:35 +08:00
|
|
|
else
|
2020-09-30 22:27:10 +08:00
|
|
|
printf("\"Data\" is unlinked \n");
|
1998-09-01 03:21:23 +08:00
|
|
|
|
2020-01-17 05:29:34 +08:00
|
|
|
idx_f = H5Literate2(file, H5_INDEX_NAME, H5_ITER_INC, NULL, file_info, NULL);
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2005-08-14 04:53:35 +08:00
|
|
|
/*
|
|
|
|
* Use iterator to see the names of the objects in the group
|
1999-06-26 02:11:08 +08:00
|
|
|
* /Data_new.
|
|
|
|
*/
|
2020-09-30 22:27:10 +08:00
|
|
|
idx_g = H5Literate_by_name2(grp, "/Data_new", H5_INDEX_NAME, H5_ITER_INC, NULL, group_info, NULL,
|
|
|
|
H5P_DEFAULT);
|
1998-10-27 02:02:52 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Close the file.
|
1998-09-01 03:21:23 +08:00
|
|
|
*/
|
2005-08-14 04:53:35 +08:00
|
|
|
|
2006-01-26 00:53:14 +08:00
|
|
|
H5Gclose(grp);
|
|
|
|
H5Fclose(file);
|
1998-09-01 03:21:23 +08:00
|
|
|
|
|
|
|
return 0;
|
1998-02-10 23:22:51 +08:00
|
|
|
}
|
1999-06-26 02:11:08 +08:00
|
|
|
|
1998-10-27 02:02:52 +08:00
|
|
|
/*
|
|
|
|
* Operator function.
|
|
|
|
*/
|
2007-08-31 04:03:37 +08:00
|
|
|
static herr_t
|
2020-01-17 05:29:34 +08:00
|
|
|
file_info(hid_t loc_id, const char *name, const H5L_info2_t *linfo, void *opdata)
|
1998-10-27 02:02:52 +08:00
|
|
|
{
|
2007-08-31 04:03:37 +08:00
|
|
|
/* avoid compiler warnings */
|
2021-03-05 05:06:30 +08:00
|
|
|
(void)loc_id;
|
|
|
|
(void)opdata;
|
|
|
|
(void)linfo;
|
2000-11-14 05:06:27 +08:00
|
|
|
|
1998-10-27 02:02:52 +08:00
|
|
|
/*
|
2005-08-14 04:53:35 +08:00
|
|
|
* Display group name. The name is passed to the function by
|
1999-06-26 02:11:08 +08:00
|
|
|
* the Library. Some magic :-)
|
1998-10-27 02:02:52 +08:00
|
|
|
*/
|
2007-08-31 04:03:37 +08:00
|
|
|
printf("\nName : %s\n", name);
|
2005-08-14 04:53:35 +08:00
|
|
|
|
1998-10-27 02:02:52 +08:00
|
|
|
return 0;
|
2007-08-31 04:03:37 +08:00
|
|
|
}
|
1999-06-26 02:11:08 +08:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Operator function.
|
|
|
|
*/
|
2007-08-31 04:03:37 +08:00
|
|
|
static herr_t
|
2020-01-17 05:29:34 +08:00
|
|
|
group_info(hid_t loc_id, const char *name, const H5L_info2_t *linfo, void *opdata)
|
1999-06-26 02:11:08 +08:00
|
|
|
{
|
2020-09-30 22:27:10 +08:00
|
|
|
hid_t did; /* dataset identifier */
|
|
|
|
hid_t tid; /* datatype identifier */
|
2007-08-31 04:03:37 +08:00
|
|
|
H5T_class_t t_class;
|
2020-09-30 22:27:10 +08:00
|
|
|
hid_t pid; /* data_property identifier */
|
|
|
|
hsize_t chunk_dims_out[2];
|
|
|
|
int rank_chunk;
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2007-08-31 04:03:37 +08:00
|
|
|
/* avoid warnings */
|
2021-03-05 05:06:30 +08:00
|
|
|
(void)opdata;
|
|
|
|
(void)linfo;
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2007-08-31 04:03:37 +08:00
|
|
|
/*
|
|
|
|
* Open the datasets using their names.
|
|
|
|
*/
|
[svn-r14193] Description:
Make H5Dopen versioned and change all internal usage to use H5Dopen2
Add simple regression test for H5Dopen1
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
2007-10-09 03:59:36 +08:00
|
|
|
did = H5Dopen2(loc_id, name, H5P_DEFAULT);
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2007-08-31 04:03:37 +08:00
|
|
|
/*
|
|
|
|
* Display dataset name.
|
|
|
|
*/
|
|
|
|
printf("\nName : %s\n", name);
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2007-08-31 04:03:37 +08:00
|
|
|
/*
|
|
|
|
* Display dataset information.
|
|
|
|
*/
|
2020-09-30 22:27:10 +08:00
|
|
|
tid = H5Dget_type(did); /* get datatype*/
|
2007-08-31 04:03:37 +08:00
|
|
|
pid = H5Dget_create_plist(did); /* get creation property list */
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2007-08-31 04:03:37 +08:00
|
|
|
/*
|
|
|
|
* Check if dataset is chunked.
|
|
|
|
*/
|
2020-09-30 22:27:10 +08:00
|
|
|
if (H5D_CHUNKED == H5Pget_layout(pid)) {
|
2007-08-31 04:03:37 +08:00
|
|
|
/*
|
|
|
|
* get chunking information: rank and dimensions.
|
|
|
|
*/
|
|
|
|
rank_chunk = H5Pget_chunk(pid, 2, chunk_dims_out);
|
2020-09-30 22:27:10 +08:00
|
|
|
printf("chunk rank %d, dimensions %lu x %lu\n", rank_chunk, (unsigned long)(chunk_dims_out[0]),
|
|
|
|
(unsigned long)(chunk_dims_out[1]));
|
2007-08-31 04:03:37 +08:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
t_class = H5Tget_class(tid);
|
2020-09-30 22:27:10 +08:00
|
|
|
if (t_class < 0) {
|
2007-08-31 04:03:37 +08:00
|
|
|
puts(" Invalid datatype.\n");
|
|
|
|
}
|
|
|
|
else {
|
2020-09-30 22:27:10 +08:00
|
|
|
if (t_class == H5T_INTEGER)
|
2007-08-31 04:03:37 +08:00
|
|
|
puts(" Datatype is 'H5T_NATIVE_INTEGER'.\n");
|
2020-09-30 22:27:10 +08:00
|
|
|
if (t_class == H5T_FLOAT)
|
2007-08-31 04:03:37 +08:00
|
|
|
puts(" Datatype is 'H5T_NATIVE_FLOAT'.\n");
|
2020-09-30 22:27:10 +08:00
|
|
|
if (t_class == H5T_STRING)
|
2007-08-31 04:03:37 +08:00
|
|
|
puts(" Datatype is 'H5T_NATIVE_STRING'.\n");
|
2020-09-30 22:27:10 +08:00
|
|
|
if (t_class == H5T_BITFIELD)
|
2007-08-31 04:03:37 +08:00
|
|
|
puts(" Datatype is 'H5T_NATIVE_BITFIELD'.\n");
|
2020-09-30 22:27:10 +08:00
|
|
|
if (t_class == H5T_OPAQUE)
|
2007-08-31 04:03:37 +08:00
|
|
|
puts(" Datatype is 'H5T_NATIVE_OPAQUE'.\n");
|
2020-09-30 22:27:10 +08:00
|
|
|
if (t_class == H5T_COMPOUND)
|
2007-08-31 04:03:37 +08:00
|
|
|
puts(" Datatype is 'H5T_NATIVE_COMPOUND'.\n");
|
|
|
|
}
|
|
|
|
}
|
1999-06-26 02:11:08 +08:00
|
|
|
|
2007-08-31 04:03:37 +08:00
|
|
|
H5Dclose(did);
|
|
|
|
H5Pclose(pid);
|
|
|
|
H5Tclose(tid);
|
|
|
|
return 0;
|
|
|
|
}
|