hdf5_sys/
h5p.rs

1//! Creating and manipulating property lists to control HDF5 library behaviour
2use crate::internal_prelude::*;
3
4use crate::h5ac::H5AC_cache_config_t;
5use crate::h5d::{H5D_alloc_time_t, H5D_fill_time_t, H5D_fill_value_t, H5D_layout_t};
6use crate::h5f::{H5F_close_degree_t, H5F_libver_t};
7use crate::h5fd::H5FD_mem_t;
8use crate::h5l::H5L_elink_traverse_t;
9use crate::h5mm::{H5MM_allocate_t, H5MM_free_t};
10use crate::h5t::{H5T_conv_except_func_t, H5T_cset_t};
11use crate::h5z::{H5Z_EDC_t, H5Z_SO_scale_type_t, H5Z_filter_func_t, H5Z_filter_t};
12
13#[cfg(feature = "1.8.9")]
14use crate::h5fd::H5FD_file_image_callbacks_t;
15#[cfg(feature = "1.8.9")]
16use crate::h5o::H5O_mcdt_search_cb_t;
17#[cfg(feature = "1.10.1")]
18use crate::{h5ac::H5AC_cache_image_config_t, h5f::H5F_fspace_strategy_t};
19
20pub const H5P_CRT_ORDER_TRACKED: c_uint = 0x0001;
21pub const H5P_CRT_ORDER_INDEXED: c_uint = 0x0002;
22
23pub const H5P_DEFAULT: hid_t = 0;
24
25pub type H5P_cls_create_func_t =
26    Option<extern "C" fn(prop_id: hid_t, create_data: *mut c_void) -> herr_t>;
27pub type H5P_cls_copy_func_t =
28    Option<extern "C" fn(new_prop_id: hid_t, old_prop_id: hid_t, copy_data: *mut c_void) -> herr_t>;
29pub type H5P_cls_close_func_t =
30    Option<extern "C" fn(prop_id: hid_t, close_data: *mut c_void) -> herr_t>;
31pub type H5P_prp_cb1_t =
32    Option<extern "C" fn(name: *const c_char, size: size_t, value: *mut c_void) -> herr_t>;
33pub type H5P_prp_cb2_t = Option<
34    extern "C" fn(prop_id: hid_t, name: *const c_char, size: size_t, value: *mut c_void) -> herr_t,
35>;
36pub type H5P_prp_create_func_t = H5P_prp_cb1_t;
37pub type H5P_prp_set_func_t = H5P_prp_cb2_t;
38pub type H5P_prp_get_func_t = H5P_prp_cb2_t;
39pub type H5P_prp_delete_func_t = H5P_prp_cb2_t;
40pub type H5P_prp_copy_func_t = H5P_prp_cb1_t;
41pub type H5P_prp_compare_func_t =
42    Option<extern "C" fn(value1: *const c_void, value2: *const c_void, size: size_t) -> c_int>;
43pub type H5P_prp_close_func_t = H5P_prp_cb1_t;
44pub type H5P_iterate_t =
45    Option<extern "C" fn(id: hid_t, name: *const c_char, iter_data: *mut c_void) -> herr_t>;
46
47pub use self::globals::*;
48
49#[cfg(all(not(feature = "1.8.14"), not(all(target_env = "msvc", not(feature = "static")))))]
50mod globals {
51    pub use crate::h5i::hid_t as id_t;
52
53    // Property list classes
54    extern_static!(H5P_CLS_ROOT, H5P_CLS_ROOT_g);
55    extern_static!(H5P_CLS_OBJECT_CREATE, H5P_CLS_OBJECT_CREATE_g);
56    extern_static!(H5P_CLS_FILE_CREATE, H5P_CLS_FILE_CREATE_g);
57    extern_static!(H5P_CLS_FILE_ACCESS, H5P_CLS_FILE_ACCESS_g);
58    extern_static!(H5P_CLS_DATASET_CREATE, H5P_CLS_DATASET_CREATE_g);
59    extern_static!(H5P_CLS_DATASET_ACCESS, H5P_CLS_DATASET_ACCESS_g);
60    extern_static!(H5P_CLS_DATASET_XFER, H5P_CLS_DATASET_XFER_g);
61    extern_static!(H5P_CLS_FILE_MOUNT, H5P_CLS_FILE_MOUNT_g);
62    extern_static!(H5P_CLS_GROUP_CREATE, H5P_CLS_GROUP_CREATE_g);
63    extern_static!(H5P_CLS_GROUP_ACCESS, H5P_CLS_GROUP_ACCESS_g);
64    extern_static!(H5P_CLS_DATATYPE_CREATE, H5P_CLS_DATATYPE_CREATE_g);
65    extern_static!(H5P_CLS_DATATYPE_ACCESS, H5P_CLS_DATATYPE_ACCESS_g);
66    extern_static!(H5P_CLS_STRING_CREATE, H5P_CLS_STRING_CREATE_g);
67    extern_static!(H5P_CLS_ATTRIBUTE_CREATE, H5P_CLS_ATTRIBUTE_CREATE_g);
68    extern_static!(H5P_CLS_OBJECT_COPY, H5P_CLS_OBJECT_COPY_g);
69    extern_static!(H5P_CLS_LINK_CREATE, H5P_CLS_LINK_CREATE_g);
70    extern_static!(H5P_CLS_LINK_ACCESS, H5P_CLS_LINK_ACCESS_g);
71
72    // Default property lists
73    extern_static!(H5P_LST_FILE_CREATE, H5P_LST_FILE_CREATE_g);
74    extern_static!(H5P_LST_FILE_ACCESS, H5P_LST_FILE_ACCESS_g);
75    extern_static!(H5P_LST_DATASET_CREATE, H5P_LST_DATASET_CREATE_g);
76    extern_static!(H5P_LST_DATASET_ACCESS, H5P_LST_DATASET_ACCESS_g);
77    extern_static!(H5P_LST_DATASET_XFER, H5P_LST_DATASET_XFER_g);
78    extern_static!(H5P_LST_FILE_MOUNT, H5P_LST_FILE_MOUNT_g);
79    extern_static!(H5P_LST_GROUP_CREATE, H5P_LST_GROUP_CREATE_g);
80    extern_static!(H5P_LST_GROUP_ACCESS, H5P_LST_GROUP_ACCESS_g);
81    extern_static!(H5P_LST_DATATYPE_CREATE, H5P_LST_DATATYPE_CREATE_g);
82    extern_static!(H5P_LST_DATATYPE_ACCESS, H5P_LST_DATATYPE_ACCESS_g);
83    extern_static!(H5P_LST_ATTRIBUTE_CREATE, H5P_LST_ATTRIBUTE_CREATE_g);
84    extern_static!(H5P_LST_OBJECT_COPY, H5P_LST_OBJECT_COPY_g);
85    extern_static!(H5P_LST_LINK_CREATE, H5P_LST_LINK_CREATE_g);
86    extern_static!(H5P_LST_LINK_ACCESS, H5P_LST_LINK_ACCESS_g);
87}
88
89#[cfg(all(feature = "1.8.14", not(all(target_env = "msvc", not(feature = "static")))))]
90mod globals {
91    pub use crate::h5i::hid_t as id_t;
92
93    // Property list classes
94    extern_static!(H5P_CLS_ROOT, H5P_CLS_ROOT_ID_g);
95    extern_static!(H5P_CLS_OBJECT_CREATE, H5P_CLS_OBJECT_CREATE_ID_g);
96    extern_static!(H5P_CLS_FILE_CREATE, H5P_CLS_FILE_CREATE_ID_g);
97    extern_static!(H5P_CLS_FILE_ACCESS, H5P_CLS_FILE_ACCESS_ID_g);
98    extern_static!(H5P_CLS_DATASET_CREATE, H5P_CLS_DATASET_CREATE_ID_g);
99    extern_static!(H5P_CLS_DATASET_ACCESS, H5P_CLS_DATASET_ACCESS_ID_g);
100    extern_static!(H5P_CLS_DATASET_XFER, H5P_CLS_DATASET_XFER_ID_g);
101    extern_static!(H5P_CLS_FILE_MOUNT, H5P_CLS_FILE_MOUNT_ID_g);
102    extern_static!(H5P_CLS_GROUP_CREATE, H5P_CLS_GROUP_CREATE_ID_g);
103    extern_static!(H5P_CLS_GROUP_ACCESS, H5P_CLS_GROUP_ACCESS_ID_g);
104    extern_static!(H5P_CLS_DATATYPE_CREATE, H5P_CLS_DATATYPE_CREATE_ID_g);
105    extern_static!(H5P_CLS_DATATYPE_ACCESS, H5P_CLS_DATATYPE_ACCESS_ID_g);
106    extern_static!(H5P_CLS_STRING_CREATE, H5P_CLS_STRING_CREATE_ID_g);
107    extern_static!(H5P_CLS_ATTRIBUTE_CREATE, H5P_CLS_ATTRIBUTE_CREATE_ID_g);
108    extern_static!(H5P_CLS_OBJECT_COPY, H5P_CLS_OBJECT_COPY_ID_g);
109    extern_static!(H5P_CLS_LINK_CREATE, H5P_CLS_LINK_CREATE_ID_g);
110    extern_static!(H5P_CLS_LINK_ACCESS, H5P_CLS_LINK_ACCESS_ID_g);
111
112    // Default property lists
113    extern_static!(H5P_LST_FILE_CREATE, H5P_LST_FILE_CREATE_ID_g);
114    extern_static!(H5P_LST_FILE_ACCESS, H5P_LST_FILE_ACCESS_ID_g);
115    extern_static!(H5P_LST_DATASET_CREATE, H5P_LST_DATASET_CREATE_ID_g);
116    extern_static!(H5P_LST_DATASET_ACCESS, H5P_LST_DATASET_ACCESS_ID_g);
117    extern_static!(H5P_LST_DATASET_XFER, H5P_LST_DATASET_XFER_ID_g);
118    extern_static!(H5P_LST_FILE_MOUNT, H5P_LST_FILE_MOUNT_ID_g);
119    extern_static!(H5P_LST_GROUP_CREATE, H5P_LST_GROUP_CREATE_ID_g);
120    extern_static!(H5P_LST_GROUP_ACCESS, H5P_LST_GROUP_ACCESS_ID_g);
121    extern_static!(H5P_LST_DATATYPE_CREATE, H5P_LST_DATATYPE_CREATE_ID_g);
122    extern_static!(H5P_LST_DATATYPE_ACCESS, H5P_LST_DATATYPE_ACCESS_ID_g);
123    extern_static!(H5P_LST_ATTRIBUTE_CREATE, H5P_LST_ATTRIBUTE_CREATE_ID_g);
124    extern_static!(H5P_LST_OBJECT_COPY, H5P_LST_OBJECT_COPY_ID_g);
125    extern_static!(H5P_LST_LINK_CREATE, H5P_LST_LINK_CREATE_ID_g);
126    extern_static!(H5P_LST_LINK_ACCESS, H5P_LST_LINK_ACCESS_ID_g);
127
128    #[cfg(feature = "1.12.0")]
129    #[allow(clippy::module_inception)]
130    pub mod globals {
131        use super::*;
132        extern_static!(H5P_MAP_CREATE, H5P_CLS_MAP_CREATE_ID_g);
133        extern_static!(H5P_MAP_ACCESS, H5P_CLS_MAP_ACCESS_ID_g);
134        extern_static!(H5P_VOL_INITIALIZE, H5P_CLS_VOL_INITIALIZE_ID_g);
135        extern_static!(H5P_REFERENCE_ACCESS, H5P_CLS_REFERENCE_ACCESS_ID_g);
136        extern_static!(H5P_MAP_CREATE_DEFAULT, H5P_LST_MAP_CREATE_ID_g);
137        extern_static!(H5P_MAP_ACCESS_DEFAULT, H5P_LST_MAP_ACCESS_ID_g);
138        extern_static!(H5P_VOL_INITIALIZE_DEFAULT, H5P_LST_VOL_INITIALIZE_ID_g);
139        extern_static!(H5P_REFERENCE_ACCESS_DEFAULT, H5P_LST_REFERENCE_ACCESS_ID_g);
140    }
141    #[cfg(feature = "1.12.0")]
142    pub use globals::*;
143}
144
145#[cfg(all(not(feature = "1.8.14"), all(target_env = "msvc", not(feature = "static"))))]
146mod globals {
147    // dllimport hack
148    pub type id_t = usize;
149
150    // Property list classes
151    extern_static!(H5P_CLS_ROOT, __imp_H5P_CLS_ROOT_g);
152    extern_static!(H5P_CLS_OBJECT_CREATE, __imp_H5P_CLS_OBJECT_CREATE_g);
153    extern_static!(H5P_CLS_FILE_CREATE, __imp_H5P_CLS_FILE_CREATE_g);
154    extern_static!(H5P_CLS_FILE_ACCESS, __imp_H5P_CLS_FILE_ACCESS_g);
155    extern_static!(H5P_CLS_DATASET_CREATE, __imp_H5P_CLS_DATASET_CREATE_g);
156    extern_static!(H5P_CLS_DATASET_ACCESS, __imp_H5P_CLS_DATASET_ACCESS_g);
157    extern_static!(H5P_CLS_DATASET_XFER, __imp_H5P_CLS_DATASET_XFER_g);
158    extern_static!(H5P_CLS_FILE_MOUNT, __imp_H5P_CLS_FILE_MOUNT_g);
159    extern_static!(H5P_CLS_GROUP_CREATE, __imp_H5P_CLS_GROUP_CREATE_g);
160    extern_static!(H5P_CLS_GROUP_ACCESS, __imp_H5P_CLS_GROUP_ACCESS_g);
161    extern_static!(H5P_CLS_DATATYPE_CREATE, __imp_H5P_CLS_DATATYPE_CREATE_g);
162    extern_static!(H5P_CLS_DATATYPE_ACCESS, __imp_H5P_CLS_DATATYPE_ACCESS_g);
163    extern_static!(H5P_CLS_STRING_CREATE, __imp_H5P_CLS_STRING_CREATE_g);
164    extern_static!(H5P_CLS_ATTRIBUTE_CREATE, __imp_H5P_CLS_ATTRIBUTE_CREATE_g);
165    extern_static!(H5P_CLS_OBJECT_COPY, __imp_H5P_CLS_OBJECT_COPY_g);
166    extern_static!(H5P_CLS_LINK_CREATE, __imp_H5P_CLS_LINK_CREATE_g);
167    extern_static!(H5P_CLS_LINK_ACCESS, __imp_H5P_CLS_LINK_ACCESS_g);
168
169    // Default property lists
170    extern_static!(H5P_LST_FILE_CREATE, __imp_H5P_LST_FILE_CREATE_g);
171    extern_static!(H5P_LST_FILE_ACCESS, __imp_H5P_LST_FILE_ACCESS_g);
172    extern_static!(H5P_LST_DATASET_CREATE, __imp_H5P_LST_DATASET_CREATE_g);
173    extern_static!(H5P_LST_DATASET_ACCESS, __imp_H5P_LST_DATASET_ACCESS_g);
174    extern_static!(H5P_LST_DATASET_XFER, __imp_H5P_LST_DATASET_XFER_g);
175    extern_static!(H5P_LST_FILE_MOUNT, __imp_H5P_LST_FILE_MOUNT_g);
176    extern_static!(H5P_LST_GROUP_CREATE, __imp_H5P_LST_GROUP_CREATE_g);
177    extern_static!(H5P_LST_GROUP_ACCESS, __imp_H5P_LST_GROUP_ACCESS_g);
178    extern_static!(H5P_LST_DATATYPE_CREATE, __imp_H5P_LST_DATATYPE_CREATE_g);
179    extern_static!(H5P_LST_DATATYPE_ACCESS, __imp_H5P_LST_DATATYPE_ACCESS_g);
180    extern_static!(H5P_LST_ATTRIBUTE_CREATE, __imp_H5P_LST_ATTRIBUTE_CREATE_g);
181    extern_static!(H5P_LST_OBJECT_COPY, __imp_H5P_LST_OBJECT_COPY_g);
182    extern_static!(H5P_LST_LINK_CREATE, __imp_H5P_LST_LINK_CREATE_g);
183    extern_static!(H5P_LST_LINK_ACCESS, __imp_H5P_LST_LINK_ACCESS_g);
184}
185
186#[cfg(all(feature = "1.8.14", all(target_env = "msvc", not(feature = "static"))))]
187mod globals {
188    // dllimport hack
189    pub type id_t = usize;
190
191    // Property list classes
192    extern_static!(H5P_CLS_ROOT, __imp_H5P_CLS_ROOT_ID_g);
193    extern_static!(H5P_CLS_OBJECT_CREATE, __imp_H5P_CLS_OBJECT_CREATE_ID_g);
194    extern_static!(H5P_CLS_FILE_CREATE, __imp_H5P_CLS_FILE_CREATE_ID_g);
195    extern_static!(H5P_CLS_FILE_ACCESS, __imp_H5P_CLS_FILE_ACCESS_ID_g);
196    extern_static!(H5P_CLS_DATASET_CREATE, __imp_H5P_CLS_DATASET_CREATE_ID_g);
197    extern_static!(H5P_CLS_DATASET_ACCESS, __imp_H5P_CLS_DATASET_ACCESS_ID_g);
198    extern_static!(H5P_CLS_DATASET_XFER, __imp_H5P_CLS_DATASET_XFER_ID_g);
199    extern_static!(H5P_CLS_FILE_MOUNT, __imp_H5P_CLS_FILE_MOUNT_ID_g);
200    extern_static!(H5P_CLS_GROUP_CREATE, __imp_H5P_CLS_GROUP_CREATE_ID_g);
201    extern_static!(H5P_CLS_GROUP_ACCESS, __imp_H5P_CLS_GROUP_ACCESS_ID_g);
202    extern_static!(H5P_CLS_DATATYPE_CREATE, __imp_H5P_CLS_DATATYPE_CREATE_ID_g);
203    extern_static!(H5P_CLS_DATATYPE_ACCESS, __imp_H5P_CLS_DATATYPE_ACCESS_ID_g);
204    extern_static!(H5P_CLS_STRING_CREATE, __imp_H5P_CLS_STRING_CREATE_ID_g);
205    extern_static!(H5P_CLS_ATTRIBUTE_CREATE, __imp_H5P_CLS_ATTRIBUTE_CREATE_ID_g);
206    extern_static!(H5P_CLS_OBJECT_COPY, __imp_H5P_CLS_OBJECT_COPY_ID_g);
207    extern_static!(H5P_CLS_LINK_CREATE, __imp_H5P_CLS_LINK_CREATE_ID_g);
208    extern_static!(H5P_CLS_LINK_ACCESS, __imp_H5P_CLS_LINK_ACCESS_ID_g);
209
210    // Default property lists
211    extern_static!(H5P_LST_FILE_CREATE, __imp_H5P_LST_FILE_CREATE_ID_g);
212    extern_static!(H5P_LST_FILE_ACCESS, __imp_H5P_LST_FILE_ACCESS_ID_g);
213    extern_static!(H5P_LST_DATASET_CREATE, __imp_H5P_LST_DATASET_CREATE_ID_g);
214    extern_static!(H5P_LST_DATASET_ACCESS, __imp_H5P_LST_DATASET_ACCESS_ID_g);
215    extern_static!(H5P_LST_DATASET_XFER, __imp_H5P_LST_DATASET_XFER_ID_g);
216    extern_static!(H5P_LST_FILE_MOUNT, __imp_H5P_LST_FILE_MOUNT_ID_g);
217    extern_static!(H5P_LST_GROUP_CREATE, __imp_H5P_LST_GROUP_CREATE_ID_g);
218    extern_static!(H5P_LST_GROUP_ACCESS, __imp_H5P_LST_GROUP_ACCESS_ID_g);
219    extern_static!(H5P_LST_DATATYPE_CREATE, __imp_H5P_LST_DATATYPE_CREATE_ID_g);
220    extern_static!(H5P_LST_DATATYPE_ACCESS, __imp_H5P_LST_DATATYPE_ACCESS_ID_g);
221    extern_static!(H5P_LST_ATTRIBUTE_CREATE, __imp_H5P_LST_ATTRIBUTE_CREATE_ID_g);
222    extern_static!(H5P_LST_OBJECT_COPY, __imp_H5P_LST_OBJECT_COPY_ID_g);
223    extern_static!(H5P_LST_LINK_CREATE, __imp_H5P_LST_LINK_CREATE_ID_g);
224    extern_static!(H5P_LST_LINK_ACCESS, __imp_H5P_LST_LINK_ACCESS_ID_g);
225
226    #[cfg(feature = "1.12.0")]
227    #[allow(clippy::module_inception)]
228    pub mod globals {
229        use super::*;
230        extern_static!(H5P_MAP_CREATE, __imp_H5P_CLS_MAP_CREATE_ID_g);
231        extern_static!(H5P_MAP_ACCESS, __imp_H5P_CLS_MAP_ACCESS_ID_g);
232        extern_static!(H5P_VOL_INITIALIZE, __imp_H5P_CLS_VOL_INITIALIZE_ID_g);
233        extern_static!(H5P_REFERENCE_ACCESS, __imp_H5P_CLS_REFERENCE_ACCESS_ID_g);
234        extern_static!(H5P_MAP_CREATE_DEFAULT, __imp_H5P_LST_MAP_CREATE_ID_g);
235        extern_static!(H5P_MAP_ACCESS_DEFAULT, __imp_H5P_LST_MAP_ACCESS_ID_g);
236        extern_static!(H5P_VOL_INITIALIZE_DEFAULT, __imp_H5P_LST_VOL_INITIALIZE_ID_g);
237        extern_static!(H5P_REFERENCE_ACCESS_DEFAULT, __imp_H5P_LST_REFERENCE_ACCESS_ID_g);
238    }
239    #[cfg(feature = "1.12.0")]
240    pub use globals::*;
241}
242
243extern "C" {
244    pub fn H5Pcreate_class(
245        parent: hid_t, name: *const c_char, cls_create: H5P_cls_create_func_t,
246        create_data: *mut c_void, cls_copy: H5P_cls_copy_func_t, copy_data: *mut c_void,
247        cls_close: H5P_cls_close_func_t, close_data: *mut c_void,
248    ) -> hid_t;
249    pub fn H5Pget_class_name(pclass_id: hid_t) -> *mut c_char;
250    pub fn H5Pcreate(cls_id: hid_t) -> hid_t;
251    pub fn H5Pregister2(
252        cls_id: hid_t, name: *const c_char, size: size_t, def_value: *mut c_void,
253        prp_create: H5P_prp_create_func_t, prp_set: H5P_prp_set_func_t,
254        prp_get: H5P_prp_get_func_t, prp_del: H5P_prp_delete_func_t, prp_copy: H5P_prp_copy_func_t,
255        prp_cmp: H5P_prp_compare_func_t, prp_close: H5P_prp_close_func_t,
256    ) -> herr_t;
257    pub fn H5Pinsert2(
258        plist_id: hid_t, name: *const c_char, size: size_t, value: *mut c_void,
259        prp_set: H5P_prp_set_func_t, prp_get: H5P_prp_get_func_t,
260        prp_delete: H5P_prp_delete_func_t, prp_copy: H5P_prp_copy_func_t,
261        prp_cmp: H5P_prp_compare_func_t, prp_close: H5P_prp_close_func_t,
262    ) -> herr_t;
263    pub fn H5Pset(plist_id: hid_t, name: *const c_char, value: *mut c_void) -> herr_t;
264    pub fn H5Pexist(plist_id: hid_t, name: *const c_char) -> htri_t;
265    pub fn H5Pget_size(id: hid_t, name: *const c_char, size: *mut size_t) -> herr_t;
266    pub fn H5Pget_nprops(id: hid_t, nprops: *mut size_t) -> herr_t;
267    pub fn H5Pget_class(plist_id: hid_t) -> hid_t;
268    pub fn H5Pget_class_parent(pclass_id: hid_t) -> hid_t;
269    pub fn H5Pget(plist_id: hid_t, name: *const c_char, value: *mut c_void) -> herr_t;
270    pub fn H5Pequal(id1: hid_t, id2: hid_t) -> htri_t;
271    pub fn H5Pisa_class(plist_id: hid_t, pclass_id: hid_t) -> htri_t;
272    pub fn H5Piterate(
273        id: hid_t, idx: *mut c_int, iter_func: H5P_iterate_t, iter_data: *mut c_void,
274    ) -> c_int;
275    pub fn H5Pcopy_prop(dst_id: hid_t, src_id: hid_t, name: *const c_char) -> herr_t;
276    pub fn H5Premove(plist_id: hid_t, name: *const c_char) -> herr_t;
277    pub fn H5Punregister(pclass_id: hid_t, name: *const c_char) -> herr_t;
278    pub fn H5Pclose_class(plist_id: hid_t) -> herr_t;
279    pub fn H5Pclose(plist_id: hid_t) -> herr_t;
280    pub fn H5Pcopy(plist_id: hid_t) -> hid_t;
281    pub fn H5Pset_attr_phase_change(
282        plist_id: hid_t, max_compact: c_uint, min_dense: c_uint,
283    ) -> herr_t;
284    pub fn H5Pget_attr_phase_change(
285        plist_id: hid_t, max_compact: *mut c_uint, min_dense: *mut c_uint,
286    ) -> herr_t;
287    pub fn H5Pset_attr_creation_order(plist_id: hid_t, crt_order_flags: c_uint) -> herr_t;
288    pub fn H5Pget_attr_creation_order(plist_id: hid_t, crt_order_flags: *mut c_uint) -> herr_t;
289    pub fn H5Pset_obj_track_times(plist_id: hid_t, track_times: hbool_t) -> herr_t;
290    pub fn H5Pget_obj_track_times(plist_id: hid_t, track_times: *mut hbool_t) -> herr_t;
291    pub fn H5Pmodify_filter(
292        plist_id: hid_t, filter: H5Z_filter_t, flags: c_uint, cd_nelmts: size_t,
293        cd_values: *const c_uint,
294    ) -> herr_t;
295    pub fn H5Pset_filter(
296        plist_id: hid_t, filter: H5Z_filter_t, flags: c_uint, cd_nelmts: size_t,
297        c_values: *const c_uint,
298    ) -> herr_t;
299    pub fn H5Pget_nfilters(plist_id: hid_t) -> c_int;
300    pub fn H5Pget_filter2(
301        plist_id: hid_t, filter: c_uint, flags: *mut c_uint, cd_nelmts: *mut size_t,
302        cd_values: *mut c_uint, namelen: size_t, name: *mut c_char, filter_config: *mut c_uint,
303    ) -> H5Z_filter_t;
304    pub fn H5Pget_filter_by_id2(
305        plist_id: hid_t, id: H5Z_filter_t, flags: *mut c_uint, cd_nelmts: *mut size_t,
306        cd_values: *mut c_uint, namelen: size_t, name: *mut c_char, filter_config: *mut c_uint,
307    ) -> herr_t;
308    pub fn H5Pall_filters_avail(plist_id: hid_t) -> htri_t;
309    pub fn H5Premove_filter(plist_id: hid_t, filter: H5Z_filter_t) -> herr_t;
310    pub fn H5Pset_deflate(plist_id: hid_t, aggression: c_uint) -> herr_t;
311    pub fn H5Pset_fletcher32(plist_id: hid_t) -> herr_t;
312    pub fn H5Pset_userblock(plist_id: hid_t, size: hsize_t) -> herr_t;
313    pub fn H5Pget_userblock(plist_id: hid_t, size: *mut hsize_t) -> herr_t;
314    pub fn H5Pset_sizes(plist_id: hid_t, sizeof_addr: size_t, sizeof_size: size_t) -> herr_t;
315    pub fn H5Pget_sizes(
316        plist_id: hid_t, sizeof_addr: *mut size_t, sizeof_size: *mut size_t,
317    ) -> herr_t;
318    pub fn H5Pset_sym_k(plist_id: hid_t, ik: c_uint, lk: c_uint) -> herr_t;
319    pub fn H5Pget_sym_k(plist_id: hid_t, ik: *mut c_uint, lk: *mut c_uint) -> herr_t;
320    pub fn H5Pset_istore_k(plist_id: hid_t, ik: c_uint) -> herr_t;
321    pub fn H5Pget_istore_k(plist_id: hid_t, ik: *mut c_uint) -> herr_t;
322    pub fn H5Pset_shared_mesg_nindexes(plist_id: hid_t, nindexes: c_uint) -> herr_t;
323    pub fn H5Pget_shared_mesg_nindexes(plist_id: hid_t, nindexes: *mut c_uint) -> herr_t;
324    pub fn H5Pset_shared_mesg_index(
325        plist_id: hid_t, index_num: c_uint, mesg_type_flags: c_uint, min_mesg_size: c_uint,
326    ) -> herr_t;
327    pub fn H5Pget_shared_mesg_index(
328        plist_id: hid_t, index_num: c_uint, mesg_type_flags: *mut c_uint,
329        min_mesg_size: *mut c_uint,
330    ) -> herr_t;
331    pub fn H5Pset_shared_mesg_phase_change(
332        plist_id: hid_t, max_list: c_uint, min_btree: c_uint,
333    ) -> herr_t;
334    pub fn H5Pget_shared_mesg_phase_change(
335        plist_id: hid_t, max_list: *mut c_uint, min_btree: *mut c_uint,
336    ) -> herr_t;
337    pub fn H5Pset_alignment(fapl_id: hid_t, threshold: hsize_t, alignment: hsize_t) -> herr_t;
338    pub fn H5Pget_alignment(
339        fapl_id: hid_t, threshold: *mut hsize_t, alignment: *mut hsize_t,
340    ) -> herr_t;
341    pub fn H5Pset_driver(plist_id: hid_t, driver_id: hid_t, driver_info: *const c_void) -> herr_t;
342    pub fn H5Pget_driver(plist_id: hid_t) -> hid_t;
343    pub fn H5Pget_driver_info(plist_id: hid_t) -> *mut c_void;
344    pub fn H5Pset_cache(
345        plist_id: hid_t, mdc_nelmts: c_int, rdcc_nslots: size_t, rdcc_nbytes: size_t,
346        rdcc_w0: c_double,
347    ) -> herr_t;
348    pub fn H5Pget_cache(
349        plist_id: hid_t, mdc_nelmts: *mut c_int, rdcc_nslots: *mut size_t,
350        rdcc_nbytes: *mut size_t, rdcc_w0: *mut c_double,
351    ) -> herr_t;
352    pub fn H5Pset_mdc_config(plist_id: hid_t, config_ptr: *const H5AC_cache_config_t) -> herr_t;
353    pub fn H5Pget_mdc_config(plist_id: hid_t, config_ptr: *mut H5AC_cache_config_t) -> herr_t;
354    pub fn H5Pset_gc_references(fapl_id: hid_t, gc_ref: c_uint) -> herr_t;
355    pub fn H5Pget_gc_references(fapl_id: hid_t, gc_ref: *mut c_uint) -> herr_t;
356    pub fn H5Pset_fclose_degree(fapl_id: hid_t, degree: H5F_close_degree_t) -> herr_t;
357    pub fn H5Pget_fclose_degree(fapl_id: hid_t, degree: *mut H5F_close_degree_t) -> herr_t;
358    pub fn H5Pset_meta_block_size(fapl_id: hid_t, size: hsize_t) -> herr_t;
359    pub fn H5Pget_meta_block_size(fapl_id: hid_t, size: *mut hsize_t) -> herr_t;
360    pub fn H5Pset_sieve_buf_size(fapl_id: hid_t, size: size_t) -> herr_t;
361    pub fn H5Pget_sieve_buf_size(fapl_id: hid_t, size: *mut size_t) -> herr_t;
362    pub fn H5Pset_small_data_block_size(fapl_id: hid_t, size: hsize_t) -> herr_t;
363    pub fn H5Pget_small_data_block_size(fapl_id: hid_t, size: *mut hsize_t) -> herr_t;
364    pub fn H5Pset_libver_bounds(plist_id: hid_t, low: H5F_libver_t, high: H5F_libver_t) -> herr_t;
365    pub fn H5Pget_libver_bounds(
366        plist_id: hid_t, low: *mut H5F_libver_t, high: *mut H5F_libver_t,
367    ) -> herr_t;
368    pub fn H5Pset_layout(plist_id: hid_t, layout: H5D_layout_t) -> herr_t;
369    pub fn H5Pget_layout(plist_id: hid_t) -> H5D_layout_t;
370    pub fn H5Pset_chunk(plist_id: hid_t, ndims: c_int, dim: *const hsize_t) -> herr_t;
371    pub fn H5Pget_chunk(plist_id: hid_t, max_ndims: c_int, dim: *mut hsize_t) -> c_int;
372    pub fn H5Pset_external(
373        plist_id: hid_t, name: *const c_char, offset: off_t, size: hsize_t,
374    ) -> herr_t;
375    pub fn H5Pget_external_count(plist_id: hid_t) -> c_int;
376    pub fn H5Pget_external(
377        plist_id: hid_t, idx: c_uint, name_size: size_t, name: *mut c_char, offset: *mut off_t,
378        size: *mut hsize_t,
379    ) -> herr_t;
380    pub fn H5Pset_szip(plist_id: hid_t, options_mask: c_uint, pixels_per_block: c_uint) -> herr_t;
381    pub fn H5Pset_shuffle(plist_id: hid_t) -> herr_t;
382    pub fn H5Pset_nbit(plist_id: hid_t) -> herr_t;
383    pub fn H5Pset_scaleoffset(
384        plist_id: hid_t, scale_type: H5Z_SO_scale_type_t, scale_factor: c_int,
385    ) -> herr_t;
386    pub fn H5Pset_fill_value(plist_id: hid_t, type_id: hid_t, value: *const c_void) -> herr_t;
387    pub fn H5Pget_fill_value(plist_id: hid_t, type_id: hid_t, value: *mut c_void) -> herr_t;
388    pub fn H5Pfill_value_defined(plist: hid_t, status: *mut H5D_fill_value_t) -> herr_t;
389    pub fn H5Pset_alloc_time(plist_id: hid_t, alloc_time: H5D_alloc_time_t) -> herr_t;
390    pub fn H5Pget_alloc_time(plist_id: hid_t, alloc_time: *mut H5D_alloc_time_t) -> herr_t;
391    pub fn H5Pset_fill_time(plist_id: hid_t, fill_time: H5D_fill_time_t) -> herr_t;
392    pub fn H5Pget_fill_time(plist_id: hid_t, fill_time: *mut H5D_fill_time_t) -> herr_t;
393    pub fn H5Pset_chunk_cache(
394        dapl_id: hid_t, rdcc_nslots: size_t, rdcc_nbytes: size_t, rdcc_w0: c_double,
395    ) -> herr_t;
396    pub fn H5Pget_chunk_cache(
397        dapl_id: hid_t, rdcc_nslots: *mut size_t, rdcc_nbytes: *mut size_t, rdcc_w0: *mut c_double,
398    ) -> herr_t;
399    pub fn H5Pset_data_transform(plist_id: hid_t, expression: *const c_char) -> herr_t;
400    pub fn H5Pget_data_transform(plist_id: hid_t, expression: *mut c_char, size: size_t)
401        -> ssize_t;
402    pub fn H5Pset_buffer(
403        plist_id: hid_t, size: size_t, tconv: *mut c_void, bkg: *mut c_void,
404    ) -> herr_t;
405    pub fn H5Pget_buffer(plist_id: hid_t, tconv: *mut *mut c_void, bkg: *mut *mut c_void)
406        -> size_t;
407    pub fn H5Pset_edc_check(plist_id: hid_t, check: H5Z_EDC_t) -> herr_t;
408    pub fn H5Pget_edc_check(plist_id: hid_t) -> H5Z_EDC_t;
409    pub fn H5Pset_filter_callback(
410        plist_id: hid_t, func: H5Z_filter_func_t, op_data: *mut c_void,
411    ) -> herr_t;
412    pub fn H5Pset_btree_ratios(
413        plist_id: hid_t, left: c_double, middle: c_double, right: c_double,
414    ) -> herr_t;
415    pub fn H5Pget_btree_ratios(
416        plist_id: hid_t, left: *mut c_double, middle: *mut c_double, right: *mut c_double,
417    ) -> herr_t;
418    pub fn H5Pset_vlen_mem_manager(
419        plist_id: hid_t, alloc_func: H5MM_allocate_t, alloc_info: *mut c_void,
420        free_func: H5MM_free_t, free_info: *mut c_void,
421    ) -> herr_t;
422    pub fn H5Pget_vlen_mem_manager(
423        plist_id: hid_t, alloc_func: *mut H5MM_allocate_t, alloc_info: *mut *mut c_void,
424        free_func: *mut H5MM_free_t, free_info: *mut *mut c_void,
425    ) -> herr_t;
426    pub fn H5Pset_hyper_vector_size(fapl_id: hid_t, size: size_t) -> herr_t;
427    pub fn H5Pget_hyper_vector_size(fapl_id: hid_t, size: *mut size_t) -> herr_t;
428    pub fn H5Pset_type_conv_cb(
429        dxpl_id: hid_t, op: H5T_conv_except_func_t, operate_data: *mut c_void,
430    ) -> herr_t;
431    pub fn H5Pget_type_conv_cb(
432        dxpl_id: hid_t, op: *mut H5T_conv_except_func_t, operate_data: *mut *mut c_void,
433    ) -> herr_t;
434    pub fn H5Pset_create_intermediate_group(plist_id: hid_t, crt_intmd: c_uint) -> herr_t;
435    pub fn H5Pget_create_intermediate_group(plist_id: hid_t, crt_intmd: *mut c_uint) -> herr_t;
436    pub fn H5Pset_local_heap_size_hint(plist_id: hid_t, size_hint: size_t) -> herr_t;
437    pub fn H5Pget_local_heap_size_hint(plist_id: hid_t, size_hint: *mut size_t) -> herr_t;
438    pub fn H5Pset_link_phase_change(
439        plist_id: hid_t, max_compact: c_uint, min_dense: c_uint,
440    ) -> herr_t;
441    pub fn H5Pget_link_phase_change(
442        plist_id: hid_t, max_compact: *mut c_uint, min_dense: *mut c_uint,
443    ) -> herr_t;
444    pub fn H5Pset_est_link_info(
445        plist_id: hid_t, est_num_entries: c_uint, est_name_len: c_uint,
446    ) -> herr_t;
447    pub fn H5Pget_est_link_info(
448        plist_id: hid_t, est_num_entries: *mut c_uint, est_name_len: *mut c_uint,
449    ) -> herr_t;
450    pub fn H5Pset_link_creation_order(plist_id: hid_t, crt_order_flags: c_uint) -> herr_t;
451    pub fn H5Pget_link_creation_order(plist_id: hid_t, crt_order_flags: *mut c_uint) -> herr_t;
452    pub fn H5Pset_char_encoding(plist_id: hid_t, encoding: H5T_cset_t) -> herr_t;
453    pub fn H5Pget_char_encoding(plist_id: hid_t, encoding: *mut H5T_cset_t) -> herr_t;
454    pub fn H5Pset_nlinks(plist_id: hid_t, nlinks: size_t) -> herr_t;
455    pub fn H5Pget_nlinks(plist_id: hid_t, nlinks: *mut size_t) -> herr_t;
456    pub fn H5Pset_elink_prefix(plist_id: hid_t, prefix: *const c_char) -> herr_t;
457    pub fn H5Pget_elink_prefix(plist_id: hid_t, prefix: *mut c_char, size: size_t) -> ssize_t;
458    pub fn H5Pget_elink_fapl(lapl_id: hid_t) -> hid_t;
459    pub fn H5Pset_elink_fapl(lapl_id: hid_t, fapl_id: hid_t) -> herr_t;
460    pub fn H5Pset_elink_acc_flags(lapl_id: hid_t, flags: c_uint) -> herr_t;
461    pub fn H5Pget_elink_acc_flags(lapl_id: hid_t, flags: *mut c_uint) -> herr_t;
462    pub fn H5Pset_elink_cb(
463        lapl_id: hid_t, func: H5L_elink_traverse_t, op_data: *mut c_void,
464    ) -> herr_t;
465    pub fn H5Pget_elink_cb(
466        lapl_id: hid_t, func: *mut H5L_elink_traverse_t, op_data: *mut *mut c_void,
467    ) -> herr_t;
468    pub fn H5Pset_copy_object(plist_id: hid_t, crt_intmd: c_uint) -> herr_t;
469    pub fn H5Pget_copy_object(plist_id: hid_t, crt_intmd: *mut c_uint) -> herr_t;
470    #[cfg_attr(
471        feature = "1.10.0",
472        deprecated(note = "deprecated in HDF5 1.10.0, use H5Fget_info2()")
473    )]
474    pub fn H5Pget_version(
475        plist_id: hid_t, boot: *mut c_uint, freelist: *mut c_uint, stab: *mut c_uint,
476        shhdr: *mut c_uint,
477    ) -> herr_t;
478}
479
480// drivers
481extern "C" {
482    // sec2
483    pub fn H5Pset_fapl_sec2(fapl_id: hid_t) -> herr_t;
484
485    // core
486    pub fn H5Pset_fapl_core(fapl_id: hid_t, increment: size_t, backing_store: hbool_t) -> herr_t;
487    pub fn H5Pget_fapl_core(
488        fapl_id: hid_t, increment: *mut size_t, backing_store: *mut hbool_t,
489    ) -> herr_t;
490
491    // stdio
492    pub fn H5Pset_fapl_stdio(fapl_id: hid_t) -> herr_t;
493
494    // family
495    pub fn H5Pset_fapl_family(fapl_id: hid_t, memb_size: hsize_t, memb_fapl_id: hid_t) -> herr_t;
496    pub fn H5Pget_fapl_family(
497        fapl_id: hid_t, memb_size: *mut hsize_t, memb_fapl_id: *mut hid_t,
498    ) -> herr_t;
499    pub fn H5Pset_family_offset(fapl_id: hid_t, offset: hsize_t) -> herr_t;
500    pub fn H5Pget_family_offset(fapl_id: hid_t, offset: *mut hsize_t) -> herr_t;
501
502    // multi/split
503    pub fn H5Pset_fapl_multi(
504        fapl_id: hid_t, memb_map: *const H5FD_mem_t, memb_fapl: *const hid_t,
505        memb_name: *const *const c_char, memb_addr: *const haddr_t, relax: hbool_t,
506    ) -> herr_t;
507    pub fn H5Pget_fapl_multi(
508        fapl_id: hid_t, memb_map: *mut H5FD_mem_t, memb_fapl: *mut hid_t,
509        memb_name: *mut *const c_char, memb_addr: *mut haddr_t, relax: *mut hbool_t,
510    ) -> herr_t;
511    pub fn H5Pset_multi_type(fapl_id: hid_t, type_: H5FD_mem_t) -> herr_t;
512    pub fn H5Pget_multi_type(fapl_id: hid_t, type_: *mut H5FD_mem_t) -> herr_t;
513    pub fn H5Pset_fapl_split(
514        fapl_id: hid_t, meta_ext: *const c_char, meta_plist_id: hid_t, raw_ext: *const c_char,
515        raw_plist_id: hid_t,
516    ) -> herr_t;
517
518    // log
519    pub fn H5Pset_fapl_log(
520        fapl_id: hid_t, logfile: *const c_char, flags: c_ulonglong, buf_size: size_t,
521    ) -> herr_t;
522
523    // mpi-io
524    #[cfg(feature = "mpio")]
525    pub fn H5Pset_fapl_mpio(
526        fapl_id: hid_t, comm: mpi_sys::MPI_Comm, info: mpi_sys::MPI_Info,
527    ) -> herr_t;
528    #[cfg(feature = "mpio")]
529    pub fn H5Pget_fapl_mpio(
530        fapl_id: hid_t, comm: *mut mpi_sys::MPI_Comm, info: *mut mpi_sys::MPI_Info,
531    ) -> herr_t;
532
533    // direct
534    #[cfg(feature = "have-direct")]
535    pub fn H5Pset_fapl_direct(
536        fapl_id: hid_t, alignment: size_t, block_size: size_t, cbuf_size: size_t,
537    ) -> herr_t;
538    #[cfg(feature = "have-parallel")]
539    pub fn H5Pget_fapl_direct(
540        fapl_id: hid_t, alignment: *mut size_t, block_size: *mut size_t, cbuf_size: *mut size_t,
541    ) -> herr_t;
542}
543
544#[cfg(feature = "have-parallel")]
545mod mpio {
546    use crate::internal_prelude::*;
547
548    pub const H5D_ONE_LINK_CHUNK_IO_THRESHOLD: c_uint = 0;
549    pub const H5D_MULTI_CHUNK_IO_COL_THRESHOLD: c_uint = 60;
550
551    #[repr(C)]
552    #[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
553    pub enum H5FD_mpio_xfer_t {
554        H5FD_MPIO_INDEPENDENT = 0,
555        H5FD_MPIO_COLLECTIVE = 1,
556    }
557
558    #[repr(C)]
559    #[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
560    pub enum H5FD_mpio_chunk_opt_t {
561        H5FD_MPIO_CHUNK_DEFAULT = 0,
562        H5FD_MPIO_CHUNK_ONE_IO = 1,
563        H5FD_MPIO_CHUNK_MULTI_IO = 2,
564    }
565
566    #[repr(C)]
567    #[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
568    pub enum H5FD_mpio_collective_opt_t {
569        H5FD_MPIO_COLLECTIVE_IO = 0,
570        H5FD_MPIO_INDIVIDUAL_IO = 1,
571    }
572
573    extern "C" {
574        pub fn H5Pset_dxpl_mpio(dxpl_id: hid_t, xfer_mode: H5FD_mpio_xfer_t) -> herr_t;
575        pub fn H5Pget_dxpl_mpio(dxpl_id: hid_t, xfer_mode: *mut H5FD_mpio_xfer_t) -> herr_t;
576        pub fn H5Pset_dxpl_mpio_collective_opt(
577            dxpl_id: hid_t, opt_mode: H5FD_mpio_collective_opt_t,
578        ) -> herr_t;
579        pub fn H5Pset_dxpl_mpio_chunk_opt(
580            dxpl_id: hid_t, opt_mode: H5FD_mpio_chunk_opt_t,
581        ) -> herr_t;
582        pub fn H5Pset_dxpl_mpio_chunk_opt_num(dxpl_id: hid_t, num_chunk_per_proc: c_uint)
583            -> herr_t;
584        pub fn H5Pset_dxpl_mpio_chunk_opt_ratio(
585            dxpl_id: hid_t, percent_num_proc_per_chunk: c_uint,
586        ) -> herr_t;
587    }
588}
589
590#[cfg(feature = "have-parallel")]
591pub use self::mpio::*;
592
593#[cfg(target_os = "windows")]
594extern "C" {
595    pub fn H5Pset_fapl_windows(fapl_id: hid_t) -> herr_t;
596}
597
598#[cfg(feature = "1.8.7")]
599extern "C" {
600    pub fn H5Pset_elink_file_cache_size(plist_id: hid_t, efc_size: c_uint) -> herr_t;
601    pub fn H5Pget_elink_file_cache_size(plist_id: hid_t, efc_size: *mut c_uint) -> herr_t;
602}
603
604#[cfg(feature = "1.8.9")]
605extern "C" {
606    pub fn H5Pset_file_image(fapl_id: hid_t, buf_ptr: *mut c_void, buf_len: size_t) -> herr_t;
607    pub fn H5Pget_file_image(
608        fapl_id: hid_t, buf_ptr_ptr: *mut *mut c_void, buf_len_ptr: *mut size_t,
609    ) -> herr_t;
610    pub fn H5Pset_file_image_callbacks(
611        fapl_id: hid_t, callbacks_ptr: *mut H5FD_file_image_callbacks_t,
612    ) -> herr_t;
613    pub fn H5Pget_file_image_callbacks(
614        fapl_id: hid_t, callbacks_ptr: *mut H5FD_file_image_callbacks_t,
615    ) -> herr_t;
616    pub fn H5Pset_mcdt_search_cb(
617        plist_id: hid_t, func: H5O_mcdt_search_cb_t, op_data: *mut c_void,
618    ) -> herr_t;
619    pub fn H5Pget_mcdt_search_cb(
620        plist_id: hid_t, func: *mut H5O_mcdt_search_cb_t, op_data: *mut *mut c_void,
621    ) -> herr_t;
622    pub fn H5Padd_merge_committed_dtype_path(plist_id: hid_t, path: *const c_char) -> herr_t;
623    pub fn H5Pfree_merge_committed_dtype_paths(plist_id: hid_t) -> herr_t;
624}
625
626#[cfg(feature = "1.8.13")]
627extern "C" {
628    pub fn H5Pset_core_write_tracking(
629        fapl_id: hid_t, is_enabled: hbool_t, page_size: size_t,
630    ) -> herr_t;
631    pub fn H5Pget_core_write_tracking(
632        fapl_id: hid_t, is_enabled: *mut hbool_t, page_size: *mut size_t,
633    ) -> herr_t;
634}
635
636#[cfg(feature = "1.8.17")]
637extern "C" {
638    pub fn H5Pset_efile_prefix(dapl_id: hid_t, prefix: *const c_char) -> herr_t;
639    pub fn H5Pget_efile_prefix(dapl_id: hid_t, prefix: *const c_char, size: size_t) -> ssize_t;
640}
641
642#[cfg(feature = "1.10.0")]
643use crate::{
644    h5d::{H5D_append_cb_t, H5D_vds_view_t},
645    h5f::{H5F_file_space_type_t, H5F_flush_cb_t},
646};
647
648#[cfg(feature = "1.10.0")]
649extern "C" {
650    pub fn H5Pset_append_flush(
651        plist_id: hid_t, ndims: c_uint, boundary: *const hsize_t, func: H5D_append_cb_t,
652        udata: *mut c_void,
653    ) -> herr_t;
654    pub fn H5Pget_append_flush(
655        plist_id: hid_t, dims: c_uint, boundary: *mut hsize_t, func: *mut H5D_append_cb_t,
656        udata: *mut *mut c_void,
657    ) -> herr_t;
658    pub fn H5Pset_object_flush_cb(
659        plist_id: hid_t, func: H5F_flush_cb_t, udata: *mut c_void,
660    ) -> herr_t;
661    pub fn H5Pget_object_flush_cb(
662        plist_id: hid_t, func: *mut H5F_flush_cb_t, udata: *mut *mut c_void,
663    ) -> herr_t;
664    pub fn H5Pget_metadata_read_attempts(plist_id: hid_t, attempts: *mut c_uint) -> herr_t;
665    pub fn H5Pset_metadata_read_attempts(plist_id: hid_t, attempts: c_uint) -> herr_t;
666    pub fn H5Pset_mdc_log_options(
667        plist_id: hid_t, is_enabled: hbool_t, location: *const c_char, start_on_access: hbool_t,
668    ) -> herr_t;
669    pub fn H5Pget_mdc_log_options(
670        plist_id: hid_t, is_enabled: *mut hbool_t, location: *mut c_char,
671        location_size: *mut size_t, start_on_access: *mut hbool_t,
672    ) -> herr_t;
673    pub fn H5Fget_mdc_logging_status(
674        file_id: hid_t, is_enabled: *mut hbool_t, is_currently_logging: *mut hbool_t,
675    ) -> herr_t;
676    pub fn H5Pset_virtual(
677        dcpl_id: hid_t, vspace_id: hid_t, src_file_name: *const c_char,
678        src_dset_name: *const c_char, src_space_id: hid_t,
679    ) -> herr_t;
680    pub fn H5Pget_virtual_count(dcpl_id: hid_t, count: *mut size_t) -> herr_t;
681    pub fn H5Pget_virtual_vspace(dcpl_id: hid_t, index: size_t) -> hid_t;
682    pub fn H5Pget_virtual_srcspace(dcpl_id: hid_t, index: size_t) -> hid_t;
683    pub fn H5Pget_virtual_dsetname(
684        dcpl_id: hid_t, index: size_t, name: *mut c_char, size: size_t,
685    ) -> ssize_t;
686    pub fn H5Pget_virtual_filename(
687        dcpl_id: hid_t, index: size_t, name: *mut c_char, size: size_t,
688    ) -> ssize_t;
689    pub fn H5Pget_virtual_printf_gap(plist_id: hid_t, gap_size: *mut hsize_t) -> herr_t;
690    pub fn H5Pset_virtual_printf_gap(plist_id: hid_t, gap_size: hsize_t) -> herr_t;
691    pub fn H5Pget_virtual_view(plist_id: hid_t, view: *mut H5D_vds_view_t) -> herr_t;
692    pub fn H5Pset_virtual_view(plist_id: hid_t, view: H5D_vds_view_t) -> herr_t;
693    pub fn H5Pget_chunk_opts(plist_id: hid_t, opts: *mut c_uint) -> herr_t;
694    pub fn H5Pset_chunk_opts(plist_id: hid_t, opts: c_uint) -> herr_t;
695    #[cfg_attr(
696        feature = "1.12.0",
697        deprecated(note = "deprecated in HDF5 1.12.0, use H5Pencode2()")
698    )]
699    #[cfg_attr(not(feature = "1.12.0"), link_name = "H5Pencode")]
700    pub fn H5Pencode1(plist_id: hid_t, buf: *mut c_void, nalloc: *mut size_t) -> herr_t;
701    #[cfg(feature = "1.12.0")]
702    pub fn H5Pencode2(
703        plist_id: hid_t, buf: *mut c_void, nalloc: *mut size_t, fapl_id: hid_t,
704    ) -> herr_t;
705    pub fn H5Pdecode(buf: *const c_void) -> hid_t;
706    #[cfg_attr(
707        hdf5_1_10_1,
708        deprecated(note = "deprecated in HDF5 1.10.1, use H5Pset_file_space_strategy()")
709    )]
710    pub fn H5Pset_file_space(
711        plist_id: hid_t, strategy: H5F_file_space_type_t, threshold: hsize_t,
712    ) -> herr_t;
713    #[cfg_attr(
714        hdf5_1_10_1,
715        deprecated(note = "deprecated in HDF5 1.10.1, use H5Pget_file_space_strategy()")
716    )]
717    pub fn H5Pget_file_space(
718        plist_id: hid_t, strategy: *mut H5F_file_space_type_t, threshold: *mut hsize_t,
719    ) -> herr_t;
720}
721
722#[cfg(all(feature = "1.10.0", not(feature = "1.12.0")))]
723pub use self::H5Pencode1 as H5Pencode;
724#[cfg(feature = "1.12.0")]
725pub use self::H5Pencode2 as H5Pencode;
726
727#[cfg(all(feature = "1.10.0", feature = "have-parallel"))]
728extern "C" {
729    pub fn H5Pset_coll_metadata_write(fapl_id: hid_t, is_collective: hbool_t) -> herr_t;
730    pub fn H5Pget_coll_metadata_write(fapl_id: hid_t, is_collective: *mut hbool_t) -> herr_t;
731    pub fn H5Pset_all_coll_metadata_ops(accpl_id: hid_t, is_collective: hbool_t) -> herr_t;
732    pub fn H5Pget_all_coll_metadata_ops(accpl_id: hid_t, is_collective: *mut hbool_t) -> herr_t;
733}
734
735#[cfg(feature = "1.10.1")]
736extern "C" {
737    pub fn H5Pset_evict_on_close(fapl_id: hid_t, evict_on_close: hbool_t) -> herr_t;
738    pub fn H5Pget_evict_on_close(fapl_id: hid_t, evict_on_close: *mut hbool_t) -> herr_t;
739    pub fn H5Pset_mdc_image_config(
740        plist_id: hid_t, config_ptr: *const H5AC_cache_image_config_t,
741    ) -> herr_t;
742    pub fn H5Pget_mdc_image_config(
743        plist_id: hid_t, config_ptr: *mut H5AC_cache_image_config_t,
744    ) -> herr_t;
745    pub fn H5Pset_page_buffer_size(
746        plist_id: hid_t, buf_size: size_t, min_meta_per: c_uint, min_raw_per: c_uint,
747    ) -> herr_t;
748    pub fn H5Pget_page_buffer_size(
749        plist_id: hid_t, buf_size: *mut size_t, min_meta_per: *mut c_uint, min_raw_per: *mut c_uint,
750    ) -> herr_t;
751    pub fn H5Pset_file_space_strategy(
752        plist_id: hid_t, strategy: H5F_fspace_strategy_t, persist: hbool_t, threshold: hsize_t,
753    ) -> herr_t;
754    pub fn H5Pget_file_space_strategy(
755        plist_id: hid_t, strategy: *mut H5F_fspace_strategy_t, persist: *mut hbool_t,
756        threshold: *mut hsize_t,
757    ) -> herr_t;
758    pub fn H5Pset_file_space_page_size(plist_id: hid_t, fsp_size: hsize_t) -> herr_t;
759    pub fn H5Pget_file_space_page_size(plist_id: hid_t, fsp_size: *mut hsize_t) -> herr_t;
760}
761
762#[cfg(feature = "1.10.2")]
763extern "C" {
764    pub fn H5Pset_virtual_prefix(dapl_id: hid_t, prefix: *const c_char) -> herr_t;
765    pub fn H5Pget_virtual_prefix(dapl_id: hid_t, prefix: *mut c_char, size: size_t) -> ssize_t;
766}
767
768#[cfg(feature = "1.10.5")]
769extern "C" {
770    pub fn H5Pget_dset_no_attrs_hint(dcpl_id: hid_t, minimize: *mut hbool_t) -> herr_t;
771    pub fn H5Pset_dset_no_attrs_hint(dcpl_id: hid_t, minimize: hbool_t) -> herr_t;
772}
773
774#[cfg(any(all(feature = "1.10.7", not(feature = "1.12.0")), feature = "1.12.1"))]
775extern "C" {
776    pub fn H5Pget_file_locking(
777        fapl_id: hid_t, use_file_locking: *mut hbool_t, ignore_when_disable: *mut hbool_t,
778    ) -> herr_t;
779    pub fn H5Pset_file_locking(
780        fapl_id: hid_t, use_file_locking: hbool_t, ignore_when_disable: hbool_t,
781    ) -> herr_t;
782
783}
784
785#[cfg(feature = "1.12.0")]
786extern "C" {
787    pub fn H5Pget_vol_id(plist_id: hid_t, vol_id: *mut hid_t) -> herr_t;
788    pub fn H5Pget_vol_info(plist_id: hid_t, vol_info: *mut *mut c_void) -> herr_t;
789    pub fn H5Pset_vol(plist_id: hid_t, new_vol_id: hid_t, new_vol_id: *const c_void) -> herr_t;
790}