eirc 0.0.0

Event-based/Extensible Internet Relay Chat library.
Documentation
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
  }
}