1ca5f1bb6SAlex Crichton use crate::{handle_result, wasm_memorytype_t, wasmtime_error_t};
255bd797aSMilek7 use std::cell::UnsafeCell;
3ca5f1bb6SAlex Crichton use wasmtime::SharedMemory;
455bd797aSMilek7 
555bd797aSMilek7 type wasmtime_sharedmemory_t = SharedMemory;
655bd797aSMilek7 
755bd797aSMilek7 wasmtime_c_api_macros::declare_own!(wasmtime_sharedmemory_t);
855bd797aSMilek7 
9*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
1083b859e5SAlex Crichton #[cfg(feature = "threads")]
wasmtime_sharedmemory_new( engine: &crate::wasm_engine_t, ty: &wasm_memorytype_t, ret: &mut *mut wasmtime_sharedmemory_t, ) -> Option<Box<wasmtime_error_t>>1155bd797aSMilek7 pub extern "C" fn wasmtime_sharedmemory_new(
1283b859e5SAlex Crichton     engine: &crate::wasm_engine_t,
1355bd797aSMilek7     ty: &wasm_memorytype_t,
1455bd797aSMilek7     ret: &mut *mut wasmtime_sharedmemory_t,
1555bd797aSMilek7 ) -> Option<Box<wasmtime_error_t>> {
1655bd797aSMilek7     handle_result(
1755bd797aSMilek7         SharedMemory::new(&engine.engine, ty.ty().ty.clone()),
1855bd797aSMilek7         |mem| *ret = Box::<wasmtime_sharedmemory_t>::into_raw(Box::new(mem)),
1955bd797aSMilek7     )
2055bd797aSMilek7 }
2155bd797aSMilek7 
22*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_sharedmemory_clone( mem: &wasmtime_sharedmemory_t, ) -> Box<wasmtime_sharedmemory_t>2355bd797aSMilek7 pub extern "C" fn wasmtime_sharedmemory_clone(
2455bd797aSMilek7     mem: &wasmtime_sharedmemory_t,
2555bd797aSMilek7 ) -> Box<wasmtime_sharedmemory_t> {
2655bd797aSMilek7     Box::new(mem.clone())
2755bd797aSMilek7 }
2855bd797aSMilek7 
29*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_sharedmemory_type( mem: &wasmtime_sharedmemory_t, ) -> Box<wasm_memorytype_t>3055bd797aSMilek7 pub extern "C" fn wasmtime_sharedmemory_type(
3155bd797aSMilek7     mem: &wasmtime_sharedmemory_t,
3255bd797aSMilek7 ) -> Box<wasm_memorytype_t> {
3355bd797aSMilek7     Box::new(wasm_memorytype_t::new(mem.ty()))
3455bd797aSMilek7 }
3555bd797aSMilek7 
36*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_sharedmemory_data( mem: &wasmtime_sharedmemory_t, ) -> *const UnsafeCell<u8>3755bd797aSMilek7 pub extern "C" fn wasmtime_sharedmemory_data(
3855bd797aSMilek7     mem: &wasmtime_sharedmemory_t,
3955bd797aSMilek7 ) -> *const UnsafeCell<u8> {
4055bd797aSMilek7     mem.data().as_ptr()
4155bd797aSMilek7 }
4255bd797aSMilek7 
43*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_sharedmemory_data_size(mem: &wasmtime_sharedmemory_t) -> usize4455bd797aSMilek7 pub extern "C" fn wasmtime_sharedmemory_data_size(mem: &wasmtime_sharedmemory_t) -> usize {
4555bd797aSMilek7     mem.data().len()
4655bd797aSMilek7 }
4755bd797aSMilek7 
48*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_sharedmemory_size(mem: &wasmtime_sharedmemory_t) -> u644955bd797aSMilek7 pub extern "C" fn wasmtime_sharedmemory_size(mem: &wasmtime_sharedmemory_t) -> u64 {
5055bd797aSMilek7     mem.size()
5155bd797aSMilek7 }
5255bd797aSMilek7 
53*ae84e6edSAlex Crichton #[unsafe(no_mangle)]
wasmtime_sharedmemory_grow( mem: &wasmtime_sharedmemory_t, delta: u64, prev_size: &mut u64, ) -> Option<Box<wasmtime_error_t>>5455bd797aSMilek7 pub extern "C" fn wasmtime_sharedmemory_grow(
5555bd797aSMilek7     mem: &wasmtime_sharedmemory_t,
5655bd797aSMilek7     delta: u64,
5755bd797aSMilek7     prev_size: &mut u64,
5855bd797aSMilek7 ) -> Option<Box<wasmtime_error_t>> {
5955bd797aSMilek7     handle_result(mem.grow(delta), |prev| *prev_size = prev)
6055bd797aSMilek7 }
61