use std::io::Read; use std::fs::File; use ijvm::Result; use ijvm::binread::BinReadable; pub struct IJVMReader { pointer: usize, source: Vec } impl IJVMReader { pub fn new(path: &str) -> Result { let file = match File::open(path) { Ok(file) => file, Err(_) => return Err("Could not open file"), }; let abc: Vec = file.bytes().map(|e| e.unwrap()).collect(); Ok(IJVMReader { pointer: 0, source: abc }) } } impl BinReadable for IJVMReader { fn get(&mut self) -> Result { if self.pointer >= self.source.len() { return Err("EOF reached") } let byte = self.source[self.pointer]; self.pointer += 1; return Ok(byte) } fn len(&self) -> usize { return self.source.len() } fn cur(&self) -> usize { return self.pointer; } fn slice(&mut self, len: usize) -> &[u8] { let slice = &self.source[self.pointer..self.pointer+len]; self.pointer += len; slice } }