wasmer_c_api/wasm_c_api/externals/
memory.rs1use super::super::types::wasm_memorytype_t;
2use super::{super::store::wasm_store_t, wasm_extern_t};
3use wasmer_api::{Extern, Memory, Pages};
4
5#[allow(non_camel_case_types)]
6#[repr(C)]
7#[derive(Clone)]
8pub struct wasm_memory_t {
9 pub(crate) extern_: wasm_extern_t,
10}
11
12impl wasm_memory_t {
13 pub(crate) fn try_from(e: &wasm_extern_t) -> Option<&wasm_memory_t> {
14 match &e.inner {
15 Extern::Memory(_) => Some(unsafe { &*(e as *const _ as *const _) }),
16 _ => None,
17 }
18 }
19}
20
21#[unsafe(no_mangle)]
22pub unsafe extern "C" fn wasm_memory_new(
23 store: Option<&mut wasm_store_t>,
24 memory_type: Option<&wasm_memorytype_t>,
25) -> Option<Box<wasm_memory_t>> {
26 let memory_type = memory_type?;
27 let store = store?;
28 let mut store_mut = unsafe { store.inner.store_mut() };
29 let memory_type = memory_type.inner().memory_type;
30 let memory = c_try!(Memory::new(&mut store_mut, memory_type));
31 Some(Box::new(wasm_memory_t {
32 extern_: wasm_extern_t::new(store.inner.clone(), memory.into()),
33 }))
34}
35
36#[unsafe(no_mangle)]
37pub unsafe extern "C" fn wasm_memory_delete(_memory: Option<Box<wasm_memory_t>>) {}
38
39#[unsafe(no_mangle)]
40pub unsafe extern "C" fn wasm_memory_copy(memory: &wasm_memory_t) -> Box<wasm_memory_t> {
41 Box::new(memory.clone())
43}
44
45#[unsafe(no_mangle)]
46pub unsafe extern "C" fn wasm_memory_same(
47 wasm_memory1: &wasm_memory_t,
48 wasm_memory2: &wasm_memory_t,
49) -> bool {
50 wasm_memory1.extern_.memory() == wasm_memory2.extern_.memory()
51}
52
53#[unsafe(no_mangle)]
54pub unsafe extern "C" fn wasm_memory_type(
55 memory: Option<&wasm_memory_t>,
56) -> Option<Box<wasm_memorytype_t>> {
57 let memory = memory?;
58 let store_ref = unsafe { memory.extern_.store.store() };
59 Some(Box::new(wasm_memorytype_t::new(
60 memory.extern_.memory().ty(&store_ref),
61 )))
62}
63
64#[unsafe(no_mangle)]
66pub unsafe extern "C" fn wasm_memory_data(memory: &mut wasm_memory_t) -> *mut u8 {
67 let store_ref = unsafe { memory.extern_.store.store() };
68 memory.extern_.memory().view(&store_ref).data_ptr()
69}
70
71#[unsafe(no_mangle)]
73pub unsafe extern "C" fn wasm_memory_data_size(memory: &wasm_memory_t) -> usize {
74 let store_ref = unsafe { memory.extern_.store.store() };
75 memory.extern_.memory().view(&store_ref).size().bytes().0
76}
77
78#[unsafe(no_mangle)]
80pub unsafe extern "C" fn wasm_memory_size(memory: &wasm_memory_t) -> u32 {
81 let store_ref = unsafe { memory.extern_.store.store() };
82 memory.extern_.memory().view(&store_ref).size().0 as _
83}
84
85#[unsafe(no_mangle)]
87pub unsafe extern "C" fn wasm_memory_grow(memory: &mut wasm_memory_t, delta: u32) -> bool {
88 let wasm_memory = memory.extern_.memory();
89 let mut store_mut = unsafe { memory.extern_.store.store_mut() };
90 wasm_memory.grow(&mut store_mut, Pages(delta)).is_ok()
91}