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