add_carry

Function add_carry 

Source
fn add_carry(carry: bool, lhs: u64, rhs: u64, out: &mut u64) -> bool
Examples 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}