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
|
/****************************************************************************
* NCSA HDF *
* Software Development Group *
* National Center for Supercomputing Applications *
* University of Illinois at Urbana-Champaign *
* 605 E. Springfield, Champaign IL 61820 *
* *
* For conditions of distribution and use, see the accompanying *
* hdf/COPYING file. *
* *
****************************************************************************/
/*
* This file contains private information about the H5S module
*/
#ifndef _H5Sprivate_H
#define _H5Sprivate_H
#include <H5Spublic.h>
/* Private headers needed by this file */
#include <H5private.h>
#include <H5Gprivate.h> /*for H5G_entry_t */
#include <H5Oprivate.h>
#define H5S_RESERVED_ATOMS 2
/* Flags to indicate special dataspace features are active */
#define H5S_VALID_MAX 0x01
#define H5S_VALID_PERM 0x02
typedef struct H5S_hyperslab_t {
intn *start; /* Location of start of hyperslab */
size_t *count; /* Number of elements in hyperslab */
size_t *stride; /* Packing of values of hyperslab */
} H5S_hyperslab_t;
typedef struct H5S_simple_t {
intn rank; /*number of dimensions */
size_t *size; /*dimension sizes */
size_t *max; /*maximum dimension sizes or NULL */
intn *perm; /*dimension permutations or NULL */
} H5S_simple_t;
typedef struct H5S_t {
H5S_class_t type; /*type of dimensionality object */
union {
H5S_simple_t simple; /*simple dimensionality information */
} u;
uintn hslab_def; /* Whether the hyperslab is defined */
H5S_hyperslab_t h; /* Hyperslab information */
} H5S_t;
/*
* This structure contains information about how the elements of a data space
* are numbered.
*/
typedef struct H5S_number_t {
int _place_holder; /*remove this field! */
} H5S_number_t;
/*
* Callbacks for data space conversion.
*/
typedef struct H5S_tconv_t {
/* Initialize element numbering information */
size_t (*init)(const struct H5O_layout_t *layout, const H5S_t *mem_space,
const H5S_t *file_space, H5S_number_t *numbering/*out*/);
/* Gather elements from disk to type conversion buffer */
size_t (*fgath)(H5F_t *f, const struct H5O_layout_t *layout,
size_t elmt_size, const H5S_t *file_space,
const H5S_number_t *numbering, size_t start, size_t nelmts,
void *tconv_buf/*out*/);
/* Scatter elements from type conversion buffer to application buffer */
herr_t (*mscat)(const void *tconv_buf, size_t elmt_size,
const H5S_t *mem_space, const H5S_number_t *numbering,
size_t start, size_t nelmts, void *buf/*out*/);
/* Gather elements from app buffer to type conversion buffer */
size_t (*mgath)(const void *buf, size_t elmt_size,
const H5S_t *mem_space, const H5S_number_t *numbering,
size_t start, size_t nelmts, void *tconv_buf/*out*/);
/* Scatter elements from type conversion buffer to disk */
herr_t (*fscat)(H5F_t *f, const struct H5O_layout_t *layout,
size_t elmt_size, const H5S_t *file_space,
const H5S_number_t *numbering, size_t start, size_t nelmts,
const void *tconv_buf);
} H5S_conv_t;
H5S_t *H5S_copy (const H5S_t *src);
herr_t H5S_close (H5S_t *ds);
size_t H5S_get_npoints (const H5S_t *ds);
intn H5S_get_ndims (const H5S_t *ds);
intn H5S_get_dims (const H5S_t *ds, size_t dims[]/*out*/);
herr_t H5S_modify (H5G_entry_t *ent, const H5S_t *space);
H5S_t *H5S_read (H5F_t *f, H5G_entry_t *ent);
intn H5S_cmp (const H5S_t *ds1, const H5S_t *ds2);
hbool_t H5S_is_simple (const H5S_t *sdim);
uintn H5S_nelem (const H5S_t *space);
const H5S_conv_t *H5S_find (const H5S_t *mem_space, const H5S_t *file_space);
intn H5S_get_hyperslab (const H5S_t *ds, int offset[]/*out*/,
size_t size[]/*out*/, size_t stride[]/*out*/);
intn H5S_extend (H5S_t *space, const size_t *size);
/* Conversion functions for simple data spaces */
size_t H5S_simp_init (const struct H5O_layout_t *layout,
const H5S_t *mem_space, const H5S_t *file_space,
H5S_number_t *numbering/*out*/);
size_t H5S_simp_fgath (H5F_t *f, const struct H5O_layout_t *layout,
size_t elmt_size, const H5S_t *file_space,
const H5S_number_t *numbering, size_t start,
size_t nelmts, void *tconv_buf/*out*/);
herr_t H5S_simp_mscat (const void *tconv_buf, size_t elmt_size,
const H5S_t *mem_space, const H5S_number_t *numbering,
size_t start, size_t nelmts, void *buf/*out*/);
size_t H5S_simp_mgath (const void *buf, size_t elmt_size,
const H5S_t *mem_space, const H5S_number_t *numbering,
size_t start, size_t nelmts, void *tconv_buf/*out*/);
herr_t H5S_simp_fscat (H5F_t *f, const struct H5O_layout_t *layout,
size_t elmt_size, const H5S_t *file_space,
const H5S_number_t *numbering, size_t start,
size_t nelmts, const void *tconv_buf);
#endif
|