use std::collections::HashMap; pub struct Program { data: Vec, ro_map: HashMap, } impl Program { pub fn new(data: HashMap>) -> Self { let mut ro_data = Vec::new(); let mut ro_map = HashMap::new(); for (key, val) in data { ro_map.insert(key, ro_data.len()); ro_data.extend(val); } Self { data: ro_data, ro_map, } } } pub fn create_program( ro_data: HashMap>, functions: Vec>, ) -> Vec { let mut data = Vec::new(); let mut ro_map = HashMap::new(); for (key, val) in ro_data { ro_map.insert(key, data.len()); data.extend(val); } // let mut fn_map = HashMap::new(); for fun in functions { for i in fun.instructions { data.extend(i.to_le_bytes()); } } data } pub struct Function { label: String, instructions: Vec, } pub trait Instr { fn to_le_bytes(&self) -> impl IntoIterator; } struct SymbolInstr { i: usize }