mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 23:04:49 +00:00
Types section
This commit is contained in:
parent
6ab00d164c
commit
7ad452d78a
4 changed files with 293 additions and 44 deletions
|
@ -71,6 +71,7 @@ macro_rules! encode_padded_sleb128 {
|
|||
|
||||
pub trait SerialBuffer {
|
||||
fn append_byte(&mut self, b: u8);
|
||||
fn set_byte(&mut self, index: usize, b: u8);
|
||||
fn append_slice(&mut self, b: &[u8]);
|
||||
fn size(&self) -> usize;
|
||||
|
||||
|
@ -79,6 +80,8 @@ pub trait SerialBuffer {
|
|||
encode_sleb128!(encode_i32, i32);
|
||||
encode_sleb128!(encode_i64, i64);
|
||||
|
||||
/// Inserts extra entries at the given index by copying the following entries to higher indices
|
||||
fn insert_space_at(&mut self, index: usize, size: usize);
|
||||
fn reserve_padded_u32(&mut self) -> usize;
|
||||
fn encode_padded_u32(&mut self, value: u32) -> usize;
|
||||
fn overwrite_padded_u32(&mut self, index: usize, value: u32);
|
||||
|
@ -122,12 +125,20 @@ impl SerialBuffer for std::vec::Vec<u8> {
|
|||
fn append_byte(&mut self, b: u8) {
|
||||
self.push(b);
|
||||
}
|
||||
fn set_byte(&mut self, index: usize, b: u8) {
|
||||
self[index] = b;
|
||||
}
|
||||
fn append_slice(&mut self, b: &[u8]) {
|
||||
self.extend_from_slice(b);
|
||||
}
|
||||
fn size(&self) -> usize {
|
||||
self.len()
|
||||
}
|
||||
fn insert_space_at(&mut self, index: usize, size: usize) {
|
||||
let old_len = self.len();
|
||||
self.resize(old_len + size, 0);
|
||||
self.copy_within(index..old_len, index + size);
|
||||
}
|
||||
fn reserve_padded_u32(&mut self) -> usize {
|
||||
let index = self.len();
|
||||
self.resize(index + 5, 0xff);
|
||||
|
@ -149,12 +160,20 @@ impl<'a> SerialBuffer for Vec<'a, u8> {
|
|||
fn append_byte(&mut self, b: u8) {
|
||||
self.push(b);
|
||||
}
|
||||
fn set_byte(&mut self, index: usize, b: u8) {
|
||||
self[index] = b;
|
||||
}
|
||||
fn append_slice(&mut self, b: &[u8]) {
|
||||
self.extend_from_slice(b);
|
||||
}
|
||||
fn size(&self) -> usize {
|
||||
self.len()
|
||||
}
|
||||
fn insert_space_at(&mut self, index: usize, size: usize) {
|
||||
let old_len = self.len();
|
||||
self.resize(old_len + size, 0);
|
||||
self.copy_within(index..old_len, index + size);
|
||||
}
|
||||
fn reserve_padded_u32(&mut self) -> usize {
|
||||
let index = self.len();
|
||||
self.resize(index + 5, 0xff);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue