hdf5/doxygen/examples/H5P_examples.c
Gerd Heber cf25524474
A batch of life-cycle examples for different modules (#654)
* 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>
2021-09-01 16:09:27 -05:00

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;
}