Files
RustIJVM/src/ijvmreader.rs

56 lines
1.2 KiB
Rust

use std::io::Read;
use std::fs::File;
use Result;
use 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
})
}
pub fn new_from_slice(source: &[u8]) -> IJVMReader {
IJVMReader {
pointer: 0,
source: source.to_vec(),
}
}
}
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;
Ok(byte)
}
fn cur(&self) -> usize {
self.pointer
}
fn len(&self) -> usize {
self.source.len()
}
fn slice(&mut self, len: usize) -> &[u8] {
let slice = &self.source[self.pointer..self.pointer+len];
self.pointer += len;
slice
}
}