flexpiler/common/reader/
buf_reader.rs1use std::fs::File;
3
4use crate::reader;
6
7
8pub struct BufReader {
9 buf_pointer: usize,
10 buf_len: usize,
11 buffer: [u8; 256],
12
13 buf_reader: std::io::BufReader<File>,
14}
15
16
17impl BufReader {
18 pub fn from_buf_reader(buf_reader: std::io::BufReader<File>) -> BufReader
19 {
20 BufReader {
21 buf_len: 0,
22 buf_pointer: 0,
23 buffer: [0; 256],
24
25 buf_reader,
26 }
27 }
28}
29
30
31impl From<std::io::BufReader<File>> for BufReader {
32 fn from(std_buf_reader: std::io::BufReader<File>) -> Self {
33 return Self::from_buf_reader(std_buf_reader);
34 }
35}
36
37impl reader::Trait for BufReader {
38 fn read(&mut self) -> reader::Result {
39 use std::io::Read;
40
41 if self.buf_pointer >= self.buf_len {
42 let result = self.buf_reader.read(&mut self.buffer);
43
44 match result {
45 Ok(len) => {
46 if len == 0 {
47 return reader::Result::EndOfFile;
48 }
49 self.buf_len = len;
50 self.buf_pointer = 0;
51 },
52 Err(error) => {
53 return reader::Result::Err(
54 reader::Error::StdIoError(error)
55 );
56 }
57 }
58 }
59
60 let byte = self.buffer[self.buf_pointer];
61 self.buf_pointer += 1;
62
63 print!("<{}, {}>", byte, byte as char);
64 return reader::Result::Ok(byte);
65 }
66}