HDF5  1.12.0
H5Spkg.h
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  * Copyright by The HDF Group. *
3  * Copyright by the Board of Trustees of the University of Illinois. *
4  * All rights reserved. *
5  * *
6  * This file is part of HDF5. The full HDF5 copyright notice, including *
7  * terms governing use, modification, and redistribution, is contained in *
8  * the COPYING file, which can be found at the root of the source code *
9  * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
10  * If you do not have access to either file, you may request a copy from *
11  * help@hdfgroup.org. *
12  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
13 
14 /*
15  * Programmer: Quincey Koziol <koziol@ncsa.uiuc.edu>
16  * Thursday, September 28, 2000
17  *
18  * Purpose: This file contains declarations which are visible only within
19  * the H5S package. Source files outside the H5S package should
20  * include H5Sprivate.h instead.
21  */
22 #if !(defined H5S_FRIEND || defined H5S_MODULE)
23 #error "Do not include this file outside the H5S package!"
24 #endif
25 
26 #ifndef _H5Spkg_H
27 #define _H5Spkg_H
28 
29 /* Get package's private header */
30 #include "H5Sprivate.h"
31 
32 /* Other private headers needed by this file */
33 #include "H5Oprivate.h" /* Object headers */
34 
35 /* Flags to indicate special dataspace features are active */
36 #define H5S_VALID_MAX 0x01
37 #define H5S_VALID_PERM 0x02
38 
39 /* Flags for serialization of selections */
40 #define H5S_HYPER_REGULAR 0x01
41 #define H5S_SELECT_FLAG_BITS (H5S_HYPER_REGULAR)
42 
43 /* Versions for H5S_SEL_HYPER selection info */
44 #define H5S_HYPER_VERSION_1 1
45 #define H5S_HYPER_VERSION_2 2
46 #define H5S_HYPER_VERSION_3 3
47 #define H5S_HYPER_VERSION_LATEST H5S_HYPER_VERSION_3
48 
49 /* Versions for H5S_SEL_POINTS selection info */
50 #define H5S_POINT_VERSION_1 1
51 #define H5S_POINT_VERSION_2 2
52 
53 /* Versions for H5S_SEL_NONE selection info */
54 #define H5S_NONE_VERSION_1 1
55 
56 /* Versions for H5S_SEL_ALL selection info */
57 #define H5S_ALL_VERSION_1 1
58 
59 /* Encoded size of selection info for H5S_SEL_POINTS/H5S_SEL_HYPER */
60 #define H5S_SELECT_INFO_ENC_SIZE_2 0x02 /* 2 bytes: 16 bits */
61 #define H5S_SELECT_INFO_ENC_SIZE_4 0x04 /* 4 bytes: 32 bits */
62 #define H5S_SELECT_INFO_ENC_SIZE_8 0x08 /* 8 bytes: 64 bits */
63 #define H5S_SELECT_INFO_ENC_SIZE_BITS ( H5S_SELECT_INFO_ENC_SIZE_2 | \
64  H5S_SELECT_INFO_ENC_SIZE_4 | \
65  H5S_SELECT_INFO_ENC_SIZE_8 )
66 
67 #define H5S_UINT16_MAX 0x0000FFFF /* 2^16 - 1 = 65,535 */
68 #define H5S_UINT32_MAX 0xFFFFFFFF /* 2^32 - 1 = 4,294,967,295 */
69 #define H5S_UINT64_MAX ((hsize_t)(-1L)) /* 2^64 - 1 = 18,446,744,073,709,551,615 */
70 
71 /* Length of stack-allocated sequences for "project intersect" routines */
72 #define H5S_PROJECT_INTERSECT_NSEQS 256
73 
74 /* Internal flags for initializing selection iterators */
75 #define H5S_SEL_ITER_API_CALL 0x1000 /* Selection iterator created from API call */
76 
77 
78 /* Initial version of the dataspace information */
79 #define H5O_SDSPACE_VERSION_1 1
80 
81 /* This version adds support for "null" dataspaces, encodes the type of the
82  * dataspace in the message and eliminated the rest of the "reserved"
83  * bytes.
84  */
85 #define H5O_SDSPACE_VERSION_2 2
86 
87 /* The latest version of the format. Look through the 'encode'
88  * and 'size' callbacks for places to change when updating this. */
89 #define H5O_SDSPACE_VERSION_LATEST H5O_SDSPACE_VERSION_2
90 
91 /* Maximum dimension size (highest value that is not a special value e.g.
92  * H5S_UNLIMITED) */
93 #define H5S_MAX_SIZE ((hsize_t)(hssize_t)(-2))
94 
95 /* Macro for checking if two ranges overlap one another */
96 /*
97  * Check for the inverse of whether the ranges are disjoint. If they are
98  * disjoint, then the low bound of one of the ranges must be greater than the
99  * high bound of the other.
100  */
101 /* (Assumes that low & high bounds are _inclusive_) */
102 #define H5S_RANGE_OVERLAP(L1, H1, L2, H2) (!((L1) > (H2) || (L2) > (H1)))
103 
104 
105 /*
106  * Dataspace extent information
107  */
108 /* Extent container */
109 struct H5S_extent_t {
110  H5O_shared_t sh_loc; /* Shared message info (must be first) */
111 
112  H5S_class_t type; /* Type of extent */
113  unsigned version; /* Version of object header message to encode this object with */
114  hsize_t nelem; /* Number of elements in extent */
115 
116  unsigned rank; /* Number of dimensions */
117  hsize_t *size; /* Current size of the dimensions */
118  hsize_t *max; /* Maximum size of the dimensions */
119 };
120 
121 /*
122  * Dataspace selection information
123  */
124 
125 /* Node in point selection list (typedef'd in H5Sprivate.h) */
127  struct H5S_pnt_node_t *next; /* Pointer to next point in list */
128  hsize_t pnt[]; /* Selected point */
129  /* (NOTE: This uses the C99 "flexible array member" feature) */
130 };
131 
132 /* Information about point selection list (typedef'd in H5Sprivate.h) */
134  /* The following two fields defines the bounding box of the whole set of points, relative to the offset */
135  hsize_t low_bounds[H5S_MAX_RANK]; /* The smallest element selected in each dimension */
136  hsize_t high_bounds[H5S_MAX_RANK]; /* The largest element selected in each dimension */
137 
138  H5S_pnt_node_t *head; /* Pointer to head of point list */
139  H5S_pnt_node_t *tail; /* Pointer to tail of point list */
140 };
141 
142 /* Information about hyperslab spans */
143 
144 /* Information a particular hyperslab span (typedef'd in H5Sprivate.h) */
146  hsize_t low, high; /* Low & high bounds of elements selected for span, inclusive */
147  struct H5S_hyper_span_info_t *down; /* Pointer to list of spans in next dimension down */
148  struct H5S_hyper_span_t *next; /* Pointer to next span in list */
149 };
150 
151 /* "Operation info" struct. Used to hold temporary information during copies,
152  * 'adjust', 'nelem', and 'rebuild' operations, and higher level algorithms that
153  * generate this information. */
154 typedef struct H5S_hyper_op_info_t {
155  uint64_t op_gen; /* Generation of the scratch info */
156  union {
157  struct H5S_hyper_span_info_t *copied; /* Pointer to already copied span tree */
158  hsize_t nelmts; /* # of elements */
159  hsize_t nblocks; /* # of blocks */
160 #ifdef H5_HAVE_PARALLEL
161  MPI_Datatype down_type; /* MPI datatype for span tree */
162 #endif /* H5_HAVE_PARALLEL */
163  }u;
165 
166 /* Information about a list of hyperslab spans in one dimension (typedef'd in H5Sprivate.h) */
168  unsigned count; /* Ref. count of number of spans which share this span */
169 
170  /* The following two fields define the bounding box of this set of spans
171  * and all lower dimensions, relative to the offset.
172  */
173  /* (NOTE: The bounds arrays are _relative_ to the depth of the span_info
174  * node in the span tree, so the top node in a 5-D span tree will
175  * use indices 0-4 in the arrays to store it's bounds information,
176  * but the next level down in the span tree will use indices 0-3.
177  * So, each level in the span tree will have the 0th index in the
178  * arrays correspond to the bounds in "this" dimension, even if
179  * it's not the highest level in the span tree.
180  */
181  hsize_t *low_bounds; /* The smallest element selected in each dimension */
182  hsize_t *high_bounds; /* The largest element selected in each dimension */
183 
184  /* "Operation info" fields */
185  /* (Used during copies, 'adjust', 'nelem', and 'rebuild' operations) */
186  /* Currently the maximum number of simultaneous operations is 2 */
188 
189  struct H5S_hyper_span_t *head; /* Pointer to the first span of list of spans in the current dimension */
190  struct H5S_hyper_span_t *tail; /* Pointer to the last span of list of spans in the current dimension */
191  hsize_t bounds[]; /* Array for storing low & high bounds */
192  /* (NOTE: This uses the C99 "flexible array member" feature) */
193 };
194 
195 /* Enum for diminfo_valid field in H5S_hyper_sel_t */
196 typedef enum {
197  H5S_DIMINFO_VALID_IMPOSSIBLE, /* 0: diminfo is not valid and can never be valid with the current selection */
198  H5S_DIMINFO_VALID_NO, /* 1: diminfo is not valid but may or may not be possible to constuct */
199  H5S_DIMINFO_VALID_YES /* 2: diminfo is valid */
201 
202 /* Information about 'diminfo' form of hyperslab selection */
203 typedef struct {
204  /* 'opt' points to a [potentially] optimized version of the user's
205  * regular hyperslab information. 'app' points to the actual parameters
206  * that the application used for setting the hyperslab selection.
207  *
208  * The 'app' values are only used for regurgitating the original values
209  * used to set the hyperslab to the application when it queries the
210  * hyperslab selection information.
211  */
212  H5S_hyper_dim_t app[H5S_MAX_RANK]; /* Application-set per-dim selection info */
213  H5S_hyper_dim_t opt[H5S_MAX_RANK]; /* Optimized per-dim selection info */
214 
215  /* The following two fields defines the bounding box of the diminfo selection */
216  /* (relative to the offset) */
217  hsize_t low_bounds[H5S_MAX_RANK]; /* The smallest element selected in each dimension */
218  hsize_t high_bounds[H5S_MAX_RANK]; /* The largest element selected in each dimension */
220 
221 /* Information about hyperslab selection */
222 typedef struct {
223  H5S_diminfo_valid_t diminfo_valid; /* Whether the dataset has valid diminfo */
224 
225  H5S_hyper_diminfo_t diminfo; /* Dimension info form of hyperslab selection */
226  int unlim_dim; /* Dimension where selection is unlimited, or -1 if none */
227  hsize_t num_elem_non_unlim; /* # of elements in a "slice" excluding the unlimited dimension */
228  H5S_hyper_span_info_t *span_lst; /* List of hyperslab span information of all dimensions */
230 
231 /* Selection information methods */
232 /* Method to copy a selection */
233 typedef herr_t (*H5S_sel_copy_func_t)(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
234 /* Method to release current selection */
236 /* Method to determine if current selection is valid for dataspace */
237 typedef htri_t (*H5S_sel_is_valid_func_t)(const H5S_t *space);
238 /* Method to determine number of bytes required to store current selection */
239 typedef hssize_t (*H5S_sel_serial_size_func_t)(const H5S_t *space);
240 /* Method to store current selection in "serialized" form (a byte sequence suitable for storing on disk) */
241 typedef herr_t (*H5S_sel_serialize_func_t)(const H5S_t *space, uint8_t **p);
242 /* Method to create selection from "serialized" form (a byte sequence suitable for storing on disk) */
243 typedef herr_t (*H5S_sel_deserialize_func_t)(H5S_t **space, const uint8_t **p);
244 /* Method to determine smallest n-D bounding box containing the current selection */
245 typedef herr_t (*H5S_sel_bounds_func_t)(const H5S_t *space, hsize_t *start, hsize_t *end);
246 /* Method to determine linear offset of initial element in selection within dataspace */
247 typedef herr_t (*H5S_sel_offset_func_t)(const H5S_t *space, hsize_t *offset);
248 /* Method to get unlimited dimension of selection (or -1 for none) */
249 typedef int (*H5S_sel_unlim_dim_func_t)(const H5S_t *space);
250 /* Method to get the number of elements in a slice through the unlimited dimension */
252  hsize_t *num_elem_non_unlim);
253 /* Method to determine if current selection is contiguous */
254 typedef htri_t (*H5S_sel_is_contiguous_func_t)(const H5S_t *space);
255 /* Method to determine if current selection is a single block */
256 typedef htri_t (*H5S_sel_is_single_func_t)(const H5S_t *space);
257 /* Method to determine if current selection is "regular" */
258 typedef htri_t (*H5S_sel_is_regular_func_t)(const H5S_t *space);
259 /* Method to determine if two dataspaces' selections are the same shape */
260 typedef htri_t (*H5S_sel_shape_same_func_t)(const H5S_t *space1, const H5S_t *space2);
261 /* Method to determine if selection intersects a block */
262 typedef htri_t (*H5S_sel_intersect_block_func_t)(const H5S_t *space, const hsize_t *start, const hsize_t *end);
263 /* Method to adjust a selection by an offset */
264 typedef herr_t (*H5S_sel_adjust_u_func_t)(H5S_t *space, const hsize_t *offset);
265 /* Method to adjust a selection by an offset (signed) */
266 typedef herr_t (*H5S_sel_adjust_s_func_t)(H5S_t *space, const hssize_t *offset);
267 /* Method to construct single element projection onto scalar dataspace */
268 typedef herr_t (*H5S_sel_project_scalar)(const H5S_t *space, hsize_t *offset);
269 /* Method to construct selection projection onto/into simple dataspace */
270 typedef herr_t (*H5S_sel_project_simple)(const H5S_t *space, H5S_t *new_space, hsize_t *offset);
271 /* Method to initialize iterator for current selection */
272 typedef herr_t (*H5S_sel_iter_init_func_t)(const H5S_t *space, H5S_sel_iter_t *sel_iter);
273 
274 /* Selection class information */
275 typedef struct {
276  H5S_sel_type type; /* Type of selection (all, none, points or hyperslab) */
277 
278  /* Methods */
279  H5S_sel_copy_func_t copy; /* Method to make a copy of a selection */
280  H5S_sel_release_func_t release; /* Method to release current selection */
281  H5S_sel_is_valid_func_t is_valid; /* Method to determine if current selection is valid for dataspace */
282  H5S_sel_serial_size_func_t serial_size; /* Method to determine number of bytes required to store current selection */
283  H5S_sel_serialize_func_t serialize; /* Method to store current selection in "serialized" form (a byte sequence suitable for storing on disk) */
284  H5S_sel_deserialize_func_t deserialize; /* Method to store create selection from "serialized" form (a byte sequence suitable for storing on disk) */
285  H5S_sel_bounds_func_t bounds; /* Method to determine to smallest n-D bounding box containing the current selection */
286  H5S_sel_offset_func_t offset; /* Method to determine linear offset of initial element in selection within dataspace */
287  H5S_sel_unlim_dim_func_t unlim_dim; /* Method to get unlimited dimension of selection (or -1 for none) */
288  H5S_sel_num_elem_non_unlim_func_t num_elem_non_unlim; /* Method to get the number of elements in a slice through the unlimited dimension */
289  H5S_sel_is_contiguous_func_t is_contiguous; /* Method to determine if current selection is contiguous */
290  H5S_sel_is_single_func_t is_single; /* Method to determine if current selection is a single block */
291  H5S_sel_is_regular_func_t is_regular; /* Method to determine if current selection is "regular" */
292  H5S_sel_shape_same_func_t shape_same; /* Method to determine if two dataspaces' selections are the same shape */
293  H5S_sel_intersect_block_func_t intersect_block; /* Method to determine if a dataspaces' selection intersects a block */
294  H5S_sel_adjust_u_func_t adjust_u; /* Method to adjust a selection by an offset */
295  H5S_sel_adjust_s_func_t adjust_s; /* Method to adjust a selection by an offset (signed) */
296  H5S_sel_project_scalar project_scalar; /* Method to construct scalar dataspace projection */
297  H5S_sel_project_simple project_simple; /* Method to construct simple dataspace projection */
298  H5S_sel_iter_init_func_t iter_init; /* Method to initialize iterator for current selection */
300 
301 /* Selection information object */
302 typedef struct {
303  const H5S_select_class_t *type; /* Pointer to selection's class info */
304 
305  hbool_t offset_changed; /* Indicate that the offset for the selection has been changed */
306  hssize_t offset[H5S_MAX_RANK]; /* Offset within the extent */
307 
308  hsize_t num_elem; /* Number of elements in selection */
309 
310  union {
311  H5S_pnt_list_t *pnt_lst; /* Info about list of selected points (order is important) */
312  H5S_hyper_sel_t *hslab; /* Info about hyperslab selection */
313  } sel_info;
314 } H5S_select_t;
315 
316 /* Main dataspace structure (typedef'd in H5Sprivate.h) */
317 struct H5S_t {
318  H5S_extent_t extent; /* Dataspace extent (must stay first) */
319  H5S_select_t select; /* Dataspace selection */
320 };
321 
322 /* Selection iteration methods */
323 /* Method to retrieve the current coordinates of iterator for current selection */
325  hsize_t *coords);
326 /* Method to retrieve the current block of iterator for current selection */
328  hsize_t *start, hsize_t *end);
329 /* Method to determine number of elements left in iterator for current selection */
331 /* Method to determine if there are more blocks left in the current selection */
333 /* Method to move selection iterator to the next element in the selection */
334 typedef herr_t (*H5S_sel_iter_next_func_t)(H5S_sel_iter_t *iter, size_t nelem);
335 /* Method to move selection iterator to the next block in the selection */
337 /* Method to retrieve a list of offset/length sequences for selection iterator */
339  size_t maxseq, size_t maxbytes, size_t *nseq, size_t *nbytes, hsize_t *off,
340  size_t *len);
341 /* Method to release iterator for current selection */
343 
344 /* Selection iteration class */
345 typedef struct H5S_sel_iter_class_t {
346  H5S_sel_type type; /* Type of selection (all, none, points or hyperslab) */
347 
348  /* Methods on selections */
349  H5S_sel_iter_coords_func_t iter_coords; /* Method to retrieve the current coordinates of iterator for current selection */
350  H5S_sel_iter_block_func_t iter_block; /* Method to retrieve the current block of iterator for current selection */
351  H5S_sel_iter_nelmts_func_t iter_nelmts; /* Method to determine number of elements left in iterator for current selection */
352  H5S_sel_iter_has_next_block_func_t iter_has_next_block; /* Method to query if there is another block left in the selection */
353  H5S_sel_iter_next_func_t iter_next; /* Method to move selection iterator to the next element in the selection */
354  H5S_sel_iter_next_block_func_t iter_next_block; /* Method to move selection iterator to the next block in the selection */
355  H5S_sel_iter_get_seq_list_func_t iter_get_seq_list; /* Method to retrieve a list of offset/length sequences for selection iterator */
356  H5S_sel_iter_release_func_t iter_release; /* Method to release iterator for current selection */
358 
359 /*
360  * All selection class methods.
361  */
363 
364 /*
365  * Hyperslab selection class methods.
366  */
368 
369 /*
370  * None selection class methods.
371  */
373 
374 /*
375  * Pointer selection class methods.
376  */
378 
379 /* Array of versions for Dataspace */
381 
382 /* Extent functions */
385  hbool_t copy_max);
386 
387 /* Operations on hyperslab selections */
389 H5_DLL void H5S__hyper_rebuild(H5S_t *space);
392  const H5S_t *dst_space, const H5S_t *src_intersect_space, H5S_t *proj_space,
393  hbool_t share_space);
394 
395 /* Testing functions */
396 #ifdef H5S_TESTING
398  H5S_diminfo_valid_t *status1, H5S_diminfo_valid_t *status2);
400  H5S_diminfo_valid_t *status);
402 #endif /* H5S_TESTING */
403 
404 #endif /*_H5Spkg_H*/
405 
H5S_select_class_t::copy
H5S_sel_copy_func_t copy
Definition: H5Spkg.h:279
H5S_sel_is_valid_func_t
htri_t(* H5S_sel_is_valid_func_t)(const H5S_t *space)
Definition: H5Spkg.h:237
H5S_hyper_span_t::high
hsize_t high
Definition: H5Spkg.h:146
H5S_select_class_t::adjust_s
H5S_sel_adjust_s_func_t adjust_s
Definition: H5Spkg.h:295
H5S_sel_iter_next_block_func_t
herr_t(* H5S_sel_iter_next_block_func_t)(H5S_sel_iter_t *iter)
Definition: H5Spkg.h:336
H5S_sel_copy_func_t
herr_t(* H5S_sel_copy_func_t)(H5S_t *dst, const H5S_t *src, hbool_t share_selection)
Definition: H5Spkg.h:233
H5F_LIBVER_NBOUNDS
@ H5F_LIBVER_NBOUNDS
Definition: H5Fpublic.h:168
H5S_hyper_sel_t::span_lst
H5S_hyper_span_info_t * span_lst
Definition: H5Spkg.h:228
H5S_select_t::num_elem
hsize_t num_elem
Definition: H5Spkg.h:308
H5S_pnt_node_t::next
struct H5S_pnt_node_t * next
Definition: H5Spkg.h:127
H5S_sel_iter_class_t::iter_next_block
H5S_sel_iter_next_block_func_t iter_next_block
Definition: H5Spkg.h:354
H5S_hyper_sel_t
Definition: H5Spkg.h:222
H5S_select_class_t::shape_same
H5S_sel_shape_same_func_t shape_same
Definition: H5Spkg.h:292
H5O_shared_t
Definition: H5Oprivate.h:268
H5S_extent_t
Definition: H5Spkg.h:109
H5S_MAX_RANK
#define H5S_MAX_RANK
Definition: H5Spublic.h:29
H5S_hyper_span_info_t::head
struct H5S_hyper_span_t * head
Definition: H5Spkg.h:189
H5S_sel_is_regular_func_t
htri_t(* H5S_sel_is_regular_func_t)(const H5S_t *space)
Definition: H5Spkg.h:258
H5S_hyper_sel_t::num_elem_non_unlim
hsize_t num_elem_non_unlim
Definition: H5Spkg.h:227
H5S_select_class_t::project_scalar
H5S_sel_project_scalar project_scalar
Definition: H5Spkg.h:296
H5S_extent_t::size
hsize_t * size
Definition: H5Spkg.h:117
H5S_sel_iter_class_t::iter_block
H5S_sel_iter_block_func_t iter_block
Definition: H5Spkg.h:350
H5S_DIMINFO_VALID_YES
@ H5S_DIMINFO_VALID_YES
Definition: H5Spkg.h:199
H5S_sel_iter_block_func_t
herr_t(* H5S_sel_iter_block_func_t)(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end)
Definition: H5Spkg.h:327
H5Sprivate.h
H5S_diminfo_valid_t
H5S_diminfo_valid_t
Definition: H5Spkg.h:196
H5S_DIMINFO_VALID_NO
@ H5S_DIMINFO_VALID_NO
Definition: H5Spkg.h:198
H5S_select_t::pnt_lst
H5S_pnt_list_t * pnt_lst
Definition: H5Spkg.h:311
H5S_select_class_t::offset
H5S_sel_offset_func_t offset
Definition: H5Spkg.h:286
H5S_hyper_op_info_t::nblocks
hsize_t nblocks
Definition: H5Spkg.h:159
H5S_sel_iter_release_func_t
herr_t(* H5S_sel_iter_release_func_t)(H5S_sel_iter_t *iter)
Definition: H5Spkg.h:342
H5S_sel_serialize_func_t
herr_t(* H5S_sel_serialize_func_t)(const H5S_t *space, uint8_t **p)
Definition: H5Spkg.h:241
H5S_hyper_op_info_t::copied
struct H5S_hyper_span_info_t * copied
Definition: H5Spkg.h:157
H5S_hyper_span_info_t::count
unsigned count
Definition: H5Spkg.h:168
H5S_sel_intersect_block_func_t
htri_t(* H5S_sel_intersect_block_func_t)(const H5S_t *space, const hsize_t *start, const hsize_t *end)
Definition: H5Spkg.h:262
H5S_sel_iter_class_t::iter_release
H5S_sel_iter_release_func_t iter_release
Definition: H5Spkg.h:356
H5S_select_class_t::is_single
H5S_sel_is_single_func_t is_single
Definition: H5Spkg.h:290
H5S_sel_none
H5_DLLVAR const H5S_select_class_t H5S_sel_none[1]
Definition: H5Spkg.h:372
H5S_pnt_list_t::head
H5S_pnt_node_t * head
Definition: H5Spkg.h:138
H5S_sel_iter_class_t::iter_next
H5S_sel_iter_next_func_t iter_next
Definition: H5Spkg.h:353
H5_DLLVAR
#define H5_DLLVAR
Definition: H5api_adpt.h:235
H5S_sel_adjust_u_func_t
herr_t(* H5S_sel_adjust_u_func_t)(H5S_t *space, const hsize_t *offset)
Definition: H5Spkg.h:264
H5S_sel_unlim_dim_func_t
int(* H5S_sel_unlim_dim_func_t)(const H5S_t *space)
Definition: H5Spkg.h:249
H5S_t::extent
H5S_extent_t extent
Definition: H5Spkg.h:318
H5S_select_class_t::serial_size
H5S_sel_serial_size_func_t serial_size
Definition: H5Spkg.h:282
H5S_select_class_t::is_contiguous
H5S_sel_is_contiguous_func_t is_contiguous
Definition: H5Spkg.h:289
H5S_sel_iter_coords_func_t
herr_t(* H5S_sel_iter_coords_func_t)(const H5S_sel_iter_t *iter, hsize_t *coords)
Definition: H5Spkg.h:324
H5S_hyper_span_info_t::op_info
H5S_hyper_op_info_t op_info[2]
Definition: H5Spkg.h:187
H5S_pnt_list_t::low_bounds
hsize_t low_bounds[H5S_MAX_RANK]
Definition: H5Spkg.h:135
H5S_sel_iter_class_t::iter_get_seq_list
H5S_sel_iter_get_seq_list_func_t iter_get_seq_list
Definition: H5Spkg.h:355
H5S_select_class_t::release
H5S_sel_release_func_t release
Definition: H5Spkg.h:280
H5S_select_class_t::project_simple
H5S_sel_project_simple project_simple
Definition: H5Spkg.h:297
uint8_t
unsigned char uint8_t
Definition: H5private.h:429
H5O_sdspace_ver_bounds
H5_DLLVAR const unsigned H5O_sdspace_ver_bounds[H5F_LIBVER_NBOUNDS]
Definition: H5Spkg.h:380
H5S_sel_is_contiguous_func_t
htri_t(* H5S_sel_is_contiguous_func_t)(const H5S_t *space)
Definition: H5Spkg.h:254
H5S_select_class_t::unlim_dim
H5S_sel_unlim_dim_func_t unlim_dim
Definition: H5Spkg.h:287
H5S_select_class_t::iter_init
H5S_sel_iter_init_func_t iter_init
Definition: H5Spkg.h:298
H5S_sel_serial_size_func_t
hssize_t(* H5S_sel_serial_size_func_t)(const H5S_t *space)
Definition: H5Spkg.h:239
H5S_hyper_sel_t::diminfo
H5S_hyper_diminfo_t diminfo
Definition: H5Spkg.h:225
H5S_hyper_span_t::low
hsize_t low
Definition: H5Spkg.h:146
H5S_sel_num_elem_non_unlim_func_t
herr_t(* H5S_sel_num_elem_non_unlim_func_t)(const H5S_t *space, hsize_t *num_elem_non_unlim)
Definition: H5Spkg.h:251
H5S_hyper_span_info_t::low_bounds
hsize_t * low_bounds
Definition: H5Spkg.h:181
H5S_pnt_node_t
Definition: H5Spkg.h:126
htri_t
int htri_t
Definition: H5public.h:160
H5S__modify_select
H5_DLL herr_t H5S__modify_select(H5S_t *space1, H5S_seloper_t op, H5S_t *space2)
Definition: H5Shyper.c:10683
H5S_pnt_list_t::tail
H5S_pnt_node_t * tail
Definition: H5Spkg.h:139
H5S_pnt_list_t
Definition: H5Spkg.h:133
H5S_sel_iter_class_t
Definition: H5Spkg.h:345
hssize_t
hssize_t
Definition: H5overflow.txt:45
H5S_sel_iter_has_next_block_func_t
htri_t(* H5S_sel_iter_has_next_block_func_t)(const H5S_sel_iter_t *iter)
Definition: H5Spkg.h:332
H5S_sel_iter_class_t::iter_coords
H5S_sel_iter_coords_func_t iter_coords
Definition: H5Spkg.h:349
H5S_sel_iter_init_func_t
herr_t(* H5S_sel_iter_init_func_t)(const H5S_t *space, H5S_sel_iter_t *sel_iter)
Definition: H5Spkg.h:272
H5S_sel_deserialize_func_t
herr_t(* H5S_sel_deserialize_func_t)(H5S_t **space, const uint8_t **p)
Definition: H5Spkg.h:243
H5S_select_t::hslab
H5S_hyper_sel_t * hslab
Definition: H5Spkg.h:312
H5S_extent_t::nelem
hsize_t nelem
Definition: H5Spkg.h:114
hid_t
int64_t hid_t
Definition: H5Ipublic.h:55
H5S_hyper_span_info_t::bounds
hsize_t bounds[]
Definition: H5Spkg.h:191
H5S_extent_t::sh_loc
H5O_shared_t sh_loc
Definition: H5Spkg.h:110
H5S_sel_point
H5_DLLVAR const H5S_select_class_t H5S_sel_point[1]
Definition: H5Spkg.h:377
H5S_sel_project_scalar
herr_t(* H5S_sel_project_scalar)(const H5S_t *space, hsize_t *offset)
Definition: H5Spkg.h:268
H5S__hyper_get_op_gen
H5_DLL uint64_t H5S__hyper_get_op_gen(void)
Definition: H5Shyper.c:549
H5S_hyper_diminfo_t
Definition: H5Spkg.h:203
H5Oprivate.h
H5S__get_diminfo_status_test
herr_t H5S__get_diminfo_status_test(hid_t space_id, H5S_diminfo_valid_t *status)
Definition: H5Stest.c:141
H5S_pnt_node_t::pnt
hsize_t pnt[]
Definition: H5Spkg.h:128
H5S_select_class_t::type
H5S_sel_type type
Definition: H5Spkg.h:276
H5S_hyper_op_info_t
Definition: H5Spkg.h:154
H5S_sel_iter_t
Definition: H5Sprivate.h:89
H5S_t
Definition: H5Spkg.h:317
H5S_select_t::type
const H5S_select_class_t * type
Definition: H5Spkg.h:303
int
CATCH int
Definition: H5EA.c:1002
H5S__internal_consistency_test
htri_t H5S__internal_consistency_test(hid_t space_id)
Definition: H5Stest.c:352
H5S__hyper_rebuild
H5_DLL void H5S__hyper_rebuild(H5S_t *space)
Definition: H5Shyper.c:8935
H5S_hyper_span_info_t
Definition: H5Spkg.h:167
uint64_t
uint64_t
Definition: H5overflow.txt:39
H5S__hyper_project_intersection
H5_DLL herr_t H5S__hyper_project_intersection(const H5S_t *src_space, const H5S_t *dst_space, const H5S_t *src_intersect_space, H5S_t *proj_space, hbool_t share_space)
Definition: H5Shyper.c:11488
H5S_sel_iter_get_seq_list_func_t
herr_t(* H5S_sel_iter_get_seq_list_func_t)(H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes, size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len)
Definition: H5Spkg.h:338
H5S_hyper_span_t::down
struct H5S_hyper_span_info_t * down
Definition: H5Spkg.h:147
H5S_sel_iter_class_t
struct H5S_sel_iter_class_t H5S_sel_iter_class_t
H5S_hyper_op_info_t
struct H5S_hyper_op_info_t H5S_hyper_op_info_t
H5S_hyper_op_info_t::nelmts
hsize_t nelmts
Definition: H5Spkg.h:158
H5S_select_t::offset_changed
hbool_t offset_changed
Definition: H5Spkg.h:305
H5S_hyper_op_info_t::op_gen
uint64_t op_gen
Definition: H5Spkg.h:155
H5S__extent_release
H5_DLL herr_t H5S__extent_release(H5S_extent_t *extent)
Definition: H5S.c:425
H5S_sel_type
H5S_sel_type
Definition: H5Spublic.h:83
H5S_extent_t::version
unsigned version
Definition: H5Spkg.h:113
H5S_sel_iter_class_t::iter_nelmts
H5S_sel_iter_nelmts_func_t iter_nelmts
Definition: H5Spkg.h:351
H5S_sel_project_simple
herr_t(* H5S_sel_project_simple)(const H5S_t *space, H5S_t *new_space, hsize_t *offset)
Definition: H5Spkg.h:270
H5S_t::select
H5S_select_t select
Definition: H5Spkg.h:319
H5_DLL
#define H5_DLL
Definition: H5api_adpt.h:234
H5S_select_class_t::is_valid
H5S_sel_is_valid_func_t is_valid
Definition: H5Spkg.h:281
H5S_sel_iter_nelmts_func_t
hsize_t(* H5S_sel_iter_nelmts_func_t)(const H5S_sel_iter_t *iter)
Definition: H5Spkg.h:330
H5S_sel_release_func_t
herr_t(* H5S_sel_release_func_t)(H5S_t *space)
Definition: H5Spkg.h:235
H5S_select_class_t::bounds
H5S_sel_bounds_func_t bounds
Definition: H5Spkg.h:285
H5S_hyper_span_info_t::high_bounds
hsize_t * high_bounds
Definition: H5Spkg.h:182
H5S__get_rebuild_status_test
herr_t H5S__get_rebuild_status_test(hid_t space_id, H5S_diminfo_valid_t *status1, H5S_diminfo_valid_t *status2)
Definition: H5Stest.c:92
H5S_select_class_t::adjust_u
H5S_sel_adjust_u_func_t adjust_u
Definition: H5Spkg.h:294
H5S_sel_adjust_s_func_t
herr_t(* H5S_sel_adjust_s_func_t)(H5S_t *space, const hssize_t *offset)
Definition: H5Spkg.h:266
H5S_hyper_sel_t::unlim_dim
int unlim_dim
Definition: H5Spkg.h:226
H5S_extent_t::type
H5S_class_t type
Definition: H5Spkg.h:112
H5S_hyper_span_info_t::tail
struct H5S_hyper_span_t * tail
Definition: H5Spkg.h:190
H5S_hyper_dim_t
Definition: H5Sprivate.h:41
H5S_hyper_op_info_t::u
union H5S_hyper_op_info_t::@44 u
H5S_sel_bounds_func_t
herr_t(* H5S_sel_bounds_func_t)(const H5S_t *space, hsize_t *start, hsize_t *end)
Definition: H5Spkg.h:245
H5S_hyper_span_t::next
struct H5S_hyper_span_t * next
Definition: H5Spkg.h:148
H5S_sel_shape_same_func_t
htri_t(* H5S_sel_shape_same_func_t)(const H5S_t *space1, const H5S_t *space2)
Definition: H5Spkg.h:260
H5S_seloper_t
H5S_seloper_t
Definition: H5Spublic.h:44
H5S_sel_all
H5_DLLVAR const H5S_select_class_t H5S_sel_all[1]
Definition: H5Spkg.h:362
H5S_extent_t::max
hsize_t * max
Definition: H5Spkg.h:118
H5S_select_class_t::serialize
H5S_sel_serialize_func_t serialize
Definition: H5Spkg.h:283
herr_t
int herr_t
Definition: H5public.h:128
H5S_sel_hyper
H5_DLLVAR const H5S_select_class_t H5S_sel_hyper[1]
Definition: H5Spkg.h:367
hbool_t
bool hbool_t
Definition: H5public.h:159
H5S_select_class_t::is_regular
H5S_sel_is_regular_func_t is_regular
Definition: H5Spkg.h:291
H5S_sel_iter_class_t::iter_has_next_block
H5S_sel_iter_has_next_block_func_t iter_has_next_block
Definition: H5Spkg.h:352
H5S_DIMINFO_VALID_IMPOSSIBLE
@ H5S_DIMINFO_VALID_IMPOSSIBLE
Definition: H5Spkg.h:197
H5S_select_class_t::intersect_block
H5S_sel_intersect_block_func_t intersect_block
Definition: H5Spkg.h:293
H5S_hyper_span_t
Definition: H5Spkg.h:145
H5S_extent_t::rank
unsigned rank
Definition: H5Spkg.h:116
hsize_t
hsize_t
Definition: H5overflow.txt:44
H5S__extent_copy_real
H5_DLL herr_t H5S__extent_copy_real(H5S_extent_t *dst, const H5S_extent_t *src, hbool_t copy_max)
Definition: H5S.c:648
H5S_hyper_sel_t::diminfo_valid
H5S_diminfo_valid_t diminfo_valid
Definition: H5Spkg.h:223
H5S_select_class_t::num_elem_non_unlim
H5S_sel_num_elem_non_unlim_func_t num_elem_non_unlim
Definition: H5Spkg.h:288
H5S_sel_offset_func_t
herr_t(* H5S_sel_offset_func_t)(const H5S_t *space, hsize_t *offset)
Definition: H5Spkg.h:247
H5S_sel_iter_next_func_t
herr_t(* H5S_sel_iter_next_func_t)(H5S_sel_iter_t *iter, size_t nelem)
Definition: H5Spkg.h:334
H5S_select_t
Definition: H5Spkg.h:302
H5S_select_class_t::deserialize
H5S_sel_deserialize_func_t deserialize
Definition: H5Spkg.h:284
H5S_sel_iter_class_t::type
H5S_sel_type type
Definition: H5Spkg.h:346
H5S_select_class_t
Definition: H5Spkg.h:275
H5S_pnt_list_t::high_bounds
hsize_t high_bounds[H5S_MAX_RANK]
Definition: H5Spkg.h:136
H5S_class_t
H5S_class_t
Definition: H5Spublic.h:36
H5S_sel_is_single_func_t
htri_t(* H5S_sel_is_single_func_t)(const H5S_t *space)
Definition: H5Spkg.h:256