1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
pub use self::H5D_layout_t::*;
pub use self::H5D_alloc_time_t::*;
pub use self::H5D_space_status_t::*;
pub use self::H5D_fill_time_t::*;
pub use self::H5D_fill_value_t::*;

use libc::{c_uint, c_void, c_char, c_float, size_t};

use h5::{herr_t, hsize_t, haddr_t};
use h5i::hid_t;

pub const H5D_CHUNK_CACHE_NSLOTS_DEFAULT: size_t = !0;
pub const H5D_CHUNK_CACHE_NBYTES_DEFAULT: size_t = !0;

pub const H5D_CHUNK_CACHE_W0_DEFAULT: c_float = -1.0;

pub const H5D_XFER_DIRECT_CHUNK_WRITE_FLAG_NAME:     &'static str = "direct_chunk_flag";
pub const H5D_XFER_DIRECT_CHUNK_WRITE_FILTERS_NAME:  &'static str = "direct_chunk_filters";
pub const H5D_XFER_DIRECT_CHUNK_WRITE_OFFSET_NAME:   &'static str = "direct_chunk_offset";
pub const H5D_XFER_DIRECT_CHUNK_WRITE_DATASIZE_NAME: &'static str = "direct_chunk_datasize";

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5D_layout_t {
    H5D_LAYOUT_ERROR = -1,
    H5D_COMPACT      = 0,
    H5D_CONTIGUOUS   = 1,
    H5D_CHUNKED      = 2,
    H5D_NLAYOUTS     = 3,
}

pub type H5D_chunk_index_t = c_uint;
pub const H5D_CHUNK_BTREE: H5D_chunk_index_t = 0;

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5D_alloc_time_t {
    H5D_ALLOC_TIME_ERROR   = -1,
    H5D_ALLOC_TIME_DEFAULT = 0,
    H5D_ALLOC_TIME_EARLY   = 1,
    H5D_ALLOC_TIME_LATE    = 2,
    H5D_ALLOC_TIME_INCR    = 3,
}

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5D_space_status_t {
    H5D_SPACE_STATUS_ERROR          = -1,
    H5D_SPACE_STATUS_NOT_ALLOCATED  = 0,
    H5D_SPACE_STATUS_PART_ALLOCATED = 1,
    H5D_SPACE_STATUS_ALLOCATED      = 2,
}

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5D_fill_time_t {
    H5D_FILL_TIME_ERROR = -1,
    H5D_FILL_TIME_ALLOC = 0,
    H5D_FILL_TIME_NEVER = 1,
    H5D_FILL_TIME_IFSET = 2,
}

#[repr(C)]
#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
pub enum H5D_fill_value_t {
    H5D_FILL_VALUE_ERROR        = -1,
    H5D_FILL_VALUE_UNDEFINED    = 0,
    H5D_FILL_VALUE_DEFAULT      = 1,
    H5D_FILL_VALUE_USER_DEFINED = 2,
}

pub type H5D_operator_t = Option<extern fn (elem: *mut c_void, type_id: hid_t, ndim: c_uint, point:
                                            *const hsize_t, operator_data: *mut c_void) -> herr_t>;
pub type H5D_scatter_func_t = Option<extern fn (src_buf: *mut *const c_void, src_buf_bytes_used:
                                                *mut size_t, op_data: *mut c_void) -> herr_t>;
pub type H5D_gather_func_t = Option<extern fn (dst_buf: *const c_void, dst_buf_bytes_used: size_t,
                                               op_data: *mut c_void) -> herr_t>;

extern {
    pub fn H5Dcreate2(loc_id: hid_t, name: *const c_char, type_id: hid_t, space_id: hid_t, lcpl_id:
                      hid_t, dcpl_id: hid_t, dapl_id: hid_t) -> hid_t;
    pub fn H5Dcreate_anon(file_id: hid_t, type_id: hid_t, space_id: hid_t, plist_id: hid_t, dapl_id:
                          hid_t) -> hid_t;
    pub fn H5Dopen2(file_id: hid_t, name: *const c_char, dapl_id: hid_t) -> hid_t;
    pub fn H5Dclose(dset_id: hid_t) -> herr_t;
    pub fn H5Dget_space(dset_id: hid_t) -> hid_t;
    pub fn H5Dget_space_status(dset_id: hid_t, allocation: *mut H5D_space_status_t) -> herr_t;
    pub fn H5Dget_type(dset_id: hid_t) -> hid_t;
    pub fn H5Dget_create_plist(dset_id: hid_t) -> hid_t;
    pub fn H5Dget_access_plist(dset_id: hid_t) -> hid_t;
    pub fn H5Dget_storage_size(dset_id: hid_t) -> hsize_t;
    pub fn H5Dget_offset(dset_id: hid_t) -> haddr_t;
    pub fn H5Dread(dset_id: hid_t, mem_type_id: hid_t, mem_space_id: hid_t, file_space_id: hid_t,
                   plist_id: hid_t, buf: *mut c_void) -> herr_t;
    pub fn H5Dwrite(dset_id: hid_t, mem_type_id: hid_t, mem_space_id: hid_t, file_space_id: hid_t,
                    plist_id: hid_t, buf: *const c_void) -> herr_t;
    pub fn H5Diterate(buf: *mut c_void, type_id: hid_t, space_id: hid_t, op: H5D_operator_t,
                      operator_data: *mut c_void) -> herr_t;
    pub fn H5Dvlen_reclaim(type_id: hid_t, space_id: hid_t, plist_id: hid_t, buf: *mut c_void) ->
                           herr_t;
    pub fn H5Dvlen_get_buf_size(dataset_id: hid_t, type_id: hid_t, space_id: hid_t, size: *mut
                                hsize_t) -> herr_t;
    pub fn H5Dfill(fill: *const c_void, fill_type: hid_t, buf: *mut c_void, buf_type: hid_t, space:
                   hid_t) -> herr_t;
    pub fn H5Dset_extent(dset_id: hid_t, size: *const hsize_t) -> herr_t;
    pub fn H5Dscatter(op: H5D_scatter_func_t, op_data: *mut c_void, type_id: hid_t, dst_space_id:
                      hid_t, dst_buf: *mut c_void) -> herr_t;
    pub fn H5Dgather(src_space_id: hid_t, src_buf: *const c_void, type_id: hid_t, dst_buf_size:
                     size_t, dst_buf: *mut c_void, op: H5D_gather_func_t, op_data: *mut c_void) ->
                     herr_t;
    pub fn H5Ddebug(dset_id: hid_t) -> herr_t;
}