prjunnamed_netlist/cell/
io_buffer.rs

1use crate::{ControlNet, IoValue, Net, Value};
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash)]
4pub struct IoBuffer {
5    pub io: IoValue,
6    pub output: Value,
7    pub enable: ControlNet,
8}
9
10impl IoBuffer {
11    pub fn output_len(&self) -> usize {
12        self.io.len()
13    }
14
15    pub fn slice(&self, range: impl std::ops::RangeBounds<usize> + Clone) -> IoBuffer {
16        IoBuffer { io: self.io.slice(range.clone()), output: self.output.slice(range.clone()), enable: self.enable }
17    }
18
19    pub fn visit(&self, mut f: impl FnMut(Net)) {
20        self.output.visit(&mut f);
21        self.enable.visit(&mut f);
22    }
23
24    pub fn visit_mut(&mut self, mut f: impl FnMut(&mut Net)) {
25        self.output.visit_mut(&mut f);
26        self.enable.visit_mut(&mut f);
27    }
28}