00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef H5D_PACKAGE
00025 #error "Do not include this file outside the H5D package!"
00026 #endif
00027
00028 #ifndef _H5Dpkg_H
00029 #define _H5Dpkg_H
00030
00031
00032 #include "H5Dprivate.h"
00033
00034
00035 #include "H5Gprivate.h"
00036 #include "H5SLprivate.h"
00037 #include "H5Tprivate.h"
00038
00039
00040
00041
00042
00043
00044 #define H5D_RESERVED_ATOMS 0
00045
00046
00047 #define H5D_MINHDR_SIZE 256
00048
00049
00050 #define H5D_BUILD_IO_INFO_WRT(io_info, ds, dxpl_c, dxpl_i, str, buf) \
00051 (io_info)->dset = ds; \
00052 (io_info)->dxpl_cache = dxpl_c; \
00053 (io_info)->dxpl_id = dxpl_i; \
00054 (io_info)->store = str; \
00055 (io_info)->op_type = H5D_IO_OP_WRITE; \
00056 (io_info)->u.wbuf = buf
00057 #define H5D_BUILD_IO_INFO_RD(io_info, ds, dxpl_c, dxpl_i, str, buf) \
00058 (io_info)->dset = ds; \
00059 (io_info)->dxpl_cache = dxpl_c; \
00060 (io_info)->dxpl_id = dxpl_i; \
00061 (io_info)->store = str; \
00062 (io_info)->op_type = H5D_IO_OP_READ; \
00063 (io_info)->u.rbuf = buf
00064
00065 #define H5D_CHUNK_HASH(D, ADDR) H5F_addr_hash(ADDR, (D)->cache.chunk.nslots)
00066
00067
00068
00069
00070
00071
00072
00073 typedef struct H5D_type_info_t {
00074
00075 const H5T_t *mem_type;
00076 const H5T_t *dset_type;
00077 H5T_path_t *tpath;
00078 hid_t src_type_id;
00079 hid_t dst_type_id;
00080
00081
00082 size_t src_type_size;
00083 size_t dst_type_size;
00084 size_t max_type_size;
00085 hbool_t is_conv_noop;
00086 hbool_t is_xform_noop;
00087 const H5T_subset_info_t *cmpd_subset;
00088 H5T_bkg_t need_bkg;
00089 size_t request_nelmts;
00090 uint8_t *tconv_buf;
00091 hbool_t tconv_buf_allocated;
00092 uint8_t *bkg_buf;
00093 hbool_t bkg_buf_allocated;
00094 } H5D_type_info_t;
00095
00096
00097 struct H5D_io_info_t;
00098 struct H5D_chunk_map_t;
00099
00100
00101 typedef herr_t (*H5D_layout_construct_func_t)(H5F_t *f, H5D_t *dset);
00102 typedef herr_t (*H5D_layout_init_func_t)(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
00103 hid_t dapl_id);
00104 typedef hbool_t (*H5D_layout_is_space_alloc_func_t)(const H5O_storage_t *storage);
00105 typedef herr_t (*H5D_layout_io_init_func_t)(const struct H5D_io_info_t *io_info,
00106 const H5D_type_info_t *type_info,
00107 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
00108 struct H5D_chunk_map_t *cm);
00109 typedef herr_t (*H5D_layout_read_func_t)(struct H5D_io_info_t *io_info,
00110 const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
00111 const H5S_t *mem_space, struct H5D_chunk_map_t *fm);
00112 typedef herr_t (*H5D_layout_write_func_t)(struct H5D_io_info_t *io_info,
00113 const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
00114 const H5S_t *mem_space, struct H5D_chunk_map_t *fm);
00115 typedef ssize_t (*H5D_layout_readvv_func_t)(const struct H5D_io_info_t *io_info,
00116 size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
00117 size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
00118 typedef ssize_t (*H5D_layout_writevv_func_t)(const struct H5D_io_info_t *io_info,
00119 size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
00120 size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
00121 typedef herr_t (*H5D_layout_flush_func_t)(H5D_t *dataset, hid_t dxpl_id);
00122 typedef herr_t (*H5D_layout_io_term_func_t)(const struct H5D_chunk_map_t *cm);
00123
00124
00125 typedef struct H5D_layout_ops_t {
00126 H5D_layout_construct_func_t construct;
00127 H5D_layout_init_func_t init;
00128 H5D_layout_is_space_alloc_func_t is_space_alloc;
00129 H5D_layout_io_init_func_t io_init;
00130 H5D_layout_read_func_t ser_read;
00131 H5D_layout_write_func_t ser_write;
00132 #ifdef H5_HAVE_PARALLEL
00133 H5D_layout_read_func_t par_read;
00134 H5D_layout_write_func_t par_write;
00135 #endif
00136 H5D_layout_readvv_func_t readvv;
00137 H5D_layout_writevv_func_t writevv;
00138 H5D_layout_flush_func_t flush;
00139 H5D_layout_io_term_func_t io_term;
00140 } H5D_layout_ops_t;
00141
00142
00143 typedef herr_t (*H5D_io_single_read_func_t)(const struct H5D_io_info_t *io_info,
00144 const H5D_type_info_t *type_info,
00145 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00146 typedef herr_t (*H5D_io_single_write_func_t)(const struct H5D_io_info_t *io_info,
00147 const H5D_type_info_t *type_info,
00148 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00149
00150
00151 typedef struct H5D_io_ops_t {
00152 H5D_layout_read_func_t multi_read;
00153 H5D_layout_write_func_t multi_write;
00154 H5D_io_single_read_func_t single_read;
00155 H5D_io_single_write_func_t single_write;
00156 } H5D_io_ops_t;
00157
00158
00159 typedef struct {
00160 haddr_t dset_addr;
00161 hsize_t dset_size;
00162 } H5D_contig_storage_t;
00163
00164 typedef struct {
00165 hsize_t index;
00166 hsize_t *offset;
00167 } H5D_chunk_storage_t;
00168
00169 typedef struct {
00170 void *buf;
00171 hbool_t *dirty;
00172 } H5D_compact_storage_t;
00173
00174 typedef union H5D_storage_t {
00175 H5D_contig_storage_t contig;
00176 H5D_chunk_storage_t chunk;
00177 H5D_compact_storage_t compact;
00178 H5O_efl_t efl;
00179 } H5D_storage_t;
00180
00181
00182 typedef enum H5D_io_op_type_t {
00183 H5D_IO_OP_READ,
00184 H5D_IO_OP_WRITE
00185 } H5D_io_op_type_t;
00186
00187 typedef struct H5D_io_info_t {
00188 H5D_t *dset;
00189 #ifndef H5_HAVE_PARALLEL
00190 const
00191 #endif
00192 H5D_dxpl_cache_t *dxpl_cache;
00193 hid_t dxpl_id;
00194 #ifdef H5_HAVE_PARALLEL
00195 MPI_Comm comm;
00196 hbool_t using_mpi_vfd;
00197 struct {
00198 H5FD_mpio_xfer_t xfer_mode;
00199 H5FD_mpio_collective_opt_t coll_opt_mode;
00200 H5D_io_ops_t io_ops;
00201 } orig;
00202 #endif
00203 H5D_storage_t *store;
00204 H5D_layout_ops_t layout_ops;
00205 H5D_io_ops_t io_ops;
00206 H5D_io_op_type_t op_type;
00207 union {
00208 void *rbuf;
00209 const void *wbuf;
00210 } u;
00211 } H5D_io_info_t;
00212
00213
00214
00215
00216
00217
00218
00219 typedef struct H5D_chk_idx_info_t {
00220 H5F_t *f;
00221 hid_t dxpl_id;
00222 const H5O_pline_t *pline;
00223 H5O_layout_chunk_t *layout;
00224 H5O_storage_chunk_t *storage;
00225 } H5D_chk_idx_info_t;
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238 typedef struct H5D_chunk_rec_t {
00239 uint32_t nbytes;
00240 hsize_t offset[H5O_LAYOUT_NDIMS];
00241 unsigned filter_mask;
00242 haddr_t chunk_addr;
00243 } H5D_chunk_rec_t;
00244
00245
00246
00247
00248
00249
00250 typedef struct H5D_chunk_common_ud_t {
00251
00252 const H5O_layout_chunk_t *layout;
00253 const H5O_storage_chunk_t *storage;
00254 const hsize_t *offset;
00255 } H5D_chunk_common_ud_t;
00256
00257
00258 typedef struct H5D_chunk_ud_t {
00259 H5D_chunk_common_ud_t common;
00260
00261
00262 uint32_t nbytes;
00263 unsigned filter_mask;
00264 haddr_t addr;
00265 } H5D_chunk_ud_t;
00266
00267
00268 typedef int (*H5D_chunk_cb_func_t)(const H5D_chunk_rec_t *chunk_rec,
00269 void *udata);
00270
00271
00272 typedef herr_t (*H5D_chunk_init_func_t)(const H5D_chk_idx_info_t *idx_info,
00273 const H5S_t *space, haddr_t dset_ohdr_addr);
00274 typedef herr_t (*H5D_chunk_create_func_t)(const H5D_chk_idx_info_t *idx_info);
00275 typedef hbool_t (*H5D_chunk_is_space_alloc_func_t)(const H5O_storage_chunk_t *storage);
00276 typedef herr_t (*H5D_chunk_insert_func_t)(const H5D_chk_idx_info_t *idx_info,
00277 H5D_chunk_ud_t *udata);
00278 typedef herr_t (*H5D_chunk_get_addr_func_t)(const H5D_chk_idx_info_t *idx_info,
00279 H5D_chunk_ud_t *udata);
00280 typedef herr_t (*H5D_chunk_resize_func_t)(H5O_layout_chunk_t *layout);
00281 typedef int (*H5D_chunk_iterate_func_t)(const H5D_chk_idx_info_t *idx_info,
00282 H5D_chunk_cb_func_t chunk_cb, void *chunk_udata);
00283 typedef herr_t (*H5D_chunk_remove_func_t)(const H5D_chk_idx_info_t *idx_info,
00284 H5D_chunk_common_ud_t *udata);
00285 typedef herr_t (*H5D_chunk_delete_func_t)(const H5D_chk_idx_info_t *idx_info);
00286 typedef herr_t (*H5D_chunk_copy_setup_func_t)(const H5D_chk_idx_info_t *idx_info_src,
00287 const H5D_chk_idx_info_t *idx_info_dst);
00288 typedef herr_t (*H5D_chunk_copy_shutdown_func_t)(H5O_storage_chunk_t *storage_src,
00289 H5O_storage_chunk_t *storage_dst, hid_t dxpl_id);
00290 typedef herr_t (*H5D_chunk_size_func_t)(const H5D_chk_idx_info_t *idx_info,
00291 hsize_t *idx_size);
00292 typedef herr_t (*H5D_chunk_reset_func_t)(H5O_storage_chunk_t *storage, hbool_t reset_addr);
00293 typedef herr_t (*H5D_chunk_dump_func_t)(const H5O_storage_chunk_t *storage,
00294 FILE *stream);
00295 typedef herr_t (*H5D_chunk_dest_func_t)(const H5D_chk_idx_info_t *idx_info);
00296
00297
00298 typedef struct H5D_chunk_ops_t {
00299 H5D_chunk_init_func_t init;
00300 H5D_chunk_create_func_t create;
00301 H5D_chunk_is_space_alloc_func_t is_space_alloc;
00302 H5D_chunk_insert_func_t insert;
00303 H5D_chunk_get_addr_func_t get_addr;
00304 H5D_chunk_resize_func_t resize;
00305 H5D_chunk_iterate_func_t iterate;
00306 H5D_chunk_remove_func_t remove;
00307 H5D_chunk_delete_func_t idx_delete;
00308 H5D_chunk_copy_setup_func_t copy_setup;
00309 H5D_chunk_copy_shutdown_func_t copy_shutdown;
00310 H5D_chunk_size_func_t size;
00311 H5D_chunk_reset_func_t reset;
00312 H5D_chunk_dump_func_t dump;
00313 H5D_chunk_dest_func_t dest;
00314 } H5D_chunk_ops_t;
00315
00316
00317 typedef struct H5D_chunk_info_t {
00318 hsize_t index;
00319 uint32_t chunk_points;
00320 hsize_t coords[H5O_LAYOUT_NDIMS];
00321 H5S_t *fspace;
00322 unsigned fspace_shared;
00323 H5S_t *mspace;
00324 unsigned mspace_shared;
00325 } H5D_chunk_info_t;
00326
00327
00328 typedef struct H5D_chunk_map_t {
00329 H5O_layout_t *layout;
00330 hsize_t nelmts;
00331
00332 const H5S_t *file_space;
00333 unsigned f_ndims;
00334 hsize_t f_dims[H5O_LAYOUT_NDIMS];
00335
00336 const H5S_t *mem_space;
00337 H5S_t *mchunk_tmpl;
00338 H5S_sel_iter_t mem_iter;
00339 unsigned m_ndims;
00340 H5S_sel_type msel_type;
00341
00342 H5SL_t *sel_chunks;
00343
00344 H5S_t *single_space;
00345 H5D_chunk_info_t *single_chunk_info;
00346 hbool_t use_single;
00347
00348 hsize_t last_index;
00349 H5D_chunk_info_t *last_chunk_info;
00350
00351 hsize_t chunk_dim[H5O_LAYOUT_NDIMS];
00352
00353 #ifdef H5_HAVE_PARALLEL
00354 H5D_chunk_info_t **select_chunk;
00355 #endif
00356 } H5D_chunk_map_t;
00357
00358
00359 typedef struct H5D_chunk_cached_t{
00360 hbool_t valid;
00361 hsize_t offset[H5O_LAYOUT_NDIMS];
00362 uint32_t nbytes;
00363 unsigned filter_mask;
00364 haddr_t addr;
00365 } H5D_chunk_cached_t;
00366
00367
00368 typedef struct H5D_rdcc_t {
00369 struct {
00370 unsigned ninits;
00371 unsigned nhits;
00372 unsigned nmisses;
00373 unsigned nflushes;
00374 } stats;
00375 size_t nbytes_max;
00376 size_t nslots;
00377 double w0;
00378 struct H5D_rdcc_ent_t *head;
00379 struct H5D_rdcc_ent_t *tail;
00380 size_t nbytes_used;
00381 int nused;
00382 H5D_chunk_cached_t last;
00383 struct H5D_rdcc_ent_t **slot;
00384 H5SL_t *sel_chunks;
00385 H5S_t *single_space;
00386 H5D_chunk_info_t *single_chunk_info;
00387 } H5D_rdcc_t;
00388
00389
00390 typedef struct H5D_rdcdc_t {
00391 unsigned char *sieve_buf;
00392 haddr_t sieve_loc;
00393 size_t sieve_size;
00394 size_t sieve_buf_size;
00395 unsigned sieve_dirty;
00396 } H5D_rdcdc_t;
00397
00398
00399
00400
00401
00402
00403
00404 typedef struct H5D_shared_t {
00405 size_t fo_count;
00406 hid_t type_id;
00407 H5T_t *type;
00408 H5S_t *space;
00409 hbool_t space_dirty;
00410 hbool_t layout_dirty;
00411 hid_t dcpl_id;
00412 H5D_dcpl_cache_t dcpl_cache;
00413 H5O_layout_t layout;
00414 hbool_t checked_filters;
00415
00416
00417 struct {
00418 H5D_rdcdc_t contig;
00419
00420
00421
00422
00423 H5D_rdcc_t chunk;
00424 } cache;
00425 } H5D_shared_t;
00426
00427 struct H5D_t {
00428 H5O_loc_t oloc;
00429 H5G_name_t path;
00430 H5D_shared_t *shared;
00431 };
00432
00433
00434 typedef enum {
00435 H5D_ALLOC_CREATE,
00436 H5D_ALLOC_OPEN,
00437 H5D_ALLOC_EXTEND,
00438 H5D_ALLOC_WRITE
00439 } H5D_time_alloc_t;
00440
00441
00442
00443 typedef struct {
00444 hid_t type_id;
00445 const H5S_t *space;
00446 hid_t dcpl_id;
00447 hid_t dapl_id;
00448 } H5D_obj_create_t;
00449
00450
00451 typedef struct H5D_fill_buf_info_t {
00452 hbool_t alloc_vl_during_refill;
00453 H5MM_allocate_t fill_alloc_func;
00454 void *fill_alloc_info;
00455 H5MM_free_t fill_free_func;
00456 void *fill_free_info;
00457 H5T_path_t *fill_to_mem_tpath;
00458 H5T_path_t *mem_to_dset_tpath;
00459 const H5O_fill_t *fill;
00460 void *fill_buf;
00461 size_t fill_buf_size;
00462 hbool_t use_caller_fill_buf;
00463 void *bkg_buf;
00464 size_t bkg_buf_size;
00465 H5T_t *mem_type;
00466 const H5T_t *file_type;
00467 hid_t mem_tid;
00468 hid_t file_tid;
00469 size_t mem_elmt_size, file_elmt_size;
00470 size_t max_elmt_size;
00471 size_t elmts_per_buf;
00472 hbool_t has_vlen_fill_type;
00473 } H5D_fill_buf_info_t;
00474
00475
00476 typedef struct {
00477 hid_t dataset_id;
00478 hid_t fspace_id;
00479 hid_t mspace_id;
00480 void *fl_tbuf;
00481 void *vl_tbuf;
00482 hid_t xfer_pid;
00483 hsize_t size;
00484 } H5D_vlen_bufsize_t;
00485
00486
00487 typedef struct H5D_rdcc_ent_t {
00488 hbool_t locked;
00489 hbool_t dirty;
00490 hsize_t offset[H5O_LAYOUT_NDIMS];
00491 uint32_t rd_count;
00492 uint32_t wr_count;
00493 haddr_t chunk_addr;
00494 uint8_t *chunk;
00495 unsigned idx;
00496 struct H5D_rdcc_ent_t *next;
00497 struct H5D_rdcc_ent_t *prev;
00498 } H5D_rdcc_ent_t;
00499 typedef H5D_rdcc_ent_t *H5D_rdcc_ent_ptr_t;
00500
00501
00502
00503
00504
00505 extern H5D_dxpl_cache_t H5D_def_dxpl_cache;
00506
00507
00508 H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_CONTIG[1];
00509 H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_EFL[1];
00510 H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_COMPACT[1];
00511 H5_DLLVAR const H5D_layout_ops_t H5D_LOPS_CHUNK[1];
00512
00513
00514 H5_DLLVAR const H5D_chunk_ops_t H5D_COPS_BTREE[1];
00515
00516
00517
00518
00519
00520
00521 H5_DLL H5D_t *H5D_create(H5F_t *file, hid_t type_id, const H5S_t *space,
00522 hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id);
00523 H5_DLL H5D_t *H5D_create_named(const H5G_loc_t *loc, const char *name,
00524 hid_t type_id, const H5S_t *space, hid_t lcpl_id, hid_t dcpl_id,
00525 hid_t dapl_id, hid_t dxpl_id);
00526 H5_DLL herr_t H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation,
00527 hid_t dxpl_id);
00528 H5_DLL herr_t H5D_alloc_storage(H5D_t *dset, hid_t dxpl_id, H5D_time_alloc_t time_alloc,
00529 hbool_t full_overwrite, hsize_t old_dim[]);
00530 H5_DLL hsize_t H5D_get_storage_size(H5D_t *dset, hid_t dxpl_id);
00531 H5_DLL haddr_t H5D_get_offset(const H5D_t *dset);
00532 H5_DLL herr_t H5D_iterate(void *buf, hid_t type_id, const H5S_t *space,
00533 H5D_operator_t op, void *operator_data);
00534 H5_DLL void * H5D_vlen_get_buf_size_alloc(size_t size, void *info);
00535 H5_DLL herr_t H5D_vlen_get_buf_size(void *elem, hid_t type_id, unsigned ndim,
00536 const hsize_t *point, void *op_data);
00537 H5_DLL herr_t H5D_check_filters(H5D_t *dataset);
00538 H5_DLL herr_t H5D_set_extent(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id);
00539 H5_DLL herr_t H5D_get_dxpl_cache(hid_t dxpl_id, H5D_dxpl_cache_t **cache);
00540 H5_DLL herr_t H5D_flush_sieve_buf(H5D_t *dataset, hid_t dxpl_id);
00541
00542
00543 H5_DLL herr_t H5D_select_read(const H5D_io_info_t *io_info,
00544 const H5D_type_info_t *type_info,
00545 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00546 H5_DLL herr_t H5D_select_write(const H5D_io_info_t *io_info,
00547 const H5D_type_info_t *type_info,
00548 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00549
00550
00551 H5_DLL herr_t H5D_scatter_mem(const void *_tscat_buf,
00552 const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts,
00553 const H5D_dxpl_cache_t *dxpl_cache, void *_buf);
00554 H5_DLL herr_t H5D_scatgath_read(const H5D_io_info_t *io_info,
00555 const H5D_type_info_t *type_info,
00556 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00557 H5_DLL herr_t H5D_scatgath_write(const H5D_io_info_t *io_info,
00558 const H5D_type_info_t *type_info,
00559 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00560
00561
00562 H5_DLL herr_t H5D_layout_set_io_ops(const H5D_t *dataset);
00563 H5_DLL size_t H5D_layout_meta_size(const H5F_t *f, const H5O_layout_t *layout,
00564 hbool_t include_compact_data);
00565 H5_DLL herr_t H5D_layout_oh_create(H5F_t *file, hid_t dxpl_id, H5O_t *oh,
00566 H5D_t *dset, hid_t dapl_id);
00567 H5_DLL herr_t H5D_layout_oh_read(H5D_t *dset, hid_t dxpl_id, hid_t dapl_id,
00568 H5P_genplist_t *plist);
00569 H5_DLL herr_t H5D_layout_oh_write(H5D_t *dataset, hid_t dxpl_id, H5O_t *oh,
00570 unsigned update_flags);
00571
00572
00573 H5_DLL herr_t H5D_contig_alloc(H5F_t *f, hid_t dxpl_id,
00574 H5O_storage_contig_t *storage);
00575 H5_DLL hbool_t H5D_contig_is_space_alloc(const H5O_storage_t *storage);
00576 H5_DLL herr_t H5D_contig_fill(H5D_t *dset, hid_t dxpl_id);
00577 H5_DLL haddr_t H5D_contig_get_addr(const H5D_t *dset);
00578 H5_DLL herr_t H5D_contig_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
00579 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
00580 H5D_chunk_map_t *fm);
00581 H5_DLL herr_t H5D_contig_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
00582 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space,
00583 H5D_chunk_map_t *fm);
00584 H5_DLL ssize_t H5D_contig_readvv(const H5D_io_info_t *io_info,
00585 size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
00586 size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
00587 H5_DLL ssize_t H5D_contig_writevv(const H5D_io_info_t *io_info,
00588 size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
00589 size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[]);
00590 H5_DLL herr_t H5D_contig_copy(H5F_t *f_src, const H5O_storage_contig_t *storage_src,
00591 H5F_t *f_dst, H5O_storage_contig_t *storage_dst, H5T_t *src_dtype,
00592 H5O_copy_t *cpy_info, hid_t dxpl_id);
00593
00594
00595 H5_DLL htri_t H5D_chunk_cacheable(const H5D_io_info_t *io_info, haddr_t caddr,
00596 hbool_t write_op);
00597 H5_DLL herr_t H5D_chunk_cinfo_cache_reset(H5D_chunk_cached_t *last);
00598 H5_DLL herr_t H5D_chunk_create(H5D_t *dset , hid_t dxpl_id);
00599 H5_DLL herr_t H5D_chunk_set_info(const H5D_t *dset);
00600 H5_DLL herr_t H5D_chunk_init(H5F_t *f, hid_t dxpl_id, const H5D_t *dset,
00601 hid_t dapl_id);
00602 H5_DLL hbool_t H5D_chunk_is_space_alloc(const H5O_storage_t *storage);
00603 H5_DLL herr_t H5D_chunk_get_info(const H5D_t *dset, hid_t dxpl_id,
00604 const hsize_t *chunk_offset, H5D_chunk_ud_t *udata);
00605 H5_DLL void *H5D_chunk_lock(const H5D_io_info_t *io_info,
00606 H5D_chunk_ud_t *udata, hbool_t relax, unsigned *idx_hint);
00607 H5_DLL herr_t H5D_chunk_unlock(const H5D_io_info_t *io_info,
00608 const H5D_chunk_ud_t *udata, hbool_t dirty, unsigned idx_hint, void *chunk,
00609 uint32_t naccessed);
00610 H5_DLL herr_t H5D_chunk_allocated(H5D_t *dset, hid_t dxpl_id, hsize_t *nbytes);
00611 H5_DLL herr_t H5D_chunk_allocate(H5D_t *dset, hid_t dxpl_id,
00612 hbool_t full_overwrite, hsize_t old_dim[]);
00613 H5_DLL herr_t H5D_chunk_prune_by_extent(H5D_t *dset, hid_t dxpl_id,
00614 const hsize_t *old_dims);
00615 #ifdef H5_HAVE_PARALLEL
00616 H5_DLL herr_t H5D_chunk_addrmap(const H5D_io_info_t *io_info, haddr_t chunk_addr[]);
00617 #endif
00618 H5_DLL herr_t H5D_chunk_update_cache(H5D_t *dset, hid_t dxpl_id);
00619 H5_DLL herr_t H5D_chunk_copy(H5F_t *f_src, H5O_storage_chunk_t *storage_src,
00620 H5O_layout_chunk_t *layout_src, H5F_t *f_dst, H5O_storage_chunk_t *storage_dst,
00621 const H5S_extent_t *ds_extent_src, const H5T_t *dt_src,
00622 const H5O_pline_t *pline_src, H5O_copy_t *cpy_info, hid_t dxpl_id);
00623 H5_DLL herr_t H5D_chunk_bh_info(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout,
00624 const H5O_pline_t *pline, hsize_t *btree_size);
00625 H5_DLL herr_t H5D_chunk_dump_index(H5D_t *dset, hid_t dxpl_id, FILE *stream);
00626 H5_DLL herr_t H5D_chunk_dest(H5F_t *f, hid_t dxpl_id, H5D_t *dset);
00627 #ifdef H5D_CHUNK_DEBUG
00628 H5_DLL herr_t H5D_chunk_stats(const H5D_t *dset, hbool_t headers);
00629 #endif
00630
00631
00632 H5_DLL herr_t H5D_compact_fill(H5D_t *dset, hid_t dxpl_id);
00633 H5_DLL herr_t H5D_compact_copy(H5F_t *f_src, H5O_storage_compact_t *storage_src,
00634 H5F_t *f_dst, H5O_storage_compact_t *storage_dst, H5T_t *src_dtype,
00635 H5O_copy_t *cpy_info, hid_t dxpl_id);
00636
00637
00638 H5_DLL hbool_t H5D_efl_is_space_alloc(const H5O_storage_t *storage);
00639 H5_DLL herr_t H5D_efl_bh_info(H5F_t *f, hid_t dxpl_id, H5O_efl_t *efl,
00640 hsize_t *heap_size);
00641
00642
00643 H5_DLL herr_t H5D_fill(const void *fill, const H5T_t *fill_type, void *buf,
00644 const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id);
00645 H5_DLL herr_t H5D_fill_init(H5D_fill_buf_info_t *fb_info, void *caller_fill_buf,
00646 hbool_t alloc_vl_during_refill,
00647 H5MM_allocate_t alloc_func, void *alloc_info,
00648 H5MM_free_t free_func, void *free_info,
00649 const H5O_fill_t *fill, const H5T_t *dset_type, hid_t dset_type_id,
00650 size_t nelmts, size_t min_buf_size, hid_t dxpl_id);
00651 H5_DLL herr_t H5D_fill_refill_vl(H5D_fill_buf_info_t *fb_info, size_t nelmts,
00652 hid_t dxpl_id);
00653 H5_DLL herr_t H5D_fill_release(H5D_fill_buf_info_t *fb_info);
00654 H5_DLL herr_t H5D_fill_term(H5D_fill_buf_info_t *fb_info);
00655
00656 #ifdef H5_HAVE_PARALLEL
00657
00658 #ifdef H5S_DEBUG
00659 #ifndef H5Dmpio_DEBUG
00660 #define H5Dmpio_DEBUG
00661 #endif
00662 #endif
00663
00664 H5_DLL herr_t H5D_mpio_select_read(const H5D_io_info_t *io_info,
00665 const H5D_type_info_t *type_info,
00666 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00667
00668
00669 H5_DLL herr_t H5D_mpio_select_write(const H5D_io_info_t *io_info,
00670 const H5D_type_info_t *type_info,
00671 hsize_t nelmts, const H5S_t *file_space, const H5S_t *mem_space);
00672
00673
00674 H5_DLL herr_t H5D_contig_collective_read(H5D_io_info_t *io_info,
00675 const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
00676 const H5S_t *mem_space, H5D_chunk_map_t *fm);
00677 H5_DLL herr_t H5D_contig_collective_write(H5D_io_info_t *io_info,
00678 const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
00679 const H5S_t *mem_space, H5D_chunk_map_t *fm);
00680
00681
00682 H5_DLL herr_t H5D_chunk_collective_read(H5D_io_info_t *io_info,
00683 const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
00684 const H5S_t *mem_space, H5D_chunk_map_t *fm);
00685 H5_DLL herr_t H5D_chunk_collective_write(H5D_io_info_t *io_info,
00686 const H5D_type_info_t *type_info, hsize_t nelmts, const H5S_t *file_space,
00687 const H5S_t *mem_space, H5D_chunk_map_t *fm);
00688
00689
00690
00691 H5_DLL htri_t H5D_mpio_opt_possible(const H5D_io_info_t *io_info,
00692 const H5S_t *file_space, const H5S_t *mem_space,
00693 const H5D_type_info_t *type_info, const H5D_chunk_map_t *fm);
00694
00695 #endif
00696
00697
00698 #ifdef H5D_TESTING
00699 H5_DLL herr_t H5D_layout_version_test(hid_t did, unsigned *version);
00700 H5_DLL herr_t H5D_layout_contig_size_test(hid_t did, hsize_t *size);
00701 H5_DLL herr_t H5D_current_cache_size_test(hid_t did, size_t *nbytes_used, int *nused);
00702 #endif
00703
00704 #endif
00705