use std::io::{
Result,
Write,
};
use crate::util::UncheckedSlice;
pub trait WriteExt: Write {
#[inline(always)]
unsafe fn write_unchecked(
&mut self,
buffer: &[u8],
start_index: usize,
count: usize,
) -> Result<usize> {
debug_assert!(
UncheckedSlice::range_fits(buffer.len(), start_index, count),
"unchecked write range exceeds buffer"
);
let source =
unsafe { UncheckedSlice::subslice(buffer, start_index, count) };
self.write(source)
}
#[inline(always)]
unsafe fn write_all_unchecked(
&mut self,
buffer: &[u8],
start_index: usize,
count: usize,
) -> Result<()> {
debug_assert!(
UncheckedSlice::range_fits(buffer.len(), start_index, count),
"unchecked write range exceeds buffer"
);
let source =
unsafe { UncheckedSlice::subslice(buffer, start_index, count) };
self.write_all(source)
}
}
impl<T> WriteExt for T where T: Write + ?Sized {}