pub struct Data { /* private fields */ }Expand description
The initial contents of a memory are zero bytes. Data segments can be used to initialize a range of memory from a static vector of bytes. Like element segments, data segments have a mode that identifies them as either passive or active. A passive data segment’s contents can be copied into a memory using the 𝗆𝖾𝗆𝗈𝗋𝗒.𝗂𝗇𝗂𝗍 instruction. An active data segment copies its contents into a memory during instantiation, as specified by a memory index and a constant expression defining an offset into that memory. Data segments are referenced through data indices.
See https://webassembly.github.io/spec/core/syntax/modules.html#data-segments
§Examples
§Passive
use wasm_ast::{Data, DataMode};
let initializer = vec![42];
let data = Data::passive(initializer.clone());
assert_eq!(data, Data::new(DataMode::Passive, initializer.clone()));
assert_eq!(data, initializer.into());
assert_eq!(data.mode(), &DataMode::Passive);
assert_eq!(data.len(), 1);
assert_eq!(data.is_empty(), false);§Active
use wasm_ast::{Data, DataMode, MemoryIndex, Expression};
let initializer = vec![42];
let offset: Expression = vec![1u32.into()].into();
let data = Data::active(0, offset.clone(), initializer.clone());
assert_eq!(data, Data::new(DataMode::Active(0, offset.clone()), initializer.clone()));
assert_eq!(data.mode(), &DataMode::Active(0, offset));
assert_eq!(data.len(), 1);
assert_eq!(data.is_empty(), false);Implementations§
Source§impl Data
impl Data
Sourcepub fn new(mode: DataMode, initializer: Vec<u8>) -> Self
pub fn new(mode: DataMode, initializer: Vec<u8>) -> Self
Creates an instance of a data segment.
Sourcepub fn active(
memory: MemoryIndex,
offset: Expression,
initializer: Vec<u8>,
) -> Self
pub fn active( memory: MemoryIndex, offset: Expression, initializer: Vec<u8>, ) -> Self
Creates an instance of an active data segment.
Sourcepub fn initializer(&self) -> &[u8] ⓘ
pub fn initializer(&self) -> &[u8] ⓘ
The data to initialize the segment with.