mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-12 15:04:59 +08:00
cf25524474
* Create a tag file for permalinks. * Added DOXYGEN_TAG_FILE. * Added Doxygen life-cycle examples for different modules. Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
228 lines
6.2 KiB
C
228 lines
6.2 KiB
C
/* -*- c-file-style: "stroustrup" -*- */
|
|
|
|
#include "hdf5.h"
|
|
|
|
#include <assert.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
int
|
|
main(void)
|
|
{
|
|
int ret_val = EXIT_SUCCESS;
|
|
|
|
//! <!-- [create] -->
|
|
{
|
|
__label__ fail_dcpl;
|
|
hid_t dcpl;
|
|
|
|
// every property list is created as an instance of a suitable
|
|
// property list class
|
|
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) == H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_dcpl;
|
|
}
|
|
|
|
// ...
|
|
|
|
H5Pclose(dcpl);
|
|
fail_dcpl:;
|
|
}
|
|
//! <!-- [create] -->
|
|
|
|
//! <!-- [read] -->
|
|
{
|
|
__label__ fail_dcpl, fail_plist_cls_id;
|
|
hid_t dcpl, plist_cls_id;
|
|
|
|
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) == H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_dcpl;
|
|
}
|
|
// to perform introspection on any kind of property list,
|
|
// we need to determine its property list class by obtaining a handle
|
|
if ((plist_cls_id = H5Pget_class(dcpl)) == H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_plist_cls_id;
|
|
}
|
|
// Compare the handle to the handles of built-in or user-defined
|
|
// property list classes
|
|
assert(H5Pequal(plist_cls_id, H5P_DATASET_CREATE) > 0);
|
|
|
|
fail_plist_cls_id:
|
|
H5Pclose(dcpl);
|
|
fail_dcpl:;
|
|
}
|
|
//! <!-- [read] -->
|
|
|
|
//! <!-- [update] -->
|
|
{
|
|
__label__ fail_dcpl, fail_prop;
|
|
hid_t dcpl;
|
|
|
|
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) == H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_dcpl;
|
|
}
|
|
|
|
// a property list is updated by adding (or removing) properties
|
|
if (H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_prop;
|
|
}
|
|
|
|
fail_prop:
|
|
H5Pclose(dcpl);
|
|
fail_dcpl:;
|
|
}
|
|
//! <!-- [update] -->
|
|
|
|
//! <!-- [delete] -->
|
|
{
|
|
__label__ fail_dcpl;
|
|
hid_t dcpl;
|
|
|
|
if ((dcpl = H5Pcreate(H5P_DATASET_CREATE)) == H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_dcpl;
|
|
}
|
|
|
|
// a property list is "deleted" by closing it
|
|
H5Pclose(dcpl);
|
|
fail_dcpl:;
|
|
}
|
|
//! <!-- [delete] -->
|
|
|
|
//! <!-- [create_class] -->
|
|
{
|
|
__label__ fail_cls, fail_prop;
|
|
hid_t plist_cls, plist;
|
|
int izero = 0;
|
|
double dzero = 0.0;
|
|
|
|
// create a new property list class
|
|
if ((plist_cls = H5Pcreate_class(H5P_ROOT, "int & double", NULL, NULL, NULL, NULL, NULL, NULL)) ==
|
|
H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_cls;
|
|
}
|
|
// add a permanent integer property
|
|
if (H5Pregister2(plist_cls, "int", sizeof(int), &izero, NULL, NULL, NULL, NULL, NULL, NULL, NULL) <
|
|
0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_prop;
|
|
}
|
|
// add a permanent double property
|
|
if (H5Pregister2(plist_cls, "double", sizeof(double), &dzero, NULL, NULL, NULL, NULL, NULL, NULL,
|
|
NULL) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_prop;
|
|
}
|
|
// create an instance of this user-defined property list class
|
|
if ((plist = H5Pcreate(plist_cls)) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_prop;
|
|
}
|
|
|
|
// ...
|
|
|
|
H5Pclose(plist);
|
|
fail_prop:
|
|
H5Pclose_class(plist_cls);
|
|
fail_cls:;
|
|
}
|
|
//! <!-- [create_class] -->
|
|
|
|
//! <!-- [read_class] -->
|
|
{
|
|
__label__ fail_cls, fail_prop, fail_plist;
|
|
hid_t plist_cls, plist;
|
|
size_t nprops;
|
|
|
|
if ((plist_cls = H5Pcreate_class(H5P_ROOT, "ud_plist", NULL, NULL, NULL, NULL, NULL, NULL)) ==
|
|
H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_cls;
|
|
}
|
|
if ((plist = H5Pcreate(plist_cls)) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_prop;
|
|
}
|
|
if (H5Pinsert2(plist, "temp", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_plist;
|
|
}
|
|
// count the registered properties of this class
|
|
if (H5Pget_nprops(plist_cls, &nprops) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_plist;
|
|
}
|
|
// this will be 0 as there are no registered properties
|
|
printf("Property list class has %lu registered properties.\n", nprops);
|
|
|
|
// count the properties in this property list
|
|
if (H5Pget_nprops(plist, &nprops) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_plist;
|
|
}
|
|
// will be 1 as there is one temporary property
|
|
printf("Property list has %lu property.\n", nprops);
|
|
|
|
fail_plist:
|
|
H5Pclose(plist);
|
|
fail_prop:
|
|
H5Pclose_class(plist_cls);
|
|
fail_cls:;
|
|
}
|
|
//! <!-- [read_class] -->
|
|
|
|
//! <!-- [update_class] -->
|
|
{
|
|
__label__ fail_cls, fail_prop, fail_plist;
|
|
hid_t plist_cls, plist;
|
|
|
|
if ((plist_cls = H5Pcreate_class(H5P_ROOT, "ud_plist", NULL, NULL, NULL, NULL, NULL, NULL)) ==
|
|
H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_cls;
|
|
}
|
|
// create an instance of this user-defined property list class
|
|
if ((plist = H5Pcreate(plist_cls)) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_prop;
|
|
}
|
|
// insert a temporary property
|
|
if (H5Pinsert2(plist, "temp", 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_plist;
|
|
}
|
|
|
|
fail_plist:
|
|
H5Pclose(plist);
|
|
fail_prop:
|
|
H5Pclose_class(plist_cls);
|
|
fail_cls:;
|
|
}
|
|
//! <!-- [update_class] -->
|
|
|
|
//! <!-- [delete_class] -->
|
|
{
|
|
__label__ fail_cls;
|
|
hid_t plist_cls;
|
|
|
|
if ((plist_cls = H5Pcreate_class(H5P_ROOT, "int & double", NULL, NULL, NULL, NULL, NULL, NULL)) ==
|
|
H5I_INVALID_HID) {
|
|
ret_val = EXIT_FAILURE;
|
|
goto fail_cls;
|
|
}
|
|
// ...
|
|
|
|
// a user defined property list class is destroyed by closing the handle
|
|
H5Pclose_class(plist_cls);
|
|
fail_cls:;
|
|
}
|
|
//! <!-- [delete_class] -->
|
|
|
|
return ret_val;
|
|
}
|