wasmer/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#[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 = 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#[no_mangle]
37pub unsafe extern "C" fn wasm_memory_delete(_memory: Option<Box<wasm_memory_t>>) {}
38
39#[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#[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#[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 Some(Box::new(wasm_memorytype_t::new(
59 memory.extern_.memory().ty(&memory.extern_.store.store()),
60 )))
61}
62
63#[no_mangle]
65pub unsafe extern "C" fn wasm_memory_data(memory: &mut wasm_memory_t) -> *mut u8 {
66 memory
67 .extern_
68 .memory()
69 .view(&memory.extern_.store.store())
70 .data_ptr()
71}
72
73#[no_mangle]
75pub unsafe extern "C" fn wasm_memory_data_size(memory: &wasm_memory_t) -> usize {
76 memory
77 .extern_
78 .memory()
79 .view(&memory.extern_.store.store())
80 .size()
81 .bytes()
82 .0
83}
84
85#[no_mangle]
87pub unsafe extern "C" fn wasm_memory_size(memory: &wasm_memory_t) -> u32 {
88 memory
89 .extern_
90 .memory()
91 .view(&memory.extern_.store.store())
92 .size()
93 .0 as _
94}
95
96#[no_mangle]
98pub unsafe extern "C" fn wasm_memory_grow(memory: &mut wasm_memory_t, delta: u32) -> bool {
99 memory
100 .extern_
101 .memory()
102 .grow(&mut memory.extern_.store.store_mut(), Pages(delta))
103 .is_ok()
104}