hdf5_sys/
h5d.rs

1//! Creating and manipulating scientific datasets
2pub use self::H5D_alloc_time_t::*;
3pub use self::H5D_fill_time_t::*;
4pub use self::H5D_fill_value_t::*;
5pub use self::H5D_layout_t::*;
6pub use self::H5D_mpio_actual_chunk_opt_mode_t::*;
7pub use self::H5D_mpio_actual_io_mode_t::*;
8pub use self::H5D_mpio_no_collective_cause_t::*;
9pub use self::H5D_space_status_t::*;
10pub use {H5Dcreate2 as H5D_create, H5Dopen2 as H5Dopen};
11
12use crate::internal_prelude::*;
13
14pub const H5D_CHUNK_CACHE_NSLOTS_DEFAULT: size_t = !0;
15pub const H5D_CHUNK_CACHE_NBYTES_DEFAULT: size_t = !0;
16
17pub const H5D_CHUNK_CACHE_W0_DEFAULT: c_float = -1.0;
18
19#[cfg(not(feature = "1.10.0"))]
20#[repr(C)]
21#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
22pub enum H5D_layout_t {
23    H5D_LAYOUT_ERROR = -1,
24    H5D_COMPACT = 0,
25    H5D_CONTIGUOUS = 1,
26    H5D_CHUNKED = 2,
27    H5D_NLAYOUTS = 3,
28}
29
30impl Default for H5D_layout_t {
31    fn default() -> Self {
32        H5D_layout_t::H5D_CONTIGUOUS
33    }
34}
35
36pub type H5D_chunk_index_t = c_uint;
37
38pub const H5D_CHUNK_BTREE: H5D_chunk_index_t = 0;
39pub const H5D_CHUNK_IDX_BTREE: H5D_chunk_index_t = H5D_CHUNK_BTREE;
40
41#[repr(C)]
42#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
43pub enum H5D_alloc_time_t {
44    H5D_ALLOC_TIME_ERROR = -1,
45    H5D_ALLOC_TIME_DEFAULT = 0,
46    H5D_ALLOC_TIME_EARLY = 1,
47    H5D_ALLOC_TIME_LATE = 2,
48    H5D_ALLOC_TIME_INCR = 3,
49}
50
51impl Default for H5D_alloc_time_t {
52    fn default() -> Self {
53        H5D_alloc_time_t::H5D_ALLOC_TIME_DEFAULT
54    }
55}
56
57#[repr(C)]
58#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
59pub enum H5D_space_status_t {
60    H5D_SPACE_STATUS_ERROR = -1,
61    H5D_SPACE_STATUS_NOT_ALLOCATED = 0,
62    H5D_SPACE_STATUS_PART_ALLOCATED = 1,
63    H5D_SPACE_STATUS_ALLOCATED = 2,
64}
65
66#[repr(C)]
67#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
68pub enum H5D_fill_time_t {
69    H5D_FILL_TIME_ERROR = -1,
70    H5D_FILL_TIME_ALLOC = 0,
71    H5D_FILL_TIME_NEVER = 1,
72    H5D_FILL_TIME_IFSET = 2,
73}
74
75impl Default for H5D_fill_time_t {
76    fn default() -> Self {
77        H5D_fill_time_t::H5D_FILL_TIME_IFSET
78    }
79}
80
81#[repr(C)]
82#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
83pub enum H5D_fill_value_t {
84    H5D_FILL_VALUE_ERROR = -1,
85    H5D_FILL_VALUE_UNDEFINED = 0,
86    H5D_FILL_VALUE_DEFAULT = 1,
87    H5D_FILL_VALUE_USER_DEFINED = 2,
88}
89
90impl Default for H5D_fill_value_t {
91    fn default() -> Self {
92        H5D_fill_value_t::H5D_FILL_VALUE_DEFAULT
93    }
94}
95
96#[repr(C)]
97#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
98pub enum H5D_mpio_actual_chunk_opt_mode_t {
99    H5D_MPIO_NO_CHUNK_OPTIMIZATION = 0,
100    H5D_MPIO_LINK_CHUNK = 1,
101    H5D_MPIO_MULTI_CHUNK = 2,
102}
103
104#[repr(C)]
105#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
106pub enum H5D_mpio_actual_io_mode_t {
107    H5D_MPIO_NO_COLLECTIVE = 0,
108    H5D_MPIO_CHUNK_INDEPENDENT = 1,
109    H5D_MPIO_CHUNK_COLLECTIVE = 2,
110    H5D_MPIO_CHUNK_MIXED = 3,
111    H5D_MPIO_CONTIGUOUS_COLLECTIVE = 4,
112}
113
114#[repr(C)]
115#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
116pub enum H5D_mpio_no_collective_cause_t {
117    H5D_MPIO_COLLECTIVE = 0,
118    H5D_MPIO_SET_INDEPENDENT = 1,
119    H5D_MPIO_DATATYPE_CONVERSION = 2,
120    H5D_MPIO_DATA_TRANSFORMS = 4,
121    H5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED = 8,
122    H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES = 16,
123    H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET = 32,
124    H5D_MPIO_FILTERS = 64,
125}
126
127pub type H5D_operator_t = Option<
128    extern "C" fn(
129        elem: *mut c_void,
130        type_id: hid_t,
131        ndim: c_uint,
132        point: *const hsize_t,
133        operator_data: *mut c_void,
134    ) -> herr_t,
135>;
136
137#[cfg(feature = "1.8.11")]
138pub type H5D_scatter_func_t = Option<
139    extern "C" fn(
140        src_buf: *mut *const c_void,
141        src_buf_bytes_used: *mut size_t,
142        op_data: *mut c_void,
143    ) -> herr_t,
144>;
145#[cfg(feature = "1.8.11")]
146pub type H5D_gather_func_t = Option<
147    extern "C" fn(
148        dst_buf: *const c_void,
149        dst_buf_bytes_used: size_t,
150        op_data: *mut c_void,
151    ) -> herr_t,
152>;
153
154extern "C" {
155    pub fn H5Dcreate2(
156        loc_id: hid_t, name: *const c_char, type_id: hid_t, space_id: hid_t, lcpl_id: hid_t,
157        dcpl_id: hid_t, dapl_id: hid_t,
158    ) -> hid_t;
159    pub fn H5Dcreate_anon(
160        file_id: hid_t, type_id: hid_t, space_id: hid_t, plist_id: hid_t, dapl_id: hid_t,
161    ) -> hid_t;
162    pub fn H5Dopen2(file_id: hid_t, name: *const c_char, dapl_id: hid_t) -> hid_t;
163    pub fn H5Dclose(dset_id: hid_t) -> herr_t;
164    pub fn H5Dget_space(dset_id: hid_t) -> hid_t;
165    pub fn H5Dget_space_status(dset_id: hid_t, allocation: *mut H5D_space_status_t) -> herr_t;
166    pub fn H5Dget_type(dset_id: hid_t) -> hid_t;
167    pub fn H5Dget_create_plist(dset_id: hid_t) -> hid_t;
168    pub fn H5Dget_access_plist(dset_id: hid_t) -> hid_t;
169    pub fn H5Dget_storage_size(dset_id: hid_t) -> hsize_t;
170    pub fn H5Dget_offset(dset_id: hid_t) -> haddr_t;
171    pub fn H5Dread(
172        dset_id: hid_t, mem_type_id: hid_t, mem_space_id: hid_t, file_space_id: hid_t,
173        plist_id: hid_t, buf: *mut c_void,
174    ) -> herr_t;
175    pub fn H5Dwrite(
176        dset_id: hid_t, mem_type_id: hid_t, mem_space_id: hid_t, file_space_id: hid_t,
177        plist_id: hid_t, buf: *const c_void,
178    ) -> herr_t;
179    pub fn H5Diterate(
180        buf: *mut c_void, type_id: hid_t, space_id: hid_t, op: H5D_operator_t,
181        operator_data: *mut c_void,
182    ) -> herr_t;
183    #[cfg_attr(feature = "1.12.0", deprecated(note = "deprecated in HDF5 1.12.0, use H5Treclaim"))]
184    pub fn H5Dvlen_reclaim(
185        type_id: hid_t, space_id: hid_t, plist_id: hid_t, buf: *mut c_void,
186    ) -> herr_t;
187    pub fn H5Dvlen_get_buf_size(
188        dataset_id: hid_t, type_id: hid_t, space_id: hid_t, size: *mut hsize_t,
189    ) -> herr_t;
190    pub fn H5Dfill(
191        fill: *const c_void, fill_type: hid_t, buf: *mut c_void, buf_type: hid_t, space: hid_t,
192    ) -> herr_t;
193    pub fn H5Dset_extent(dset_id: hid_t, size: *const hsize_t) -> herr_t;
194    pub fn H5Ddebug(dset_id: hid_t) -> herr_t;
195
196    #[deprecated(note = "deprecated in HDF5 1.8.0, use H5Dcreate2")]
197    pub fn H5Dcreate1(
198        file_id: hid_t, name: *const c_char, type_id: hid_t, space_id: hid_t, dcpl_id: hid_t,
199    ) -> hid_t;
200    #[deprecated(note = "deprecated in HDF5 1.8.0, use H5Dopen2")]
201    pub fn H5Dopen1(file_id: hid_t, name: *const c_char) -> hid_t;
202}
203
204#[cfg(feature = "1.8.11")]
205extern "C" {
206    pub fn H5Dscatter(
207        op: H5D_scatter_func_t, op_data: *mut c_void, type_id: hid_t, dst_space_id: hid_t,
208        dst_buf: *mut c_void,
209    ) -> herr_t;
210    pub fn H5Dgather(
211        src_space_id: hid_t, src_buf: *const c_void, type_id: hid_t, dst_buf_size: size_t,
212        dst_buf: *mut c_void, op: H5D_gather_func_t, op_data: *mut c_void,
213    ) -> herr_t;
214}
215
216#[cfg(feature = "1.10.0")]
217mod hdf5_1_10_0 {
218    use super::*;
219
220    #[repr(C)]
221    #[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
222    pub enum H5D_layout_t {
223        H5D_LAYOUT_ERROR = -1,
224        H5D_COMPACT = 0,
225        H5D_CONTIGUOUS = 1,
226        H5D_CHUNKED = 2,
227        H5D_VIRTUAL = 3,
228        H5D_NLAYOUTS = 4,
229    }
230
231    #[repr(C)]
232    #[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
233    pub enum H5D_vds_view_t {
234        H5D_VDS_ERROR = -1,
235        H5D_VDS_FIRST_MISSING = 0,
236        H5D_VDS_LAST_AVAILABLE = 1,
237    }
238
239    impl Default for H5D_vds_view_t {
240        fn default() -> Self {
241            H5D_vds_view_t::H5D_VDS_LAST_AVAILABLE
242        }
243    }
244
245    pub const H5D_CHUNK_DONT_FILTER_PARTIAL_CHUNKS: c_uint = 0x0002;
246
247    pub type H5D_append_cb_t = Option<
248        unsafe extern "C" fn(
249            dataset_id: hid_t,
250            cur_dims: *mut hsize_t,
251            op_data: *mut c_void,
252        ) -> herr_t,
253    >;
254
255    extern "C" {
256        pub fn H5Dflush(dset_id: hid_t) -> herr_t;
257        pub fn H5Drefresh(dset_id: hid_t) -> herr_t;
258        pub fn H5Dformat_convert(dset_id: hid_t) -> herr_t;
259        pub fn H5Dget_chunk_index_type(did: hid_t, idx_type: *mut H5D_chunk_index_t) -> herr_t;
260    }
261}
262
263#[cfg(feature = "1.10.0")]
264pub use self::hdf5_1_10_0::*;
265
266#[cfg(feature = "1.10.3")]
267extern "C" {
268    pub fn H5Dread_chunk(
269        dset_id: hid_t, dxpl_id: hid_t, offset: *const hsize_t, filters: *mut u32, buf: *mut c_void,
270    ) -> herr_t;
271    pub fn H5Dwrite_chunk(
272        dset_id: hid_t, dxpl_id: hid_t, filters: u32, offset: *const hsize_t, data_size: size_t,
273        buf: *const c_void,
274    ) -> herr_t;
275}
276
277#[cfg(feature = "1.10.5")]
278extern "C" {
279    pub fn H5Dget_chunk_info(
280        dset_id: hid_t, fspace_id: hid_t, index: hsize_t, offset: *mut hsize_t,
281        filter_mask: *mut c_uint, addr: *mut haddr_t, size: *mut hsize_t,
282    ) -> herr_t;
283    pub fn H5Dget_chunk_info_by_coord(
284        dset_id: hid_t, offset: *const hsize_t, filter_mask: *mut c_uint, addr: *mut haddr_t,
285        size: *mut hsize_t,
286    ) -> herr_t;
287    pub fn H5Dget_num_chunks(dset_id: hid_t, fspace_id: hid_t, nchunks: *mut hsize_t) -> herr_t;
288}