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