1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
use std::fmt::Debug;

use crate::machine::register::MachineRegister;

/// If your machine produces output, it should send this to an OutputReceiver.
pub trait OutputReceiver<T: MachineRegister>: Debug {
    /// Receive some output. Returns a boolean (up to the implementer on how to interpret this).
    fn receive(&mut self, output: i64, register: &T) -> bool;
}

/// If your machine does not produce output, you can use this implementation.
#[derive(Debug)]
pub struct NoopOutputReceiver;

impl<T: MachineRegister> OutputReceiver<T> for NoopOutputReceiver {
    fn receive(&mut self, _output: i64, _register: &T) -> bool {
        false
    }
}