MISR Toolkit  1.5.1
H5Dpkg.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  * Monday, April 14, 2003
17  *
18  * Purpose: This file contains declarations which are visible only within
19  * the H5D package. Source files outside the H5D package should
20  * include H5Dprivate.h instead.
21  */
22 #ifndef H5D_PACKAGE
23 #error "Do not include this file outside the H5D package!"
24 #endif
25 
26 #ifndef _H5Dpkg_H
27 #define _H5Dpkg_H
28 
29 /* Get package's private header */
30 #include "H5Dprivate.h"
31 
32 /* Other private headers needed by this file */
33 #include "H5ACprivate.h" /* Metadata cache */
34 #include "H5Gprivate.h" /* Groups */
35 #include "H5SLprivate.h" /* Skip lists */
36 #include "H5Tprivate.h" /* Datatypes */
37 
38 /**************************/
39 /* Package Private Macros */
40 /**************************/
41 
42 /* Set the minimum object header size to create objects with */
43 #define H5D_MINHDR_SIZE 256
44 
45 /* [Simple] Macro to construct a H5D_io_info_t from it's components */
46 #define H5D_BUILD_IO_INFO_WRT(io_info, ds, dxpl_c, dxpl_i, str, buf) \
47  (io_info)->dset = ds; \
48  (io_info)->dxpl_cache = dxpl_c; \
49  (io_info)->dxpl_id = dxpl_i; \
50  (io_info)->store = str; \
51  (io_info)->op_type = H5D_IO_OP_WRITE; \
52  (io_info)->u.wbuf = buf
53 #define H5D_BUILD_IO_INFO_RD(io_info, ds, dxpl_c, dxpl_i, str, buf) \
54  (io_info)->dset = ds; \
55  (io_info)->dxpl_cache = dxpl_c; \
56  (io_info)->dxpl_id = dxpl_i; \
57  (io_info)->store = str; \
58  (io_info)->op_type = H5D_IO_OP_READ; \
59  (io_info)->u.rbuf = buf
60 
61 #define H5D_CHUNK_HASH(D, ADDR) H5F_addr_hash(ADDR, (D)->cache.chunk.nslots)
62 
63 /* Flags for marking aspects of a dataset dirty */
64 #define H5D_MARK_SPACE 0x01
65 #define H5D_MARK_LAYOUT 0x02
66 
67 
68 /****************************/
69 /* Package Private Typedefs */
70 /****************************/
71 
72 /* Typedef for datatype information for raw data I/O operation */
73 typedef struct H5D_type_info_t {
74  /* Initial values */
75  const H5T_t *mem_type; /* Pointer to memory datatype */
76  const H5T_t *dset_type; /* Pointer to dataset datatype */
77  H5T_path_t *tpath; /* Datatype conversion path */
78  hid_t src_type_id; /* Source datatype ID */
79  hid_t dst_type_id; /* Destination datatype ID */
80 
81  /* Computed/derived values */
82  size_t src_type_size; /* Size of source type */
83  size_t dst_type_size; /* Size of destination type*/
84  size_t max_type_size; /* Size of largest source/destination type */
85  hbool_t is_conv_noop; /* Whether the type conversion is a NOOP */
86  hbool_t is_xform_noop; /* Whether the data transform is a NOOP */
87  const H5T_subset_info_t *cmpd_subset; /* Info related to the compound subset conversion functions */
88  H5T_bkg_t need_bkg; /* Type of background buf needed */
89  size_t request_nelmts; /* Requested strip mine */
90  uint8_t *tconv_buf; /* Datatype conv buffer */
91  hbool_t tconv_buf_allocated; /* Whether the type conversion buffer was allocated */
92  uint8_t *bkg_buf; /* Background buffer */
93  hbool_t bkg_buf_allocated; /* Whether the background buffer was allocated */
95 
96 /* Forward declaration of structs used below */
97 struct H5D_io_info_t;
98 struct H5D_chunk_map_t;
99 
100 /* Function pointers for I/O on particular types of dataset layouts */
102 typedef herr_t (*H5D_layout_init_func_t)(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
103  hid_t dapl_id);
104 typedef hbool_t (*H5D_layout_is_space_alloc_func_t)(const H5O_storage_t *storage);
105 typedef herr_t (*H5D_layout_io_init_func_t)(const struct H5D_io_info_t *io_info,
106  const H5D_type_info_t *type_info,
107  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
108  struct H5D_chunk_map_t *cm);
109 typedef herr_t (*H5D_layout_read_func_t)(struct H5D_io_info_t *io_info,
110  const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
111  const H5S_t *mem_space, struct H5D_chunk_map_t *fm);
112 typedef herr_t (*H5D_layout_write_func_t)(struct H5D_io_info_t *io_info,
113  const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
114  const H5S_t *mem_space, struct H5D_chunk_map_t *fm);
115 typedef ssize_t (*H5D_layout_readvv_func_t)(const struct H5D_io_info_t *io_info,
116  size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
117  size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
118 typedef ssize_t (*H5D_layout_writevv_func_t)(const struct H5D_io_info_t *io_info,
119  size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
120  size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
122 typedef herr_t (*H5D_layout_io_term_func_t)(const struct H5D_chunk_map_t *cm);
123 
124 /* Typedef for grouping layout I/O routines */
125 typedef struct H5D_layout_ops_t {
126  H5D_layout_construct_func_t construct; /* Layout constructor for new datasets */
127  H5D_layout_init_func_t init; /* Layout initializer for dataset */
128  H5D_layout_is_space_alloc_func_t is_space_alloc; /* Query routine to determine if storage is allocated */
129  H5D_layout_io_init_func_t io_init; /* I/O initialization routine */
130  H5D_layout_read_func_t ser_read; /* High-level I/O routine for reading data in serial */
131  H5D_layout_write_func_t ser_write; /* High-level I/O routine for writing data in serial */
132 #ifdef H5_HAVE_PARALLEL
133  H5D_layout_read_func_t par_read; /* High-level I/O routine for reading data in parallel */
134  H5D_layout_write_func_t par_write; /* High-level I/O routine for writing data in parallel */
135 #endif /* H5_HAVE_PARALLEL */
136  H5D_layout_readvv_func_t readvv; /* Low-level I/O routine for reading data */
137  H5D_layout_writevv_func_t writevv; /* Low-level I/O routine for writing data */
138  H5D_layout_flush_func_t flush; /* Low-level I/O routine for flushing raw data */
139  H5D_layout_io_term_func_t io_term; /* I/O shutdown routine */
141 
142 /* Function pointers for either multiple or single block I/O access */
143 typedef herr_t (*H5D_io_single_read_func_t)(const struct H5D_io_info_t *io_info,
144  const H5D_type_info_t *type_info,
145  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
146 typedef herr_t (*H5D_io_single_write_func_t)(const struct H5D_io_info_t *io_info,
147  const H5D_type_info_t *type_info,
148  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
149 
150 /* Typedef for raw data I/O framework info */
151 typedef struct H5D_io_ops_t {
152  H5D_layout_read_func_t multi_read; /* High-level I/O routine for reading data */
153  H5D_layout_write_func_t multi_write; /* High-level I/O routine for writing data */
154  H5D_io_single_read_func_t single_read; /* I/O routine for reading single block */
155  H5D_io_single_write_func_t single_write; /* I/O routine for writing single block */
156 } H5D_io_ops_t;
157 
158 /* Typedefs for dataset storage information */
159 typedef struct {
160  haddr_t dset_addr; /* Address of dataset in file */
161  hsize_t dset_size; /* Total size of dataset in file */
163 
164 typedef struct {
165  hsize_t index; /* "Index" of chunk in dataset (must be first for TBBT routines) */
166  hsize_t *offset; /* Chunk's coordinates in elements */
168 
169 typedef struct {
170  void *buf; /* Buffer for compact dataset */
171  hbool_t *dirty; /* Pointer to dirty flag to mark */
173 
174 typedef union H5D_storage_t {
175  H5D_contig_storage_t contig; /* Contiguous information for dataset */
176  H5D_chunk_storage_t chunk; /* Chunk information for dataset */
177  H5D_compact_storage_t compact; /* Compact information for dataset */
178  H5O_efl_t efl; /* External file list information for dataset */
179 } H5D_storage_t;
180 
181 /* Typedef for raw data I/O operation info */
182 typedef enum H5D_io_op_type_t {
183  H5D_IO_OP_READ, /* Read operation */
184  H5D_IO_OP_WRITE /* Write operation */
186 
187 typedef struct H5D_io_info_t {
188  const H5D_t *dset; /* Pointer to dataset being operated on */
189 #ifndef H5_HAVE_PARALLEL
190  const
191 #endif /* H5_HAVE_PARALLEL */
192  H5D_dxpl_cache_t *dxpl_cache; /* Pointer to cached DXPL info */
193  hid_t dxpl_id; /* Original DXPL ID */
194 #ifdef H5_HAVE_PARALLEL
195  MPI_Comm comm; /* MPI communicator for file */
196  hbool_t using_mpi_vfd; /* Whether the file is using an MPI-based VFD */
197  struct {
198  H5FD_mpio_xfer_t xfer_mode; /* Parallel transfer for this request (H5D_XFER_IO_XFER_MODE_NAME) */
199  H5FD_mpio_collective_opt_t coll_opt_mode; /* Parallel transfer with independent IO or collective IO with this mode */
200  H5D_io_ops_t io_ops; /* I/O operation function pointers */
201  } orig;
202 #endif /* H5_HAVE_PARALLEL */
203  H5D_storage_t *store; /* Dataset storage info */
204  H5D_layout_ops_t layout_ops; /* Dataset layout I/O operation function pointers */
205  H5D_io_ops_t io_ops; /* I/O operation function pointers */
207  union {
208  void *rbuf; /* Pointer to buffer for read */
209  const void *wbuf; /* Pointer to buffer to write */
210  } u;
211 } H5D_io_info_t;
212 
213 
214 /******************/
215 /* Chunk typedefs */
216 /******************/
217 
218 /* Typedef for chunked dataset index operation info */
219 typedef struct H5D_chk_idx_info_t {
220  H5F_t *f; /* File pointer for operation */
221  hid_t dxpl_id; /* DXPL ID for operation */
222  const H5O_pline_t *pline; /* I/O pipeline info */
223  H5O_layout_chunk_t *layout; /* Chunk layout description */
224  H5O_storage_chunk_t *storage; /* Chunk storage description */
226 
227 /*
228  * "Generic" chunk record. Each chunk is keyed by the minimum logical
229  * N-dimensional coordinates and the datatype size of the chunk.
230  * The fastest-varying dimension is assumed to reference individual bytes of
231  * the array, so a 100-element 1-D array of 4-byte integers would really be a
232  * 2-D array with the slow varying dimension of size 100 and the fast varying
233  * dimension of size 4 (the storage dimensionality has very little to do with
234  * the real dimensionality).
235  *
236  * The chunk's file address, filter mask and size on disk are not key values.
237  */
238 typedef struct H5D_chunk_rec_t {
239  uint32_t nbytes; /* Size of stored data */
240  hsize_t offset[H5O_LAYOUT_NDIMS]; /* Logical offset to start */
241  unsigned filter_mask; /* Excluded filters */
242  haddr_t chunk_addr; /* Address of chunk in file */
244 
245 /*
246  * Common data exchange structure for indexed storage nodes. This structure is
247  * passed through the indexing layer to the methods for the objects
248  * to which the index points.
249  */
250 typedef struct H5D_chunk_common_ud_t {
251  /* downward */
252  const H5O_layout_chunk_t *layout; /* Chunk layout description */
253  const H5O_storage_chunk_t *storage; /* Chunk storage description */
254  const hsize_t *offset; /* Logical offset of chunk */
255  const struct H5D_rdcc_t *rdcc; /* Chunk cache. Only necessary if the index may
256  * be modified, and if any chunks in the dset
257  * may be cached */
259 
260 /* B-tree callback info for various operations */
261 typedef struct H5D_chunk_ud_t {
262  H5D_chunk_common_ud_t common; /* Common info for B-tree user data (must be first) */
263 
264  /* Upward */
265  unsigned idx_hint; /*index of chunk in cache, if present */
266  uint32_t nbytes; /*size of stored data */
267  unsigned filter_mask; /*excluded filters */
268  haddr_t addr; /*file address of chunk */
270 
271 /* Typedef for "generic" chunk callbacks */
272 typedef int (*H5D_chunk_cb_func_t)(const H5D_chunk_rec_t *chunk_rec,
273  void *udata);
274 
275 /* Typedefs for chunk operations */
277  const H5S_t *space, haddr_t dset_ohdr_addr);
279 typedef hbool_t (*H5D_chunk_is_space_alloc_func_t)(const H5O_storage_chunk_t *storage);
281  H5D_chunk_ud_t *udata);
283  H5D_chunk_ud_t *udata);
284 typedef herr_t (*H5D_chunk_resize_func_t)(H5O_layout_chunk_t *layout);
285 typedef int (*H5D_chunk_iterate_func_t)(const H5D_chk_idx_info_t *idx_info,
286  H5D_chunk_cb_func_t chunk_cb, void *chunk_udata);
288  H5D_chunk_common_ud_t *udata);
291  const H5D_chk_idx_info_t *idx_info_dst);
292 typedef herr_t (*H5D_chunk_copy_shutdown_func_t)(H5O_storage_chunk_t *storage_src,
293  H5O_storage_chunk_t *storage_dst, hid_t dxpl_id);
295  hsize_t *idx_size);
296 typedef herr_t (*H5D_chunk_reset_func_t)(H5O_storage_chunk_t *storage, hbool_t reset_addr);
297 typedef herr_t (*H5D_chunk_dump_func_t)(const H5O_storage_chunk_t *storage,
298  FILE *stream);
299 typedef herr_t (*H5D_chunk_dest_func_t)(const H5D_chk_idx_info_t *idx_info);
300 
301 /* Typedef for grouping chunk I/O routines */
302 typedef struct H5D_chunk_ops_t {
303  H5D_chunk_init_func_t init; /* Routine to initialize indexing information in memory */
304  H5D_chunk_create_func_t create; /* Routine to create chunk index */
305  H5D_chunk_is_space_alloc_func_t is_space_alloc; /* Query routine to determine if storage/index is allocated */
306  H5D_chunk_insert_func_t insert; /* Routine to insert a chunk into an index */
307  H5D_chunk_get_addr_func_t get_addr; /* Routine to retrieve address of chunk in file */
308  H5D_chunk_resize_func_t resize; /* Routine to update chunk index info after resizing dataset */
309  H5D_chunk_iterate_func_t iterate; /* Routine to iterate over chunks */
310  H5D_chunk_remove_func_t remove; /* Routine to remove a chunk from an index */
311  H5D_chunk_delete_func_t idx_delete; /* Routine to delete index & all chunks from file*/
312  H5D_chunk_copy_setup_func_t copy_setup; /* Routine to perform any necessary setup for copying chunks */
313  H5D_chunk_copy_shutdown_func_t copy_shutdown; /* Routine to perform any necessary shutdown for copying chunks */
314  H5D_chunk_size_func_t size; /* Routine to get size of indexing information */
315  H5D_chunk_reset_func_t reset; /* Routine to reset indexing information */
316  H5D_chunk_dump_func_t dump; /* Routine to dump indexing information */
317  H5D_chunk_dest_func_t dest; /* Routine to destroy indexing information in memory */
319 
320 /* Structure holding information about a chunk's selection for mapping */
321 typedef struct H5D_chunk_info_t {
322  hsize_t index; /* "Index" of chunk in dataset */
323  uint32_t chunk_points; /* Number of elements selected in chunk */
324  hsize_t coords[H5O_LAYOUT_NDIMS]; /* Coordinates of chunk in file dataset's dataspace */
325  H5S_t *fspace; /* Dataspace describing chunk & selection in it */
326  unsigned fspace_shared; /* Indicate that the file space for a chunk is shared and shouldn't be freed */
327  H5S_t *mspace; /* Dataspace describing selection in memory corresponding to this chunk */
328  unsigned mspace_shared; /* Indicate that the memory space for a chunk is shared and shouldn't be freed */
330 
331 /* Main structure holding the mapping between file chunks and memory */
332 typedef struct H5D_chunk_map_t {
333  H5O_layout_t *layout; /* Dataset layout information*/
334  hsize_t nelmts; /* Number of elements selected in file & memory dataspaces */
335 
336  const H5S_t *file_space; /* Pointer to the file dataspace */
337  unsigned f_ndims; /* Number of dimensions for file dataspace */
338  hsize_t f_dims[H5O_LAYOUT_NDIMS]; /* File dataspace dimensions */
339 
340  const H5S_t *mem_space; /* Pointer to the memory dataspace */
341  H5S_t *mchunk_tmpl; /* Dataspace template for new memory chunks */
342  H5S_sel_iter_t mem_iter; /* Iterator for elements in memory selection */
343  unsigned m_ndims; /* Number of dimensions for memory dataspace */
344  H5S_sel_type msel_type; /* Selection type in memory */
345 
346  H5SL_t *sel_chunks; /* Skip list containing information for each chunk selected */
347 
348  H5S_t *single_space; /* Dataspace for single chunk */
349  H5D_chunk_info_t *single_chunk_info; /* Pointer to single chunk's info */
350  hbool_t use_single; /* Whether I/O is on a single element */
351 
352  hsize_t last_index; /* Index of last chunk operated on */
353  H5D_chunk_info_t *last_chunk_info; /* Pointer to last chunk's info */
354 
355  hsize_t chunk_dim[H5O_LAYOUT_NDIMS]; /* Size of chunk in each dimension */
356 
357 #ifdef H5_HAVE_PARALLEL
358  H5D_chunk_info_t **select_chunk; /* Store the information about whether this chunk is selected or not */
359 #endif /* H5_HAVE_PARALLEL */
361 
362 /* Cached information about a particular chunk */
363 typedef struct H5D_chunk_cached_t {
364  hbool_t valid; /*whether cache info is valid*/
365  hsize_t offset[H5O_LAYOUT_NDIMS]; /*logical offset to start*/
366  uint32_t nbytes; /*size of stored data */
367  unsigned filter_mask; /*excluded filters */
368  haddr_t addr; /*file address of chunk */
370 
371 /* The raw data chunk cache */
372 typedef struct H5D_rdcc_t {
373  struct {
374  unsigned ninits; /* Number of chunk creations */
375  unsigned nhits; /* Number of cache hits */
376  unsigned nmisses;/* Number of cache misses */
377  unsigned nflushes;/* Number of cache flushes */
378  } stats;
379  size_t nbytes_max; /* Maximum cached raw data in bytes */
380  size_t nslots; /* Number of chunk slots allocated */
381  double w0; /* Chunk preemption policy */
382  struct H5D_rdcc_ent_t *head; /* Head of doubly linked list */
383  struct H5D_rdcc_ent_t *tail; /* Tail of doubly linked list */
384  size_t nbytes_used; /* Current cached raw data in bytes */
385  int nused; /* Number of chunk slots in use */
386  H5D_chunk_cached_t last; /* Cached copy of last chunk information */
387  struct H5D_rdcc_ent_t **slot; /* Chunk slots, each points to a chunk*/
388  H5SL_t *sel_chunks; /* Skip list containing information for each chunk selected */
389  H5S_t *single_space; /* Dataspace for single element I/O on chunks */
390  H5D_chunk_info_t *single_chunk_info; /* Pointer to single chunk's info */
391 } H5D_rdcc_t;
392 
393 /* The raw data contiguous data cache */
394 typedef struct H5D_rdcdc_t {
395  unsigned char *sieve_buf; /* Buffer to hold data sieve buffer */
396  haddr_t sieve_loc; /* File location (offset) of the data sieve buffer */
397  size_t sieve_size; /* Size of the data sieve buffer used (in bytes) */
398  size_t sieve_buf_size; /* Size of the data sieve buffer allocated (in bytes) */
399  hbool_t sieve_dirty; /* Flag to indicate that the data sieve buffer is dirty */
400 } H5D_rdcdc_t;
401 
402 /*
403  * A dataset is made of two layers, an H5D_t struct that is unique to
404  * each instance of an opened datset, and a shared struct that is only
405  * created once for a given dataset. Thus, if a dataset is opened twice,
406  * there will be two IDs and two H5D_t structs, both sharing one H5D_shared_t.
407  */
408 typedef struct H5D_shared_t {
409  size_t fo_count; /* Reference count */
410  hid_t type_id; /* ID for dataset's datatype */
411  H5T_t *type; /* Datatype for this dataset */
412  H5S_t *space; /* Dataspace of this dataset */
413  hbool_t space_dirty; /* Whether the dataspace info needs to be flushed to the file */
414  hbool_t layout_dirty; /* Whether the layout info needs to be flushed to the file */
415  hid_t dcpl_id; /* Dataset creation property id */
416  H5D_dcpl_cache_t dcpl_cache; /* Cached DCPL values */
417  H5O_layout_t layout; /* Data layout */
418  hbool_t checked_filters;/* TRUE if dataset passes can_apply check */
419 
420  /* Buffered/cached information for types of raw data storage*/
421  struct {
422  H5D_rdcdc_t contig; /* Information about contiguous data */
423  /* (Note that the "contig" cache
424  * information can be used by a chunked
425  * dataset in certain circumstances)
426  */
427  H5D_rdcc_t chunk; /* Information about chunked data */
428  } cache;
429 
430  char *extfile_prefix; /* expanded external file prefix */
431 } H5D_shared_t;
432 
433 struct H5D_t {
434  H5O_loc_t oloc; /* Object header location */
435  H5G_name_t path; /* Group hierarchy path */
436  H5D_shared_t *shared; /* cached information from file */
437 };
438 
439 /* Enumerated type for allocating dataset's storage */
440 typedef enum {
441  H5D_ALLOC_CREATE, /* Dataset is being created */
442  H5D_ALLOC_OPEN, /* Dataset is being opened */
443  H5D_ALLOC_EXTEND, /* Dataset's dataspace is being extended */
444  H5D_ALLOC_WRITE /* Dataset is being extended */
446 
447 
448 /* Typedef for dataset creation operation */
449 typedef struct {
450  hid_t type_id; /* Datatype for dataset */
451  const H5S_t *space; /* Dataspace for dataset */
452  hid_t dcpl_id; /* Dataset creation property list */
453  hid_t dapl_id; /* Dataset access property list */
455 
456 /* Typedef for filling a buffer with a fill value */
457 typedef struct H5D_fill_buf_info_t {
458  H5MM_allocate_t fill_alloc_func; /* Routine to call for allocating fill buffer */
459  void *fill_alloc_info; /* Extra info for allocation routine */
460  H5MM_free_t fill_free_func; /* Routine to call for freeing fill buffer */
461  void *fill_free_info; /* Extra info for free routine */
462  H5T_path_t *fill_to_mem_tpath; /* Datatype conversion path for converting the fill value to the memory buffer */
463  H5T_path_t *mem_to_dset_tpath; /* Datatype conversion path for converting the memory buffer to the dataset elements */
464  const H5O_fill_t *fill; /* Pointer to fill value */
465  void *fill_buf; /* Fill buffer */
466  size_t fill_buf_size; /* Size of fill buffer */
467  hbool_t use_caller_fill_buf; /* Whether the caller provided the fill buffer */
468  void *bkg_buf; /* Background conversion buffer */
469  size_t bkg_buf_size; /* Size of background buffer */
470  H5T_t *mem_type; /* Pointer to memory datatype */
471  const H5T_t *file_type; /* Pointer to file datatype */
472  hid_t mem_tid; /* ID for memory version of disk datatype */
473  hid_t file_tid; /* ID for disk datatype */
474  size_t mem_elmt_size, file_elmt_size; /* Size of element in memory and on disk */
475  size_t max_elmt_size; /* Max. size of memory or file datatype */
476  size_t elmts_per_buf; /* # of elements that fit into a buffer */
477  hbool_t has_vlen_fill_type; /* Whether the datatype for the fill value has a variable-length component */
479 
480 /* Internal data structure for computing variable-length dataset's total size */
481 typedef struct {
482  H5D_t *dset; /* Dataset for operation */
483  H5S_t *fspace; /* Dataset's dataspace for operation */
484  H5S_t *mspace; /* Memory dataspace for operation */
485  void *fl_tbuf; /* Ptr to the temporary buffer we are using for fixed-length data */
486  void *vl_tbuf; /* Ptr to the temporary buffer we are using for VL data */
487  hid_t xfer_pid; /* ID of the dataset xfer property list */
488  hsize_t size; /* Accumulated number of bytes for the selection */
490 
491 /* Raw data chunks are cached. Each entry in the cache is: */
492 typedef struct H5D_rdcc_ent_t {
493  hbool_t locked; /*entry is locked in cache */
494  hbool_t dirty; /*needs to be written to disk? */
495  hbool_t deleted; /*chunk about to be deleted (do not flush) */
496  hsize_t offset[H5O_LAYOUT_NDIMS]; /*chunk name */
497  uint32_t rd_count; /*bytes remaining to be read */
498  uint32_t wr_count; /*bytes remaining to be written */
499  haddr_t chunk_addr; /*address of chunk in file */
500  uint8_t *chunk; /*the unfiltered chunk data */
501  unsigned idx; /*index in hash table */
502  struct H5D_rdcc_ent_t *next;/*next item in doubly-linked list */
503  struct H5D_rdcc_ent_t *prev;/*previous item in doubly-linked list */
505 typedef H5D_rdcc_ent_t *H5D_rdcc_ent_ptr_t; /* For free lists */
506 
507 
508 /*****************************/
509 /* Package Private Variables */
510 /*****************************/
511 extern H5D_dxpl_cache_t H5D_def_dxpl_cache;
512 
513 /* Storage layout class I/O operations */
518 
519 /* Chunked layout operations */
521 
522 
523 /******************************/
524 /* Package Private Prototypes */
525 /******************************/
526 
529 H5_DLL H5D_t *H5D__create(H5F_t *file, hid_t type_id, const H5S_t *space,
530  hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id);
531 H5_DLL H5D_t *H5D__create_named(const H5G_loc_t *loc, const char *name,
532  hid_t type_id, const H5S_t *space, hid_t lcpl_id, hid_t dcpl_id,
533  hid_t dapl_id, hid_t dxpl_id);
535  hid_t dxpl_id);
536 H5_DLL herr_t H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc,
537  hbool_t full_overwrite, hsize_t old_dim[]);
538 H5_DLL herr_t H5D__get_storage_size(H5D_t *dset, hid_t dxpl_id, hsize_t *storage_size);
539 H5_DLL herr_t H5D__get_chunk_storage_size(H5D_t *dset, hid_t dxpl_id, const hsize_t *offset, hsize_t *storage_size);
540 H5_DLL haddr_t H5D__get_offset(const H5D_t *dset);
541 H5_DLL void *H5D__vlen_get_buf_size_alloc(size_t size, void *info);
542 H5_DLL herr_t H5D__vlen_get_buf_size(void *elem, hid_t type_id, unsigned ndim,
543  const hsize_t *point, void *op_data);
545 H5_DLL herr_t H5D__set_extent(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id);
546 H5_DLL herr_t H5D__get_dxpl_cache(hid_t dxpl_id, H5D_dxpl_cache_t **cache);
547 H5_DLL herr_t H5D__flush_sieve_buf(H5D_t *dataset, hid_t dxpl_id);
548 H5_DLL herr_t H5D__mark(const H5D_t *dataset, hid_t dxpl_id, unsigned flags);
549 H5_DLL herr_t H5D__flush_real(H5D_t *dataset, hid_t dxpl_id);
550 
551 /* Internal I/O routines */
552 H5_DLL herr_t H5D__read(H5D_t *dataset, hid_t mem_type_id,
553  const H5S_t *mem_space, const H5S_t *file_space, hid_t dset_xfer_plist,
554  void *buf/*out*/);
555 
556 /* Functions that perform direct serial I/O operations */
558  const H5D_type_info_t *type_info,
559  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
561  const H5D_type_info_t *type_info,
562  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
563 
564 /* Functions that perform scatter-gather serial I/O operations */
565 H5_DLL herr_t H5D__scatter_mem(const void *_tscat_buf,
566  const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts,
567  const H5D_dxpl_cache_t *dxpl_cache, void *_buf);
569  const H5D_type_info_t *type_info,
570  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
572  const H5D_type_info_t *type_info,
573  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
574 
575 /* Functions that operate on dataset's layout information */
576 H5_DLL herr_t H5D__layout_set_io_ops(const H5D_t *dataset);
577 H5_DLL size_t H5D__layout_meta_size(const H5F_t *f, const H5O_layout_t *layout,
578  hbool_t include_compact_data);
579 H5_DLL herr_t H5D__layout_oh_create(H5F_t *file, hid_t dxpl_id, H5O_t *oh,
580  H5D_t *dset, hid_t dapl_id);
581 H5_DLL herr_t H5D__layout_oh_read(H5D_t *dset, hid_t dxpl_id, hid_t dapl_id,
582  H5P_genplist_t *plist);
583 H5_DLL herr_t H5D__layout_oh_write(H5D_t *dataset, hid_t dxpl_id, H5O_t *oh,
584  unsigned update_flags);
585 
586 /* Functions that operate on contiguous storage */
588  H5O_storage_contig_t *storage);
589 H5_DLL hbool_t H5D__contig_is_space_alloc(const H5O_storage_t *storage);
590 H5_DLL herr_t H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id);
591 H5_DLL herr_t H5D__contig_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
592  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
593  H5D_chunk_map_t *fm);
594 H5_DLL herr_t H5D__contig_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
595  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
596  H5D_chunk_map_t *fm);
597 H5_DLL herr_t H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
598  H5F_t *f_dst, H5O_storage_contig_t *storage_dst, H5T_t *src_dtype,
599  H5O_copy_t *cpy_info, hid_t dxpl_id);
601  const H5O_storage_t *store);
602 
603 
604 /* Functions that operate on chunked dataset storage */
606  hbool_t write_op);
607 H5_DLL herr_t H5D__chunk_create(const H5D_t *dset /*in,out*/, hid_t dxpl_id);
609 H5_DLL herr_t H5D__chunk_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
610  hid_t dapl_id);
611 H5_DLL hbool_t H5D__chunk_is_space_alloc(const H5O_storage_t *storage);
612 H5_DLL herr_t H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id,
613  const hsize_t *chunk_offset, hsize_t chunk_idx, H5D_chunk_ud_t *udata);
614 H5_DLL void *H5D__chunk_lock(const H5D_io_info_t *io_info,
615  H5D_chunk_ud_t *udata, hbool_t relax);
617  const H5D_chunk_ud_t *udata, hbool_t dirty, void *chunk,
618  uint32_t naccessed);
619 H5_DLL herr_t H5D__chunk_allocated(H5D_t *dset, hid_t dxpl_id, hsize_t *nbytes);
620 H5_DLL herr_t H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id,
621  hbool_t full_overwrite, hsize_t old_dim[]);
623  const hsize_t *old_dim);
624 #ifdef H5_HAVE_PARALLEL
625 H5_DLL herr_t H5D__chunk_addrmap(const H5D_io_info_t *io_info, haddr_t chunk_addr[]);
626 #endif /* H5_HAVE_PARALLEL */
628 H5_DLL herr_t H5D__chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src,
629  H5O_layout_chunk_t *layout_src, H5F_t *f_dst, H5O_storage_chunk_t *storage_dst,
630  const H5S_extent_t *ds_extent_src, const H5T_t *dt_src,
631  const H5O_pline_t *pline_src, H5O_copy_t *cpy_info, hid_t dxpl_id);
632 H5_DLL herr_t H5D__chunk_bh_info(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
633  const H5O_pline_t *pline, hsize_t *btree_size);
634 H5_DLL herr_t H5D__chunk_dump_index(H5D_t *dset, hid_t dxpl_id, FILE *stream);
635 H5_DLL herr_t H5D__chunk_dest(H5F_t *f, hid_t dxpl_id, H5D_t *dset);
637  H5O_storage_t *store);
638 H5_DLL herr_t H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters,
639  hsize_t *offset, uint32_t data_size, const void *buf);
641  uint32_t *filters, void *buf);
642 #ifdef H5D_CHUNK_DEBUG
643 H5_DLL herr_t H5D__chunk_stats(const H5D_t *dset, hbool_t headers);
644 #endif /* H5D_CHUNK_DEBUG */
645 
646 /* Functions that operate on compact dataset storage */
647 H5_DLL herr_t H5D__compact_fill(const H5D_t *dset, hid_t dxpl_id);
648 H5_DLL herr_t H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *storage_src,
649  H5F_t *f_dst, H5O_storage_compact_t *storage_dst, H5T_t *src_dtype,
650  H5O_copy_t *cpy_info, hid_t dxpl_id);
651 
652 /* Functions that operate on EFL (External File List)*/
653 H5_DLL hbool_t H5D__efl_is_space_alloc(const H5O_storage_t *storage);
654 H5_DLL herr_t H5D__efl_bh_info(H5F_t *f, hid_t dxpl_id, H5O_efl_t *efl,
655  hsize_t *heap_size);
656 
657 /* Functions that perform fill value operations on datasets */
658 H5_DLL herr_t H5D__fill(const void *fill, const H5T_t *fill_type, void *buf,
659  const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id);
660 H5_DLL herr_t H5D__fill_init(H5D_fill_buf_info_t *fb_info, void *caller_fill_buf,
661  H5MM_allocate_t alloc_func, void *alloc_info,
662  H5MM_free_t free_func, void *free_info,
663  const H5O_fill_t *fill, const H5T_t *dset_type, hid_t dset_type_id,
664  size_t nelmts, size_t min_buf_size, hid_t dxpl_id);
665 H5_DLL herr_t H5D__fill_refill_vl(H5D_fill_buf_info_t *fb_info, size_t nelmts,
666  hid_t dxpl_id);
668 
669 #ifdef H5_HAVE_PARALLEL
670 
671 #ifdef H5S_DEBUG
672 #ifndef H5Dmpio_DEBUG
673 #define H5Dmpio_DEBUG
674 #endif /*H5Dmpio_DEBUG*/
675 #endif/*H5S_DEBUG*/
676 /* MPI-IO function to read, it will select either regular or irregular read */
677 H5_DLL herr_t H5D__mpio_select_read(const H5D_io_info_t *io_info,
678  const H5D_type_info_t *type_info,
679  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
680 
681 /* MPI-IO function to write, it will select either regular or irregular read */
682 H5_DLL herr_t H5D__mpio_select_write(const H5D_io_info_t *io_info,
683  const H5D_type_info_t *type_info,
684  hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
685 
686 /* MPI-IO functions to handle contiguous collective IO */
687 H5_DLL herr_t H5D__contig_collective_read(H5D_io_info_t *io_info,
688  const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
689  const H5S_t *mem_space, H5D_chunk_map_t *fm);
690 H5_DLL herr_t H5D__contig_collective_write(H5D_io_info_t *io_info,
691  const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
692  const H5S_t *mem_space, H5D_chunk_map_t *fm);
693 
694 /* MPI-IO functions to handle chunked collective IO */
695 H5_DLL herr_t H5D__chunk_collective_read(H5D_io_info_t *io_info,
696  const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
697  const H5S_t *mem_space, H5D_chunk_map_t *fm);
698 H5_DLL herr_t H5D__chunk_collective_write(H5D_io_info_t *io_info,
699  const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
700  const H5S_t *mem_space, H5D_chunk_map_t *fm);
701 
702 /* MPI-IO function to check if a direct I/O transfer is possible between
703  * memory and the file */
704 H5_DLL htri_t H5D__mpio_opt_possible(const H5D_io_info_t *io_info,
705  const H5S_t *file_space, const H5S_t *mem_space,
706  const H5D_type_info_t *type_info, const H5D_chunk_map_t *fm,
707  H5P_genplist_t *dx_plist);
708 
709 #endif /* H5_HAVE_PARALLEL */
710 
711 /* Testing functions */
712 #ifdef H5D_TESTING
713 H5_DLL herr_t H5D__layout_version_test(hid_t did, unsigned *version);
714 H5_DLL herr_t H5D__layout_contig_size_test(hid_t did, hsize_t *size);
715 H5_DLL herr_t H5D__layout_compact_dirty_test(hid_t did, hbool_t *dirty);
716 H5_DLL herr_t H5D__current_cache_size_test(hid_t did, size_t *nbytes_used, int *nused);
717 #endif /* H5D_TESTING */
718 
719 #endif /*_H5Dpkg_H*/
720 
uint32_t nbytes
Definition: H5Dpkg.h:266
H5_DLL herr_t H5D__layout_set_io_ops(const H5D_t *dataset)
int(* H5D_chunk_iterate_func_t)(const H5D_chk_idx_info_t *idx_info, H5D_chunk_cb_func_t chunk_cb, void *chunk_udata)
Definition: H5Dpkg.h:285
H5D_layout_read_func_t ser_read
Definition: H5Dpkg.h:130
const H5S_t * file_space
Definition: H5Dpkg.h:336
H5_DLL H5D_t * H5D__create(H5F_t *file, hid_t type_id, const H5S_t *space, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id)
H5D_dcpl_cache_t dcpl_cache
Definition: H5Dpkg.h:416
int version
Definition: jpeglib.h:901
H5_DLL herr_t H5D__read(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space, const H5S_t *file_space, hid_t dset_xfer_plist, void *buf)
H5_DLL herr_t H5D__chunk_dump_index(H5D_t *dset, hid_t dxpl_id, FILE *stream)
const H5D_t * dset
Definition: H5Dpkg.h:188
H5_DLL herr_t H5D__fill_init(H5D_fill_buf_info_t *fb_info, void *caller_fill_buf, H5MM_allocate_t alloc_func, void *alloc_info, H5MM_free_t free_func, void *free_info, const H5O_fill_t *fill, const H5T_t *dset_type, hid_t dset_type_id, size_t nelmts, size_t min_buf_size, hid_t dxpl_id)
hid_t dxpl_id
Definition: H5Dpkg.h:193
H5S_t * mspace
Definition: H5Dpkg.h:484
HDFFCLIBAPI intf * info
H5_DLL herr_t H5D__chunk_bh_info(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout, const H5O_pline_t *pline, hsize_t *btree_size)
H5D_rdcdc_t contig
Definition: H5Dpkg.h:422
unsigned int hbool_t
Definition: H5public.h:142
herr_t(* H5D_chunk_delete_func_t)(const H5D_chk_idx_info_t *idx_info)
Definition: H5Dpkg.h:289
H5S_sel_type msel_type
Definition: H5Dpkg.h:344
struct H5D_rdcc_ent_t H5D_rdcc_ent_t
H5_DLL herr_t H5D__contig_fill(const H5D_t *dset, hid_t dxpl_id)
herr_t(* H5D_layout_write_func_t)(struct H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space, struct H5D_chunk_map_t *fm)
Definition: H5Dpkg.h:112
hid_t dapl_id
Definition: H5Dpkg.h:453
size_t request_nelmts
Definition: H5Dpkg.h:89
H5D_compact_storage_t compact
Definition: H5Dpkg.h:177
void *(* H5MM_allocate_t)(size_t size, void *alloc_info)
Definition: H5MMpublic.h:34
herr_t(* H5D_chunk_size_func_t)(const H5D_chk_idx_info_t *idx_info, hsize_t *idx_size)
Definition: H5Dpkg.h:294
H5D_chunk_info_t * last_chunk_info
Definition: H5Dpkg.h:353
H5_DLL herr_t H5D__chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src, H5O_layout_chunk_t *layout_src, H5F_t *f_dst, H5O_storage_chunk_t *storage_dst, const H5S_extent_t *ds_extent_src, const H5T_t *dt_src, const H5O_pline_t *pline_src, H5O_copy_t *cpy_info, hid_t dxpl_id)
H5D_chunk_dest_func_t dest
Definition: H5Dpkg.h:317
H5D_chunk_storage_t chunk
Definition: H5Dpkg.h:176
struct H5D_rdcc_t H5D_rdcc_t
uint32_t nbytes
Definition: H5Dpkg.h:239
hbool_t bkg_buf_allocated
Definition: H5Dpkg.h:93
H5_DLL herr_t H5D__get_space_status(H5D_t *dset, H5D_space_status_t *allocation, hid_t dxpl_id)
Definition: H5Dpkg.h:433
hbool_t is_conv_noop
Definition: H5Dpkg.h:85
hbool_t locked
Definition: H5Dpkg.h:493
H5S_t * single_space
Definition: H5Dpkg.h:348
unsigned nmisses
Definition: H5Dpkg.h:376
uint32_t wr_count
Definition: H5Dpkg.h:498
hid_t src_type_id
Definition: H5Dpkg.h:78
H5D_layout_writevv_func_t writevv
Definition: H5Dpkg.h:137
H5S_t * fspace
Definition: H5Dpkg.h:325
H5_DLL herr_t H5D__scatgath_read(const H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space)
long long ssize_t
Definition: H5public.h:156
H5_DLL herr_t H5D__chunk_allocated(H5D_t *dset, hid_t dxpl_id, hsize_t *nbytes)
H5D_chunk_create_func_t create
Definition: H5Dpkg.h:304
H5_DLL size_t H5D__layout_meta_size(const H5F_t *f, const H5O_layout_t *layout, hbool_t include_compact_data)
#define H5_DLL
Definition: H5api_adpt.h:256
H5D_chunk_insert_func_t insert
Definition: H5Dpkg.h:306
H5FD_mpio_xfer_t
Definition: H5FDmpi.h:38
void * fill_alloc_info
Definition: H5Dpkg.h:459
herr_t(* H5D_chunk_get_addr_func_t)(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udata)
Definition: H5Dpkg.h:282
uint8_t * bkg_buf
Definition: H5Dpkg.h:92
H5_DLL herr_t H5D__chunk_delete(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5O_storage_t *store)
H5_DLL herr_t H5D__flush_sieve_buf(H5D_t *dataset, hid_t dxpl_id)
H5_DLL herr_t H5D__fill_refill_vl(H5D_fill_buf_info_t *fb_info, size_t nelmts, hid_t dxpl_id)
struct H5D_chunk_rec_t H5D_chunk_rec_t
H5S_sel_type
Definition: H5Spublic.h:79
hbool_t(* H5D_layout_is_space_alloc_func_t)(const H5O_storage_t *storage)
Definition: H5Dpkg.h:104
herr_t(* H5D_layout_construct_func_t)(H5F_t *f, H5D_t *dset)
Definition: H5Dpkg.h:101
int herr_t
Definition: H5public.h:124
const H5O_pline_t * pline
Definition: H5Dpkg.h:222
unsigned filter_mask
Definition: H5Dpkg.h:367
size_t sieve_size
Definition: H5Dpkg.h:397
H5D_layout_io_init_func_t io_init
Definition: H5Dpkg.h:129
H5_DLL herr_t H5D__layout_oh_read(H5D_t *dset, hid_t dxpl_id, hid_t dapl_id, H5P_genplist_t *plist)
unsigned filter_mask
Definition: H5Dpkg.h:241
herr_t(* H5D_chunk_insert_func_t)(const H5D_chk_idx_info_t *idx_info, H5D_chunk_ud_t *udata)
Definition: H5Dpkg.h:280
hsize_t index
Definition: H5Dpkg.h:322
herr_t(* H5D_chunk_init_func_t)(const H5D_chk_idx_info_t *idx_info, const H5S_t *space, haddr_t dset_ohdr_addr)
Definition: H5Dpkg.h:276
hbool_t use_caller_fill_buf
Definition: H5Dpkg.h:467
H5D_layout_init_func_t init
Definition: H5Dpkg.h:127
hsize_t last_index
Definition: H5Dpkg.h:352
H5_DLL herr_t H5D__contig_delete(H5F_t *f, hid_t dxpl_id, const H5O_storage_t *store)
herr_t(* H5D_io_single_write_func_t)(const struct H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space)
Definition: H5Dpkg.h:146
haddr_t addr
Definition: H5Dpkg.h:268
hbool_t dirty
Definition: H5Dpkg.h:494
H5D_layout_read_func_t multi_read
Definition: H5Dpkg.h:152
H5D_layout_io_term_func_t io_term
Definition: H5Dpkg.h:139
H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_CHUNK[1]
Definition: H5Dpkg.h:517
H5_DLL herr_t H5D__contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src, H5F_t *f_dst, H5O_storage_contig_t *storage_dst, H5T_t *src_dtype, H5O_copy_t *cpy_info, hid_t dxpl_id)
herr_t(* H5D_layout_io_init_func_t)(const struct H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space, struct H5D_chunk_map_t *cm)
Definition: H5Dpkg.h:105
unsigned long long hsize_t
Definition: H5public.h:169
herr_t(* H5D_chunk_dest_func_t)(const H5D_chk_idx_info_t *idx_info)
Definition: H5Dpkg.h:299
hbool_t deleted
Definition: H5Dpkg.h:495
H5T_t * type
Definition: H5Dpkg.h:411
const H5T_t * mem_type
Definition: H5Dpkg.h:75
H5_DLL herr_t H5D__chunk_create(const H5D_t *dset, hid_t dxpl_id)
unsigned mspace_shared
Definition: H5Dpkg.h:328
const struct H5D_rdcc_t * rdcc
Definition: H5Dpkg.h:255
H5D_rdcc_ent_t * H5D_rdcc_ent_ptr_t
Definition: H5Dpkg.h:505
herr_t(* H5D_layout_io_term_func_t)(const struct H5D_chunk_map_t *cm)
Definition: H5Dpkg.h:122
H5_DLL herr_t H5D__get_chunk_storage_size(H5D_t *dset, hid_t dxpl_id, const hsize_t *offset, hsize_t *storage_size)
size_t fo_count
Definition: H5Dpkg.h:409
H5_DLL htri_t H5D__chunk_cacheable(const H5D_io_info_t *io_info, haddr_t caddr, hbool_t write_op)
H5_DLL herr_t H5D__get_storage_size(H5D_t *dset, hid_t dxpl_id, hsize_t *storage_size)
H5S_t * single_space
Definition: H5Dpkg.h:389
H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_CONTIG[1]
Definition: H5Dpkg.h:514
H5_DLL herr_t H5D__chunk_unlock(const H5D_io_info_t *io_info, const H5D_chunk_ud_t *udata, hbool_t dirty, void *chunk, uint32_t naccessed)
H5_DLLVAR const H5D_chunk_ops_t H5D_COPS_BTREE[1]
Definition: H5Dpkg.h:520
struct H5D_rdcc_ent_t * next
Definition: H5Dpkg.h:502
H5O_layout_chunk_t * layout
Definition: H5Dpkg.h:223
herr_t(* H5D_chunk_remove_func_t)(const H5D_chk_idx_info_t *idx_info, H5D_chunk_common_ud_t *udata)
Definition: H5Dpkg.h:287
H5_DLL herr_t H5D__vlen_get_buf_size(void *elem, hid_t type_id, unsigned ndim, const hsize_t *point, void *op_data)
void(* H5MM_free_t)(void *mem, void *free_info)
Definition: H5MMpublic.h:35
hsize_t size
Definition: H5Dpkg.h:488
hbool_t(* H5D_chunk_is_space_alloc_func_t)(const H5O_storage_chunk_t *storage)
Definition: H5Dpkg.h:279
H5_DLL herr_t H5D__alloc_storage(const H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc, hbool_t full_overwrite, hsize_t old_dim[])
unsigned fspace_shared
Definition: H5Dpkg.h:326
H5D_io_op_type_t op_type
Definition: H5Dpkg.h:206
H5D_io_single_write_func_t single_write
Definition: H5Dpkg.h:155
H5T_path_t * tpath
Definition: H5Dpkg.h:77
struct H5D_rdcc_ent_t * tail
Definition: H5Dpkg.h:383
H5D_layout_construct_func_t construct
Definition: H5Dpkg.h:126
H5O_layout_t * layout
Definition: H5Dpkg.h:333
H5_DLL herr_t H5D__contig_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space, H5D_chunk_map_t *fm)
H5_DLL herr_t H5D__contig_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space, H5D_chunk_map_t *fm)
const void * wbuf
Definition: H5Dpkg.h:209
H5_DLL herr_t H5D__scatgath_write(const H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space)
void * vl_tbuf
Definition: H5Dpkg.h:486
H5O_layout_t layout
Definition: H5Dpkg.h:417
H5_DLL herr_t H5D__get_dxpl_cache(hid_t dxpl_id, H5D_dxpl_cache_t **cache)
const H5O_fill_t * fill
Definition: H5Dpkg.h:464
herr_t(* H5D_layout_read_func_t)(struct H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space, struct H5D_chunk_map_t *fm)
Definition: H5Dpkg.h:109
struct H5D_io_info_t H5D_io_info_t
Definition: H5Spkg.h:192
H5D_io_ops_t io_ops
Definition: H5Dpkg.h:205
uint64_t haddr_t
Definition: H5public.h:182
H5_DLL hbool_t H5D__contig_is_space_alloc(const H5O_storage_t *storage)
hbool_t tconv_buf_allocated
Definition: H5Dpkg.h:91
H5D_dxpl_cache_t H5D_def_dxpl_cache
hid_t type_id
Definition: H5Dpkg.h:450
struct H5D_chunk_cached_t H5D_chunk_cached_t
H5T_bkg_t need_bkg
Definition: H5Dpkg.h:88
unsigned m_ndims
Definition: H5Dpkg.h:343
size_t nbytes_used
Definition: H5Dpkg.h:384
haddr_t dset_addr
Definition: H5Dpkg.h:160
HDFFCLIBAPI _fcd name
H5D_chunk_iterate_func_t iterate
Definition: H5Dpkg.h:309
H5D_chunk_init_func_t init
Definition: H5Dpkg.h:303
struct H5D_rdcc_ent_t * head
Definition: H5Dpkg.h:382
H5_DLL void * H5D__chunk_lock(const H5D_io_info_t *io_info, H5D_chunk_ud_t *udata, hbool_t relax)
H5D_space_status_t
Definition: H5Dpublic.h:75
size_t elmts_per_buf
Definition: H5Dpkg.h:476
const H5O_storage_chunk_t * storage
Definition: H5Dpkg.h:253
unsigned nhits
Definition: H5Dpkg.h:375
size_t max_elmt_size
Definition: H5Dpkg.h:475
double w0
Definition: H5Dpkg.h:381
herr_t(* H5D_chunk_reset_func_t)(H5O_storage_chunk_t *storage, hbool_t reset_addr)
Definition: H5Dpkg.h:296
H5SL_t * sel_chunks
Definition: H5Dpkg.h:346
Definition: H5Opkg.h:262
H5MM_allocate_t fill_alloc_func
Definition: H5Dpkg.h:458
const hsize_t * offset
Definition: H5Dpkg.h:254
H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_COMPACT[1]
Definition: H5Dpkg.h:516
H5_DLL herr_t H5D__chunk_lookup(const H5D_t *dset, hid_t dxpl_id, const hsize_t *chunk_offset, hsize_t chunk_idx, H5D_chunk_ud_t *udata)
H5_DLL herr_t H5D__chunk_direct_write(const H5D_t *dset, hid_t dxpl_id, uint32_t filters, hsize_t *offset, uint32_t data_size, const void *buf)
H5D_storage_t * store
Definition: H5Dpkg.h:203
H5_DLL herr_t H5D__scatter_mem(const void *_tscat_buf, const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts, const H5D_dxpl_cache_t *dxpl_cache, void *_buf)
hbool_t use_single
Definition: H5Dpkg.h:350
struct H5D_chunk_ud_t H5D_chunk_ud_t
herr_t(* H5D_chunk_create_func_t)(const H5D_chk_idx_info_t *idx_info)
Definition: H5Dpkg.h:278
H5_DLL herr_t H5D__chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id, const hsize_t *old_dim)
struct H5D_chk_idx_info_t H5D_chk_idx_info_t
H5T_t * mem_type
Definition: H5Dpkg.h:470
Definition: H5Tpkg.h:304
H5_DLL herr_t H5D__efl_bh_info(H5F_t *f, hid_t dxpl_id, H5O_efl_t *efl, hsize_t *heap_size)
struct H5D_io_ops_t H5D_io_ops_t
ssize_t(* H5D_layout_writevv_func_t)(const struct H5D_io_info_t *io_info, size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[], size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[])
Definition: H5Dpkg.h:118
H5_DLL herr_t H5D__chunk_dest(H5F_t *f, hid_t dxpl_id, H5D_t *dset)
HDFFCLIBAPI intf * size
int hid_t
Definition: H5Ipublic.h:54
H5_DLL herr_t H5D__chunk_set_info(const H5D_t *dset)
hsize_t dset_size
Definition: H5Dpkg.h:161
H5D_chunk_cached_t last
Definition: H5Dpkg.h:386
struct H5D_rdcc_ent_t * prev
Definition: H5Dpkg.h:503
H5D_shared_t * shared
Definition: H5Dpkg.h:436
size_t dst_type_size
Definition: H5Dpkg.h:83
struct H5D_chunk_info_t H5D_chunk_info_t
H5_DLL void * H5D__vlen_get_buf_size_alloc(size_t size, void *info)
struct H5D_shared_t H5D_shared_t
struct H5D_rdcc_ent_t ** slot
Definition: H5Dpkg.h:387
hbool_t layout_dirty
Definition: H5Dpkg.h:414
ssize_t(* H5D_layout_readvv_func_t)(const struct H5D_io_info_t *io_info, size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[], size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[])
Definition: H5Dpkg.h:115
H5D_layout_write_func_t multi_write
Definition: H5Dpkg.h:153
H5D_chunk_delete_func_t idx_delete
Definition: H5Dpkg.h:311
H5_DLL herr_t H5D__compact_fill(const H5D_t *dset, hid_t dxpl_id)
unsigned nflushes
Definition: H5Dpkg.h:377
H5D_chunk_resize_func_t resize
Definition: H5Dpkg.h:308
const H5S_t * mem_space
Definition: H5Dpkg.h:340
H5_DLL herr_t H5D__chunk_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset, hid_t dapl_id)
int(* H5D_chunk_cb_func_t)(const H5D_chunk_rec_t *chunk_rec, void *udata)
Definition: H5Dpkg.h:272
haddr_t sieve_loc
Definition: H5Dpkg.h:396
uint8_t * tconv_buf
Definition: H5Dpkg.h:90
H5T_path_t * fill_to_mem_tpath
Definition: H5Dpkg.h:462
H5T_path_t * mem_to_dset_tpath
Definition: H5Dpkg.h:463
H5_DLL herr_t H5D__select_read(const H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space)
herr_t(* H5D_chunk_dump_func_t)(const H5O_storage_chunk_t *storage, FILE *stream)
Definition: H5Dpkg.h:297
H5D_chunk_dump_func_t dump
Definition: H5Dpkg.h:316
H5D_chunk_is_space_alloc_func_t is_space_alloc
Definition: H5Dpkg.h:305
hbool_t is_xform_noop
Definition: H5Dpkg.h:86
H5D_chunk_copy_shutdown_func_t copy_shutdown
Definition: H5Dpkg.h:313
hbool_t valid
Definition: H5Dpkg.h:364
H5D_layout_ops_t layout_ops
Definition: H5Dpkg.h:204
H5D_io_single_read_func_t single_read
Definition: H5Dpkg.h:154
H5D_layout_flush_func_t flush
Definition: H5Dpkg.h:138
struct H5D_rdcdc_t H5D_rdcdc_t
unsigned f_ndims
Definition: H5Dpkg.h:337
void * fill_free_info
Definition: H5Dpkg.h:461
char * extfile_prefix
Definition: H5Dpkg.h:430
H5_DLL herr_t H5D__chunk_allocate(const H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite, hsize_t old_dim[])
H5_DLL herr_t H5D__contig_alloc(H5F_t *f, hid_t dxpl_id, H5O_storage_contig_t *storage)
hbool_t has_vlen_fill_type
Definition: H5Dpkg.h:477
unsigned filter_mask
Definition: H5Dpkg.h:267
const H5S_t * space
Definition: H5Dpkg.h:451
hbool_t sieve_dirty
Definition: H5Dpkg.h:399
H5_DLL herr_t H5D__flush_real(H5D_t *dataset, hid_t dxpl_id)
const H5T_t * file_type
Definition: H5Dpkg.h:471
H5SL_t * sel_chunks
Definition: H5Dpkg.h:388
void * rbuf
Definition: H5Dpkg.h:208
H5S_t * fspace
Definition: H5Dpkg.h:483
hid_t dcpl_id
Definition: H5Dpkg.h:452
H5_DLL herr_t H5D__fill(const void *fill, const H5T_t *fill_type, void *buf, const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id)
size_t max_type_size
Definition: H5Dpkg.h:84
herr_t(* H5D_io_single_read_func_t)(const struct H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space)
Definition: H5Dpkg.h:143
H5D_layout_is_space_alloc_func_t is_space_alloc
Definition: H5Dpkg.h:128
H5D_chunk_get_addr_func_t get_addr
Definition: H5Dpkg.h:307
unsigned ninits
Definition: H5Dpkg.h:374
size_t nbytes_max
Definition: H5Dpkg.h:379
const H5T_t * dset_type
Definition: H5Dpkg.h:76
H5D_rdcc_t chunk
Definition: H5Dpkg.h:427
uint32_t nbytes
Definition: H5Dpkg.h:366
haddr_t addr
Definition: H5Dpkg.h:368
size_t nslots
Definition: H5Dpkg.h:380
hid_t type_id
Definition: H5Dpkg.h:410
herr_t(* H5D_chunk_copy_shutdown_func_t)(H5O_storage_chunk_t *storage_src, H5O_storage_chunk_t *storage_dst, hid_t dxpl_id)
Definition: H5Dpkg.h:292
H5_DLL herr_t H5D__chunk_direct_read(const H5D_t *dset, hid_t dxpl_id, hsize_t *offset, uint32_t *filters, void *buf)
H5MM_free_t fill_free_func
Definition: H5Dpkg.h:460
H5_DLL herr_t H5D__mark(const H5D_t *dataset, hid_t dxpl_id, unsigned flags)
hbool_t space_dirty
Definition: H5Dpkg.h:413
HDFFCLIBAPI intf intf * flags
hid_t dst_type_id
Definition: H5Dpkg.h:79
union H5D_storage_t H5D_storage_t
H5FD_mpio_collective_opt_t
Definition: H5FDmpi.h:51
size_t mem_elmt_size
Definition: H5Dpkg.h:474
struct H5D_fill_buf_info_t H5D_fill_buf_info_t
#define H5_DLLVAR
Definition: H5api_adpt.h:257
H5O_efl_t efl
Definition: H5Dpkg.h:178
H5D_chunk_size_func_t size
Definition: H5Dpkg.h:314
struct H5D_chunk_common_ud_t H5D_chunk_common_ud_t
H5D_layout_readvv_func_t readvv
Definition: H5Dpkg.h:136
struct H5D_chunk_ops_t H5D_chunk_ops_t
size_t sieve_buf_size
Definition: H5Dpkg.h:398
H5D_time_alloc_t
Definition: H5Dpkg.h:440
H5_DLL herr_t H5D__layout_oh_create(H5F_t *file, hid_t dxpl_id, H5O_t *oh, H5D_t *dset, hid_t dapl_id)
H5D_layout_write_func_t ser_write
Definition: H5Dpkg.h:131
H5_DLL herr_t H5D__term_pub_interface(void)
struct H5D_type_info_t H5D_type_info_t
H5_DLL H5D_t * H5D__create_named(const H5G_loc_t *loc, const char *name, hid_t type_id, const H5S_t *space, hid_t lcpl_id, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id)
herr_t(* H5D_layout_init_func_t)(H5F_t *f, hid_t dxpl_id, const H5D_t *dset, hid_t dapl_id)
Definition: H5Dpkg.h:102
int nused
Definition: H5Dpkg.h:385
herr_t(* H5D_layout_flush_func_t)(H5D_t *dataset, hid_t dxpl_id)
Definition: H5Dpkg.h:121
hbool_t checked_filters
Definition: H5Dpkg.h:418
const H5D_dxpl_cache_t * dxpl_cache
Definition: H5Dpkg.h:192
struct H5D_chunk_map_t H5D_chunk_map_t
H5D_io_op_type_t
Definition: H5Dpkg.h:182
H5_DLL herr_t H5D__fill_term(H5D_fill_buf_info_t *fb_info)
haddr_t chunk_addr
Definition: H5Dpkg.h:499
H5_DLL hbool_t H5D__chunk_is_space_alloc(const H5O_storage_t *storage)
H5D_t * dset
Definition: H5Dpkg.h:482
H5O_storage_chunk_t * storage
Definition: H5Dpkg.h:224
H5D_chunk_reset_func_t reset
Definition: H5Dpkg.h:315
H5S_t * mchunk_tmpl
Definition: H5Dpkg.h:341
unsigned idx
Definition: H5Dpkg.h:501
HDFFCLIBAPI intf * offset
haddr_t chunk_addr
Definition: H5Dpkg.h:242
H5D_chunk_common_ud_t common
Definition: H5Dpkg.h:262
H5G_name_t path
Definition: H5Dpkg.h:435
H5_DLL haddr_t H5D__get_offset(const H5D_t *dset)
int htri_t
Definition: H5public.h:143
H5_DLL herr_t H5D__select_write(const H5D_io_info_t *io_info, const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space)
H5_DLL hbool_t H5D__efl_is_space_alloc(const H5O_storage_t *storage)
H5S_t * space
Definition: H5Dpkg.h:412
herr_t(* H5D_chunk_resize_func_t)(H5O_layout_chunk_t *layout)
Definition: H5Dpkg.h:284
struct H5D_layout_ops_t H5D_layout_ops_t
H5_DLL herr_t H5D__layout_oh_write(H5D_t *dataset, hid_t dxpl_id, H5O_t *oh, unsigned update_flags)
H5_DLL herr_t H5D__chunk_update_cache(H5D_t *dset, hid_t dxpl_id)
size_t bkg_buf_size
Definition: H5Dpkg.h:469
hsize_t nelmts
Definition: H5Dpkg.h:334
unsigned char * sieve_buf
Definition: H5Dpkg.h:395
hid_t dcpl_id
Definition: H5Dpkg.h:415
uint8_t * chunk
Definition: H5Dpkg.h:500
H5T_bkg_t
Definition: H5Tpublic.h:142
uint32_t chunk_points
Definition: H5Dpkg.h:323
H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_EFL[1]
Definition: H5Dpkg.h:515
herr_t(* H5D_chunk_copy_setup_func_t)(const H5D_chk_idx_info_t *idx_info_src, const H5D_chk_idx_info_t *idx_info_dst)
Definition: H5Dpkg.h:290
const H5T_subset_info_t * cmpd_subset
Definition: H5Dpkg.h:87
size_t src_type_size
Definition: H5Dpkg.h:82
H5D_chunk_info_t * single_chunk_info
Definition: H5Dpkg.h:390
H5S_t * mspace
Definition: H5Dpkg.h:327
H5_DLL herr_t H5D__check_filters(H5D_t *dataset)
H5_DLL herr_t H5D__set_extent(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id)
hbool_t * dirty
Definition: H5Dpkg.h:171
HDFFCLIBAPI intf * buf
H5O_loc_t oloc
Definition: H5Dpkg.h:434
unsigned idx_hint
Definition: H5Dpkg.h:265
const H5O_layout_chunk_t * layout
Definition: H5Dpkg.h:252
H5D_chunk_copy_setup_func_t copy_setup
Definition: H5Dpkg.h:312
size_t fill_buf_size
Definition: H5Dpkg.h:466
H5_DLL herr_t H5D__compact_copy(H5F_t *f_src, H5O_storage_compact_t *storage_src, H5F_t *f_dst, H5O_storage_compact_t *storage_dst, H5T_t *src_dtype, H5O_copy_t *cpy_info, hid_t dxpl_id)
H5D_contig_storage_t contig
Definition: H5Dpkg.h:175
H5S_sel_iter_t mem_iter
Definition: H5Dpkg.h:342
uint32_t rd_count
Definition: H5Dpkg.h:497
hsize_t * offset
Definition: H5Dpkg.h:166
H5D_chunk_info_t * single_chunk_info
Definition: H5Dpkg.h:349
Definition: H5Fpkg.h:255
void * fl_tbuf
Definition: H5Dpkg.h:485
H5_DLL herr_t H5D__term_deprec_interface(void)

MISR Toolkit - Copyright © 2005 - 2020 Jet Propulsion Laboratory
Generated on Fri Jun 19 2020 22:49:52