use super::super::line::IrcLineBuilder;
pub struct UnparsedLineEvent<'a> {
linebuilder: IrcLineBuilder,
bytes: &'a mut [u8],
start: usize,
end: usize
}
impl<'a> UnparsedLineEvent<'a> {
pub fn new(bytes: &'a mut [u8]) -> UnparsedLineEvent<'a> {
let len = bytes.len();
UnparsedLineEvent {
linebuilder: IrcLineBuilder::new(),
bytes: bytes,
start: 0,
end: len
}
}
#[inline]
pub fn get_bytes(&self) -> &[u8] {
&self.bytes[self.start..self.end]
}
#[inline]
pub fn mut_bytes(&mut self) -> &mut [u8] {
&mut self.bytes[self.start..self.end]
}
#[inline]
pub fn resize_bytes(&mut self, start: usize, end: usize) {
if end > self.end - self.start {
panic!("attempt to grow slice")
}
if start > end {
panic!("start greater than end")
}
self.end = self.start + end;
self.start = self.start + start;
}
#[inline]
pub fn resize_start(&mut self, start: usize) {
if start > self.end - self.start {
panic!("start greater than size")
}
self.start = self.start + start;
}
#[inline]
pub fn resize_end(&mut self, end: usize) {
if end > self.end - self.start {
panic!("attempt to grow slice")
}
self.end = self.start + end;
}
#[inline]
pub fn get_line_builder(&self) -> &IrcLineBuilder {
&self.linebuilder
}
#[inline]
pub fn mut_line_builder(&mut self) -> &mut IrcLineBuilder {
&mut self.linebuilder
}
}