view src/util/mod.rs @ 640:37d151fe000b

Implement better defaults for Sprite, and a beginning of
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 04 Jul 2019 21:47:53 +0200
parents afa012bb8021
children 01849ffd0180
line wrap: on
line source

//! Module containing a bunch of helper modules.

pub mod bitstream;
pub mod lzss;

#[cfg(test)]
use std::io;

#[cfg(test)]
pub struct SeekableSlice<'a> {
    slice: &'a [u8],
    cursor: usize,
}

#[cfg(test)]
impl SeekableSlice<'_> {
    pub fn new(slice: &[u8]) -> SeekableSlice {
        SeekableSlice {
            slice,
            cursor: 0,
        }
    }
}

#[cfg(test)]
impl io::Read for SeekableSlice<'_> {
    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
        let length = (&self.slice[self.cursor..]).read(buf)?;
        self.cursor += length;
        Ok(length)
    }
}

#[cfg(test)]
impl io::Seek for SeekableSlice<'_> {
    fn seek(&mut self, seek_from: io::SeekFrom) -> io::Result<u64> {
        match seek_from {
            io::SeekFrom::Start(offset) => {
                self.cursor = offset as usize;
            }
            io::SeekFrom::End(offset) => {
                self.cursor = (self.slice.len() as i64 + offset) as usize;
            }
            io::SeekFrom::Current(offset) => {
                self.cursor = (self.cursor as i64 + offset) as usize;
            }
        }
        Ok(self.cursor as u64)
    }
}