#[inline]
pub fn write_u16(buf: &mut Vec<u8>, value: u16) {
buf.extend_from_slice(&value.to_le_bytes());
}
#[inline]
pub fn write_u32(buf: &mut Vec<u8>, value: u32) {
buf.extend_from_slice(&value.to_le_bytes());
}
#[inline]
pub fn write_u64(buf: &mut Vec<u8>, value: u64) {
buf.extend_from_slice(&value.to_le_bytes());
}
#[inline]
pub fn write_f64(buf: &mut Vec<u8>, value: f64) {
buf.extend_from_slice(&value.to_le_bytes());
}
#[inline]
pub fn write_i32(buf: &mut Vec<u8>, value: i32) {
buf.extend_from_slice(&value.to_le_bytes());
}
#[inline]
pub fn align4(buf: &mut Vec<u8>) {
while !buf.len().is_multiple_of(4) {
buf.push(0);
}
}
#[inline]
pub fn write_byte_vector(buf: &mut Vec<u8>, data: &[u8]) -> usize {
let start = buf.len();
write_u32(buf, data.len() as u32);
buf.extend_from_slice(data);
start
}
#[inline]
pub fn write_string(buf: &mut Vec<u8>, s: &str) -> usize {
let start = buf.len();
write_u32(buf, s.len() as u32);
buf.extend_from_slice(s.as_bytes());
buf.push(0); start
}
#[inline]
pub fn patch_offset(buf: &mut [u8], offset_pos: usize, target: usize) {
let rel = (target - offset_pos) as u32;
buf[offset_pos..offset_pos + 4].copy_from_slice(&rel.to_le_bytes());
}