Passing all tests i guess

This commit is contained in:
2017-06-06 14:19:35 +02:00
commit 1b3c582ee2
13 changed files with 699 additions and 0 deletions

48
src/ijvm/ijvmreader.rs Normal file
View 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
}
}