wasmtime/runtime/vm/memory/
static_.rs1use crate::prelude::*;
5use crate::runtime::vm::MemoryBase;
6use crate::runtime::vm::memory::RuntimeLinearMemory;
7
8pub struct StaticMemory {
11 base: MemoryBase,
14
15 capacity: usize,
17
18 size: usize,
20}
21
22impl StaticMemory {
23 pub fn new(
24 base: MemoryBase,
25 base_capacity: usize,
26 initial_size: usize,
27 maximum_size: Option<usize>,
28 ) -> Result<Self> {
29 if base_capacity < initial_size {
30 bail!(
31 "initial memory size of {initial_size} exceeds the pooling allocator's \
32 configured maximum memory size of {base_capacity} bytes",
33 );
34 }
35
36 let base_capacity = match maximum_size {
38 Some(max) if max < base_capacity => max,
39 _ => base_capacity,
40 };
41
42 Ok(Self {
43 base,
44 capacity: base_capacity,
45 size: initial_size,
46 })
47 }
48}
49
50impl RuntimeLinearMemory for StaticMemory {
51 fn byte_size(&self) -> usize {
52 self.size
53 }
54
55 fn byte_capacity(&self) -> usize {
56 self.capacity
57 }
58
59 fn grow_to(&mut self, new_byte_size: usize) -> Result<()> {
60 assert!(new_byte_size <= self.capacity);
63
64 self.size = new_byte_size;
66 Ok(())
67 }
68
69 fn set_byte_size(&mut self, len: usize) {
70 self.size = len;
71 }
72
73 fn base(&self) -> MemoryBase {
74 self.base.clone()
75 }
76
77 fn vmmemory(&self) -> crate::vm::VMMemoryDefinition {
78 crate::vm::VMMemoryDefinition {
79 base: self.base.as_non_null().into(),
80 current_length: self.size.into(),
81 }
82 }
83}