-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfull_adder.rs
36 lines (32 loc) · 1.01 KB
/
full_adder.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use crate::model::adder::half_adder::HalfAdder;
use crate::model::gates::or_gate::OrGate;
use crate::model::adder::AdderResult;
use crate::model::gates::Gate;
// Declare FullAdder struct
pub struct FullAdder {
half_adder: HalfAdder,
or_gate: OrGate,
}
// Implement the previously declared FullAdder struct
impl FullAdder {
// Returns a new FullAdder object
pub fn new() -> FullAdder {
return FullAdder {
half_adder: HalfAdder::new(),
or_gate: OrGate {},
};
}
// Calculates the result of parameter a, b and c
pub fn calc(&self, a: bool, b: bool, c: bool) -> AdderResult {
// Calculate first result
let res_1 = self.half_adder.calc(a, b);
// Calculate second result
let res_2 = self.half_adder.calc(res_1.sum, c);
// Return the result
return AdderResult {
sum: res_2.sum,
// Set carry to or(carry1, carry2)
carry: self.or_gate.calc(res_2.carry, res_1.carry),
};
}
}