fn add_carry(carry: bool, lhs: u64, rhs: u64, out: &mut u64) -> boolExamples found in repository?
crates/competitive/src/num/decimal/addsub.rs (line 29)
17fn add_absolute_parts(lhs: &mut Decimal, rhs: &Decimal) {
18 let mut carry = false;
19
20 // decimal part
21 let lhs_decimal_len = lhs.decimal.len();
22 if lhs_decimal_len < rhs.decimal.len() {
23 for (l, r) in lhs
24 .decimal
25 .iter_mut()
26 .rev()
27 .zip(rhs.decimal[..lhs_decimal_len].iter().rev())
28 {
29 carry = add_carry(carry, *l, *r, l);
30 }
31 lhs.decimal
32 .extend_from_slice(&rhs.decimal[lhs_decimal_len..]);
33 } else {
34 for (l, r) in lhs.decimal[..rhs.decimal.len()]
35 .iter_mut()
36 .rev()
37 .zip(rhs.decimal.iter().rev())
38 {
39 carry = add_carry(carry, *l, *r, l);
40 }
41 }
42
43 // integer part
44 let lhs_integer_len = lhs.integer.len();
45 if lhs_integer_len < rhs.integer.len() {
46 for (l, r) in lhs.integer.iter_mut().zip(&rhs.integer[..lhs_integer_len]) {
47 carry = add_carry(carry, *l, *r, l);
48 }
49 lhs.integer
50 .extend_from_slice(&rhs.integer[lhs_integer_len..]);
51 if carry {
52 for l in lhs.integer[lhs_integer_len..].iter_mut() {
53 carry = add_carry(carry, *l, 0, l);
54 if !carry {
55 break;
56 }
57 }
58 }
59 } else {
60 for (l, r) in lhs.integer.iter_mut().zip(&rhs.integer) {
61 carry = add_carry(carry, *l, *r, l);
62 }
63 if carry {
64 for l in lhs.integer[rhs.integer.len()..].iter_mut() {
65 carry = add_carry(carry, *l, 0, l);
66 if !carry {
67 break;
68 }
69 }
70 }
71 }
72
73 if carry {
74 lhs.integer.push(carry as u64);
75 }
76
77 lhs.normalize();
78}