implement ReadStream

This commit is contained in:
mykola2312 2023-08-29 23:08:04 +03:00
parent 584d361095
commit 36a6140ca9
2 changed files with 45 additions and 3 deletions

View file

@ -1,6 +1,7 @@
mod raw;
mod decoder;
mod tag;
mod fstring;
mod raw;
pub mod save;
mod stream;
mod tag;
mod world;
pub mod save;

41
src/fot/stream.rs Normal file
View file

@ -0,0 +1,41 @@
use super::decoder::Decoder;
use super::raw::Raw;
use anyhow::Result;
use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt};
use std::io::Cursor;
pub struct ReadStream<'a> {
raw: &'a Raw,
rdr: Cursor<&'a [u8]>,
}
impl<'a> ReadStream<'a> {
fn new(raw: &Raw, offset: usize) -> ReadStream {
ReadStream {
raw: raw,
rdr: Cursor::new(&raw.mem[offset..]),
}
}
fn offset(&self) -> usize {
self.rdr.position() as usize
}
fn skip(&mut self, size: usize) {
self.rdr.set_position(self.rdr.position() + size as u64);
}
fn read<T: Decoder>(&mut self, size: usize) -> Result<T> {
let val = T::decode(&self.raw, self.offset(), size)?;
self.skip(val.get_enc_size());
Ok(val)
}
fn read_u16(&mut self) -> Result<u16> {
Ok(self.rdr.read_u16::<LittleEndian>()?)
}
fn read_u32(&mut self) -> Result<u32> {
Ok(self.rdr.read_u32::<LittleEndian>()?)
}
}