|
|
@ -1,50 +1,46 @@ |
|
|
|
use super::{Value, IntCode}; |
|
|
|
use std::io; |
|
|
|
use super::{Value, IntCode, IntCodeIO}; |
|
|
|
|
|
|
|
pub fn add(intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
pub fn add<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
intcode.write(argv[2].address.unwrap(), argv[0].value + argv[1].value); |
|
|
|
} |
|
|
|
|
|
|
|
pub fn mul(intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
pub fn mul<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
intcode.write(argv[2].address.unwrap(), argv[0].value * argv[1].value); |
|
|
|
} |
|
|
|
|
|
|
|
pub fn exit(intcode: &mut IntCode, _argv: &Vec<Value>) { |
|
|
|
pub fn exit<I: IntCodeIO>(intcode: &mut IntCode<I>, _argv: &Vec<Value>) { |
|
|
|
intcode.terminate(); |
|
|
|
} |
|
|
|
|
|
|
|
pub fn cin(intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
let mut value = String::new(); |
|
|
|
let _ = io::stdin() |
|
|
|
.read_line(&mut value) |
|
|
|
.expect("Unable to read stdin"); |
|
|
|
intcode.write(argv[0].address.unwrap(), value.trim().parse().unwrap()); |
|
|
|
pub fn cin<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
let value = intcode.io.get(); |
|
|
|
intcode.write(argv[0].address.unwrap(), value); |
|
|
|
} |
|
|
|
|
|
|
|
pub fn cout(_intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
println!("{}", argv[0].value); |
|
|
|
pub fn cout<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
intcode.io.put(argv[0].value) |
|
|
|
} |
|
|
|
|
|
|
|
pub fn jump_if_true(intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
pub fn jump_if_true<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
if argv[0].value != 0 { |
|
|
|
intcode.jump(argv[1].value as usize) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
pub fn jump_if_false(intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
pub fn jump_if_false<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
if argv[0].value == 0 { |
|
|
|
intcode.jump(argv[1].value as usize) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
pub fn lt(intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
pub fn lt<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
intcode.write( |
|
|
|
argv[2].address.unwrap(), |
|
|
|
if argv[0].value < argv[1].value { 1 } else { 0 } |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
pub fn eq(intcode: &mut IntCode, argv: &Vec<Value>) { |
|
|
|
pub fn eq<I: IntCodeIO>(intcode: &mut IntCode<I>, argv: &Vec<Value>) { |
|
|
|
intcode.write( |
|
|
|
argv[2].address.unwrap(), |
|
|
|
if argv[0].value == argv[1].value { 1 } else { 0 } |
|
|
|