1use crate::{
2 builder::bytes,
3 builder::bytes::*,
4 byte,
5 bytecode::{
6 data::ByteData,
7 ops::ArgType::*,
8 ops::Operations::*,
9 ops::*,
10 types::Types::{self, *},
11 },
12 constant, emits,
13 engine::memory::Heap,
14 op, stream, typed,
15};
16use std::{fs::File, io::Read};
17
18
19
20pub struct Reader {
21 pos: usize,
22 file: File,
23 pub stream: Vec<u8>,
24 pub bytes: ByteStream,
25}
26
27impl Reader {
28 pub fn new(path: &str) -> Reader {
29 Reader {
30 pos: 0,
31 file: File::open(path).unwrap(),
32 stream: Vec::new(),
33 bytes: ByteStream::new(),
34 }
35 }
36 pub fn new_read(data: &Vec<u8>) -> Reader {
37 Reader {
38 pos: 0,
39 file: File::open("temp").unwrap_or(File::create("temp").unwrap()),
40 stream: data.clone(),
41 bytes: ByteStream::new(),
42 }
43 }
44 pub fn read(&mut self) -> () {
45 let mut data = Vec::new();
46 self.file.read_to_end(&mut data).unwrap();
47 self.stream = data;
48 }
49 pub fn group(&mut self) -> ByteStream {
50 while self.pos < self.stream.len() {
51 self.handle(self.stream[self.pos]);
52 self.pos += 1;
53 }
54 self.bytes.clone()
55 }
56 fn handle(&mut self, n: u8) {
58 let tp = Types::from(n);
59 self.next();
60 let arg = self.view() as u64;
61 let byte = Byte{
62 data: Box::new(arg),
63 pos: 0,
64 tp: tp,
65 };
66 self.bytes.emit(byte);
67 }
68 fn view(&self) -> u8 {
70 self.stream[self.pos]
71 }
72 fn next(&mut self) {
73 if self.pos + 1 >= self.stream.len() {
74 return;
75 }
76 self.pos += 1;
77 }
78 fn peek(&self) -> u8 {
79 self.stream[self.pos + 1]
80 }
81}