logic_gate 0.4.0

Logic Gates
Documentation
use super::{And3Way, Not, Or, Signal};
pub struct Mux4Way;

impl Mux4Way {
    pub fn send_signal(
        a: &Signal,
        b: &Signal,
        c: &Signal,
        d: &Signal,
        s0: &Signal,
        s1: &Signal,
    ) -> Signal {
        let s0i = &Not::send_signal(s0);
        let s1i = &Not::send_signal(s1);

        Or::send_signal(
            &Or::send_signal(
                &And3Way::send_signal(s0i, a, s1i),
                &And3Way::send_signal(s0, b, s1i),
            ),
            &Or::send_signal(
                &And3Way::send_signal(s0i, c, s1),
                &And3Way::send_signal(s0, d, s1),
            ),
        )
    }
}