-
-
Notifications
You must be signed in to change notification settings - Fork 265
/
h5ex_d_alloc.c
135 lines (115 loc) · 4.47 KB
/
h5ex_d_alloc.c
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
/************************************************************
This example shows how to set the space allocation time
for a dataset. The program first creates two datasets,
one with the default allocation time (late) and one with
early allocation time, and displays whether each has been
allocated and their allocation size. Next, it writes data
to the datasets, and again displays whether each has been
allocated and their allocation size.
************************************************************/
#include "hdf5.h"
#include <stdio.h>
#include <stdlib.h>
#define FILE "h5ex_d_alloc.h5"
#define DATASET1 "DS1"
#define DATASET2 "DS2"
#define DIM0 4
#define DIM1 7
#define FILLVAL 99
int
main(void)
{
hid_t file = H5I_INVALID_HID;
hid_t space = H5I_INVALID_HID;
hid_t dset1 = H5I_INVALID_HID;
hid_t dset2 = H5I_INVALID_HID;
hid_t dcpl = H5I_INVALID_HID;
/* Handles */
herr_t status;
H5D_space_status_t space_status;
hsize_t dims[2] = {DIM0, DIM1};
hsize_t storage_size;
int wdata[DIM0][DIM1]; /* Write buffer */
hsize_t i, j;
/*
* Initialize data.
*/
for (i = 0; i < DIM0; i++)
for (j = 0; j < DIM1; j++)
wdata[i][j] = i * j - j;
/*
* Create a new file using the default properties.
*/
file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
/*
* Create dataspace. Setting maximum size to NULL sets the maximum
* size to be the current size.
*/
space = H5Screate_simple(2, dims, NULL);
/*
* Create the dataset creation property list, and set the chunk
* size.
*/
dcpl = H5Pcreate(H5P_DATASET_CREATE);
/*
* Set the allocation time to "early". This way we can be sure
* that reading from the dataset immediately after creation will
* return the fill value.
*/
status = H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY);
printf("Creating datasets...\n");
printf("%s has allocation time H5D_ALLOC_TIME_LATE\n", DATASET1);
printf("%s has allocation time H5D_ALLOC_TIME_EARLY\n\n", DATASET2);
/*
* Create the dataset using the dataset creation property list.
*/
dset1 = H5Dcreate(file, DATASET1, H5T_STD_I32LE, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
dset2 = H5Dcreate(file, DATASET2, H5T_STD_I32LE, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
/*
* Retrieve and print space status and storage size for dset1.
*/
status = H5Dget_space_status(dset1, &space_status);
storage_size = H5Dget_storage_size(dset1);
printf("Space for %s has%sbeen allocated.\n", DATASET1,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf("Storage size for %s is: %ld bytes.\n", DATASET1, (long)storage_size);
/*
* Retrieve and print space status and storage size for dset2.
*/
status = H5Dget_space_status(dset2, &space_status);
storage_size = H5Dget_storage_size(dset2);
printf("Space for %s has%sbeen allocated.\n", DATASET2,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf("Storage size for %s is: %ld bytes.\n", DATASET2, (long)storage_size);
printf("\nWriting data...\n\n");
/*
* Write the data to the datasets.
*/
status = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata[0]);
status = H5Dwrite(dset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata[0]);
/*
* Retrieve and print space status and storage size for dset1.
*/
status = H5Dget_space_status(dset1, &space_status);
storage_size = H5Dget_storage_size(dset1);
printf("Space for %s has%sbeen allocated.\n", DATASET1,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf("Storage size for %s is: %ld bytes.\n", DATASET1, (long)storage_size);
/*
* Retrieve and print space status and storage size for dset2.
*/
status = H5Dget_space_status(dset2, &space_status);
storage_size = H5Dget_storage_size(dset2);
printf("Space for %s has%sbeen allocated.\n", DATASET2,
space_status == H5D_SPACE_STATUS_ALLOCATED ? " " : " not ");
printf("Storage size for %s is: %ld bytes.\n", DATASET2, (long)storage_size);
/*
* Close and release resources.
*/
status = H5Pclose(dcpl);
status = H5Dclose(dset1);
status = H5Dclose(dset2);
status = H5Sclose(space);
status = H5Fclose(file);
return 0;
}