arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/poulpy-schemes/src/tfhe/bdd_arithmetic/circuits/u32/or_codegen.rs
poulpy-schemes/src/tfhe/bdd_arithmetic/circuits/u32/or_codegen.rsRaw
 1use crate::tfhe::bdd_arithmetic::{BitCircuit, BitCircuitInfo, Circuit, GetBitCircuitInfo, Node};
 2pub(crate) enum AnyBitCircuit {
 3    B0(BitCircuit<3, 2>),
 4}
 5
 6impl BitCircuitInfo for AnyBitCircuit {
 7    fn info(&self) -> (&[Node], &[usize], usize) {
 8        match self {
 9            AnyBitCircuit::B0(bit_circuit) => (
10                bit_circuit.nodes.as_ref(),
11                bit_circuit.levels.as_ref(),
12                bit_circuit.max_inter_state,
13            ),
14        }
15    }
16}
17
18impl GetBitCircuitInfo<u32> for Circuit<AnyBitCircuit, 1usize> {
19    fn input_size(&self) -> usize {
20        2 * u32::BITS as usize
21    }
22    fn output_size(&self) -> usize {
23        u32::BITS as usize
24    }
25    fn get_circuit(&self, _bit: usize) -> (&[Node], &[usize], usize) {
26        self.0[0].info()
27    }
28}
29
30pub(crate) static OUTPUT_CIRCUITS: Circuit<AnyBitCircuit, 1usize> = Circuit([AnyBitCircuit::B0(BitCircuit::new(
31    [Node::new(0, 0, 0), Node::new(1, 1, 0), Node::new(0, 1, 1)],
32    [0, 2],
33    2,
34))]);