Passing all tests i guess
This commit is contained in:
48
src/ijvm/ijvmreader.rs
Normal file
48
src/ijvm/ijvmreader.rs
Normal file
@@ -0,0 +1,48 @@
|
||||
use std::io::Read;
|
||||
use std::fs::File;
|
||||
use ijvm::Result;
|
||||
use ijvm::binread::BinReadable;
|
||||
|
||||
pub struct IJVMReader {
|
||||
pointer: usize,
|
||||
source: Vec<u8>
|
||||
}
|
||||
|
||||
impl IJVMReader {
|
||||
pub fn new(path: &str) -> Result<IJVMReader> {
|
||||
let file = match File::open(path) {
|
||||
Ok(file) => file,
|
||||
Err(_) => return Err("Could not open file"),
|
||||
};
|
||||
let abc: Vec<u8> = file.bytes().map(|e| e.unwrap()).collect();
|
||||
Ok(IJVMReader {
|
||||
pointer: 0,
|
||||
source: abc
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl BinReadable for IJVMReader {
|
||||
fn get(&mut self) -> Result<u8> {
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user