avir_rs/
lib.rs

1use libc::{c_void, size_t};
2use std::slice;
3
4pub mod librii {
5    #[allow(non_upper_case_globals)]
6    #[allow(non_camel_case_types)]
7    #[allow(non_snake_case)]
8    pub mod bindings {
9        include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
10    }
11
12    pub fn avir_resize(dst: &mut [u8], dx: u32, dy: u32, src: &[u8], sx: u32, sy: u32) {
13        unsafe {
14            bindings::impl_avir_resize(src.as_ptr(), sx, sy, dst.as_mut_ptr(), dx, dy);
15        }
16    }
17
18    pub fn clancir_resize(dst: &mut [u8], dx: u32, dy: u32, src: &[u8], sx: u32, sy: u32) {
19        unsafe {
20            bindings::impl_clancir_resize(src.as_ptr(), sx, sy, dst.as_mut_ptr(), dx, dy);
21        }
22    }
23}
24
25#[no_mangle]
26pub unsafe extern "C" fn avir_resize(
27    dst: *mut c_void,
28    dst_len: size_t,
29    dx: u32,
30    dy: u32,
31    src: *const c_void,
32    src_len: size_t,
33    sx: u32,
34    sy: u32,
35) {
36    let dst_slice = slice::from_raw_parts_mut(dst as *mut u8, dst_len);
37    let src_slice = slice::from_raw_parts(src as *const u8, src_len);
38    librii::avir_resize(dst_slice, dx, dy, src_slice, sx, sy);
39}
40
41#[no_mangle]
42pub unsafe extern "C" fn clancir_resize(
43    dst: *mut c_void,
44    dst_len: size_t,
45    dx: u32,
46    dy: u32,
47    src: *const c_void,
48    src_len: size_t,
49    sx: u32,
50    sy: u32,
51) {
52    let dst_slice = slice::from_raw_parts_mut(dst as *mut u8, dst_len);
53    let src_slice = slice::from_raw_parts(src as *const u8, src_len);
54    librii::clancir_resize(dst_slice, dx, dy, src_slice, sx, sy);
55}