multiversx_sc/types/managed/wrapped/managed_decimal/
managed_decimal_op_add_signed.rs1use crate::{
2 api::ManagedTypeApi,
3 typenum::Unsigned,
4 types::{ConstDecimals, Decimals, ManagedDecimalSigned, NumDecimals},
5};
6
7use core::ops::{Add, AddAssign};
8
9impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> AddAssign<&ManagedDecimalSigned<M, D2>>
10 for ManagedDecimalSigned<M, D1>
11{
12 fn add_assign(&mut self, rhs: &ManagedDecimalSigned<M, D2>) {
13 let scaled_data = rhs.rescale_data(self.scale().num_decimals());
14 self.data += scaled_data;
15 }
16}
17
18impl<M: ManagedTypeApi, D1: Decimals, D2: Decimals> AddAssign<ManagedDecimalSigned<M, D2>>
19 for ManagedDecimalSigned<M, D1>
20{
21 #[inline]
22 fn add_assign(&mut self, rhs: ManagedDecimalSigned<M, D2>) {
23 self.add_assign(&rhs);
24 }
25}
26
27impl<M: ManagedTypeApi, DECIMALS: Unsigned> Add<ManagedDecimalSigned<M, ConstDecimals<DECIMALS>>>
29 for ManagedDecimalSigned<M, ConstDecimals<DECIMALS>>
30{
31 type Output = Self;
32
33 fn add(mut self, rhs: ManagedDecimalSigned<M, ConstDecimals<DECIMALS>>) -> Self::Output {
34 self.data += rhs.data;
35 self
36 }
37}
38
39impl<M: ManagedTypeApi> Add<ManagedDecimalSigned<M, NumDecimals>>
41 for ManagedDecimalSigned<M, NumDecimals>
42{
43 type Output = Self;
44
45 fn add(mut self, rhs: ManagedDecimalSigned<M, NumDecimals>) -> Self::Output {
46 match self.decimals.cmp(&rhs.decimals) {
47 core::cmp::Ordering::Less => {
48 self = self.rescale(rhs.decimals);
49 self.data += rhs.data;
50 }
51 core::cmp::Ordering::Equal => self.data += rhs.data,
52 core::cmp::Ordering::Greater => {
53 let rhs_data = rhs.rescale_data(self.decimals);
54 self.data += rhs_data;
55 }
56 }
57 self
58 }
59}
60
61impl<DECIMALS: Unsigned, M: ManagedTypeApi> Add<ManagedDecimalSigned<M, ConstDecimals<DECIMALS>>>
63 for ManagedDecimalSigned<M, NumDecimals>
64{
65 type Output = ManagedDecimalSigned<M, NumDecimals>;
66
67 fn add(self, rhs: ManagedDecimalSigned<M, ConstDecimals<DECIMALS>>) -> Self::Output {
68 self + rhs.into_var_decimals()
69 }
70}
71
72impl<DECIMALS: Unsigned, M: ManagedTypeApi> Add<ManagedDecimalSigned<M, NumDecimals>>
74 for ManagedDecimalSigned<M, ConstDecimals<DECIMALS>>
75{
76 type Output = ManagedDecimalSigned<M, NumDecimals>;
77
78 fn add(self, rhs: ManagedDecimalSigned<M, NumDecimals>) -> Self::Output {
79 self.into_var_decimals() + rhs
80 }
81}