wasmi/src/memory/vec_bytebuf.rs

40 lines
798 B
Rust
Raw Normal View History

2019-07-02 19:08:22 +00:00
//! An implementation of `ByteBuf` based on a plain `Vec`.
use alloc::prelude::v1::*;
pub struct ByteBuf {
buf: Vec<u8>,
}
impl ByteBuf {
2019-07-03 12:00:02 +00:00
pub fn new(len: usize) -> Result<Self, &'static str> {
2019-07-02 19:08:22 +00:00
let mut buf = Vec::new();
buf.resize(len, 0u8);
2019-07-03 12:00:02 +00:00
Ok(Self { buf })
2019-07-02 19:08:22 +00:00
}
2019-07-03 12:00:02 +00:00
pub fn realloc(&mut self, new_len: usize) -> Result<(), &'static str> {
2019-07-02 19:08:22 +00:00
self.buf.resize(new_len, 0u8);
2019-07-03 12:00:02 +00:00
Ok(())
2019-07-02 19:08:22 +00:00
}
pub fn len(&self) -> usize {
self.buf.len()
}
pub fn as_slice(&self) -> &[u8] {
self.buf.as_ref()
}
pub fn as_slice_mut(&mut self) -> &mut [u8] {
self.buf.as_mut()
}
2019-07-03 12:00:02 +00:00
pub fn erase(&mut self) -> Result<(), &'static str> {
for v in &mut self.buf {
*v = 0;
}
Ok(())
}
2019-07-02 19:08:22 +00:00
}