hdf5_sys/
h5s.rs

1//! Creating and manipulating dataspaces in which to store elements of a dataset
2pub use self::H5S_class_t::*;
3pub use self::H5S_sel_type::*;
4pub use self::H5S_seloper_t::*;
5#[cfg(not(feature = "1.12.0"))]
6pub use self::H5Sencode1 as H5Sencode;
7#[cfg(feature = "1.12.0")]
8pub use self::H5Sencode2 as H5Sencode;
9
10use crate::internal_prelude::*;
11
12pub const H5S_ALL: hid_t = 0;
13
14pub const H5S_UNLIMITED: hsize_t = -1_i32 as _;
15
16pub const H5S_MAX_RANK: c_uint = 32;
17
18pub const H5S_SEL_ITER_GET_SEQ_LIST_SORTED: c_uint = 0x0001;
19pub const H5S_SEL_ITER_SHARE_WITH_DATASPACE: c_uint = 0x0002;
20
21#[repr(C)]
22#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
23pub enum H5S_class_t {
24    H5S_NO_CLASS = -1,
25    H5S_SCALAR = 0,
26    H5S_SIMPLE = 1,
27    H5S_NULL = 2,
28}
29
30#[repr(C)]
31#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
32pub enum H5S_seloper_t {
33    H5S_SELECT_NOOP = -1,
34    H5S_SELECT_SET = 0,
35    H5S_SELECT_OR = 1,
36    H5S_SELECT_AND = 2,
37    H5S_SELECT_XOR = 3,
38    H5S_SELECT_NOTB = 4,
39    H5S_SELECT_NOTA = 5,
40    H5S_SELECT_APPEND = 6,
41    H5S_SELECT_PREPEND = 7,
42    H5S_SELECT_INVALID = 8,
43}
44
45#[repr(C)]
46#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
47pub enum H5S_sel_type {
48    H5S_SEL_ERROR = -1,
49    H5S_SEL_NONE = 0,
50    H5S_SEL_POINTS = 1,
51    H5S_SEL_HYPERSLABS = 2,
52    H5S_SEL_ALL = 3,
53    H5S_SEL_N = 4,
54}
55
56extern "C" {
57    pub fn H5Screate(type_: H5S_class_t) -> hid_t;
58    pub fn H5Screate_simple(rank: c_int, dims: *const hsize_t, maxdims: *const hsize_t) -> hid_t;
59    pub fn H5Sset_extent_simple(
60        space_id: hid_t, rank: c_int, dims: *const hsize_t, max: *const hsize_t,
61    ) -> herr_t;
62    pub fn H5Scopy(space_id: hid_t) -> hid_t;
63    pub fn H5Sclose(space_id: hid_t) -> herr_t;
64    #[cfg_attr(
65        feature = "1.12.0",
66        deprecated(note = "deprecated in HDF5 1.12.0, use H5Sencode2()")
67    )]
68    #[cfg_attr(not(feature = "1.12.0"), link_name = "H5Sencode")]
69    pub fn H5Sencode1(obj_id: hid_t, buf: *mut c_void, nalloc: *mut size_t) -> herr_t;
70    #[cfg(feature = "1.12.0")]
71    pub fn H5Sencode2(
72        obj_id: hid_t, buf: *mut c_void, nalloc: *mut size_t, fapl_id: hid_t,
73    ) -> herr_t;
74    pub fn H5Sdecode(buf: *const c_void) -> hid_t;
75    pub fn H5Sget_simple_extent_npoints(space_id: hid_t) -> hssize_t;
76    pub fn H5Sget_simple_extent_ndims(space_id: hid_t) -> c_int;
77    pub fn H5Sget_simple_extent_dims(
78        space_id: hid_t, dims: *mut hsize_t, maxdims: *mut hsize_t,
79    ) -> c_int;
80    pub fn H5Sis_simple(space_id: hid_t) -> htri_t;
81    pub fn H5Sget_select_npoints(spaceid: hid_t) -> hssize_t;
82    pub fn H5Sselect_hyperslab(
83        space_id: hid_t, op: H5S_seloper_t, start: *const hsize_t, _stride: *const hsize_t,
84        count: *const hsize_t, _block: *const hsize_t,
85    ) -> herr_t;
86    pub fn H5Sselect_elements(
87        space_id: hid_t, op: H5S_seloper_t, num_elem: size_t, coord: *const hsize_t,
88    ) -> herr_t;
89    pub fn H5Sget_simple_extent_type(space_id: hid_t) -> H5S_class_t;
90    pub fn H5Sset_extent_none(space_id: hid_t) -> herr_t;
91    pub fn H5Sextent_copy(dst_id: hid_t, src_id: hid_t) -> herr_t;
92    pub fn H5Sextent_equal(sid1: hid_t, sid2: hid_t) -> htri_t;
93    pub fn H5Sselect_all(spaceid: hid_t) -> herr_t;
94    pub fn H5Sselect_none(spaceid: hid_t) -> herr_t;
95    pub fn H5Soffset_simple(space_id: hid_t, offset: *const hssize_t) -> herr_t;
96    pub fn H5Sselect_valid(spaceid: hid_t) -> htri_t;
97    pub fn H5Sget_select_hyper_nblocks(spaceid: hid_t) -> hssize_t;
98    pub fn H5Sget_select_elem_npoints(spaceid: hid_t) -> hssize_t;
99    pub fn H5Sget_select_hyper_blocklist(
100        spaceid: hid_t, startblock: hsize_t, numblocks: hsize_t, buf: *mut hsize_t,
101    ) -> herr_t;
102    pub fn H5Sget_select_elem_pointlist(
103        spaceid: hid_t, startpoint: hsize_t, numpoints: hsize_t, buf: *mut hsize_t,
104    ) -> herr_t;
105    pub fn H5Sget_select_bounds(spaceid: hid_t, start: *mut hsize_t, end: *mut hsize_t) -> herr_t;
106    pub fn H5Sget_select_type(spaceid: hid_t) -> H5S_sel_type;
107}
108
109#[cfg(feature = "1.10.0")]
110extern "C" {
111    pub fn H5Sis_regular_hyperslab(spaceid: hid_t) -> htri_t;
112    pub fn H5Sget_regular_hyperslab(
113        spaceid: hid_t, start: *mut hsize_t, stride: *mut hsize_t, count: *mut hsize_t,
114        block: *mut hsize_t,
115    ) -> htri_t;
116}
117
118#[cfg(any(feature = "1.12.0", feature = "1.10.7"))]
119extern "C" {
120    pub fn H5Scombine_hyperslab(
121        space_id: hid_t, op: H5S_seloper_t, start: *const hsize_t, stride: *const hsize_t,
122        count: *const hsize_t, block: *const hsize_t,
123    ) -> hid_t;
124    pub fn H5Scombine_select(space1_id: hid_t, op: H5S_seloper_t, space2_id: hid_t) -> hid_t;
125    pub fn H5Smodify_select(space1_id: hid_t, op: H5S_seloper_t, space2_id: hid_t) -> herr_t;
126    pub fn H5Sselect_adjust(space_id: hid_t, offset: *const hssize_t) -> herr_t;
127    pub fn H5Sselect_copy(dst_id: hid_t, src_id: hid_t) -> herr_t;
128    pub fn H5Sselect_intersect_block(
129        space_id: hid_t, start: *const hsize_t, end: *const hsize_t,
130    ) -> htri_t;
131    pub fn H5Sselect_project_intersection(
132        src_space_id: hid_t, dst_space_id: hid_t, src_intersect_space_id: hid_t,
133    ) -> hid_t;
134    pub fn H5Sselect_shape_same(space1_id: hid_t, space2_id: hid_t) -> htri_t;
135}
136
137#[cfg(feature = "1.12.0")]
138extern "C" {
139    pub fn H5Ssel_iter_close(sel_iter_id: hid_t) -> herr_t;
140    pub fn H5Ssel_iter_create(space_id: hid_t, elmt_size: size_t, flags: c_uint) -> hid_t;
141    pub fn H5Ssel_iter_get_seq_list(
142        sel_iter_id: hid_t, maxseq: size_t, maxbytes: size_t, nseq: *mut size_t,
143        nbytes: *mut size_t, off: *mut hsize_t, len: *mut size_t,
144    ) -> herr_t;
145}
146
147#[cfg(feature = "1.12.1")]
148extern "C" {
149    pub fn H5Ssel_iter_reset(sel_iter_id: hid_t, space_id: hid_t) -> hid_t;
150}