use crate::Machine;

use std::fs;
use std::io;
use std::io::BufRead;



	/// Load a file into a new machine
	/// 
	/// `panic!` when size is not 1, 2, 4 or 8
    /// `panic!` when the text does not represents instructions in hexadecimal
	/// 
	/// ### Parameters
	/// 
	/// - **path** the path of the file to load
	/// - **size** the number of bytes to write (1, 2, 4 or 8)
pub fn _load(path : &str, instruction_size: i32) -> Machine {
    let file = fs::File::open(path).expect("Wrong filename");
    let reader = io::BufReader::new(file);
    let mut machine = Machine::_init_machine();

    for (i,line) in reader.lines().enumerate() {
        let res = u64::from_str_radix(&line.unwrap(), 16);
        match res {
            Ok(value) => {
                Machine::write_memory(&mut machine, instruction_size, i*instruction_size as usize, value);
            },
            _ => panic!()
        }
    }
    println!("{:x}", Machine::read_memory(& mut machine, 4, 0));
    machine
}