summaryrefslogtreecommitdiffstats
path: root/doxygen/examples/H5A_examples.c
blob: f332efac8cdc425d8c2a97134fbf33bb68c24908 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/* -*- c-file-style: "stroustrup" -*- */

#include "hdf5.h"

#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
    int ret_val = EXIT_SUCCESS;

    //! <!-- [create] -->
    {
        __label__ fail_acpl, fail_attr, fail_file;
        hid_t file, acpl, fspace, attr;

        unsigned mode        = H5F_ACC_TRUNC;
        char     file_name[] = "f1.h5";
        // attribute names can be arbitrary Unicode strings
        char attr_name[] = "Χαρακτηριστικό";

        if ((file = H5Fcreate(file_name, mode, H5P_DEFAULT, H5P_DEFAULT)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_file;
        }
        if ((acpl = H5Pcreate(H5P_ATTRIBUTE_CREATE)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_acpl;
        }
        // use UTF-8 encoding for the attribute name
        if (H5Pset_char_encoding(acpl, H5T_CSET_UTF8) < 0) {
            ret_val = EXIT_FAILURE;
            goto fail_fspace;
        }
        // create a scalar (singleton) attribute
        if ((fspace = H5Screate(H5S_SCALAR)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_fspace;
        }
        // create an attribute on the root group
        if ((attr = H5Acreate2(file, attr_name, H5T_STD_I32LE, fspace, acpl, H5P_DEFAULT)) ==
            H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_attr;
        }

        H5Aclose(attr);
fail_attr:
        H5Sclose(fspace);
fail_fspace:
        H5Pclose(acpl);
fail_acpl:
        H5Fclose(file);
fail_file:;
    }
    //! <!-- [create] -->

    //! <!-- [read] -->
    {
        __label__ fail_attr, fail_file;
        hid_t file, attr;

        unsigned mode        = H5F_ACC_RDONLY;
        char     file_name[] = "f1.h5";
        char     attr_name[] = "Χαρακτηριστικό";
        int      value;

        if ((file = H5Fopen(file_name, mode, H5P_DEFAULT)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_file;
        }
        if ((attr = H5Aopen(file, attr_name, H5P_DEFAULT)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_attr;
        }
        // read the attribute value
        if (H5Aread(attr, H5T_NATIVE_INT, &value) < 0)
            ret_val = EXIT_FAILURE;

        // do something w/ the attribute value

        H5Aclose(attr);
fail_attr:
        H5Fclose(file);
fail_file:;
    }
    //! <!-- [read] -->

    //! <!-- [update] -->
    {
        __label__ fail_attr, fail_file;
        hid_t file, attr;

        unsigned mode        = H5F_ACC_RDWR;
        char     file_name[] = "f1.h5";
        char     attr_name[] = "Χαρακτηριστικό";
        int      value       = 1234;

        if ((file = H5Fopen(file_name, mode, H5P_DEFAULT)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_file;
        }
        if ((attr = H5Aopen(file, attr_name, H5P_DEFAULT)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_attr;
        }
        // update the attribute value
        if (H5Awrite(attr, H5T_NATIVE_INT, &value) < 0)
            ret_val = EXIT_FAILURE;

        H5Aclose(attr);
fail_attr:
        H5Fclose(file);
fail_file:;
    }
    //! <!-- [update] -->

    //! <!-- [delete] -->
    {
        __label__ fail_attr, fail_file;
        hid_t file;

        unsigned mode        = H5F_ACC_RDWR;
        char     file_name[] = "f1.h5";
        char     attr_name[] = "Χαρακτηριστικό";

        if ((file = H5Fopen(file_name, mode, H5P_DEFAULT)) == H5I_INVALID_HID) {
            ret_val = EXIT_FAILURE;
            goto fail_file;
        }
        // delete the attribute
        if (H5Adelete(file, attr_name) < 0) {
            ret_val = EXIT_FAILURE;
            goto fail_attr;
        }

fail_attr:
        H5Fclose(file);
fail_file:;
    }
    //! <!-- [delete] -->

    return ret_val;
}