scsys_crypto/hash/h256/
impl_ops.rs1use super::H256;
6
7impl core::ops::Add<Self> for H256 {
8 type Output = Self;
9
10 fn add(self, rhs: Self) -> Self {
11 let mut result_bytes = [0; 32];
12 for n in 1..9 {
13 let results: [u8; 4] = {
14 let val = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
15 let rhs = u32::from_be_bytes(rhs.0[4 * (n - 1)..4 * n].try_into().unwrap());
16 let tmp = ((val as u64) + (rhs as u64)) as u32;
17 tmp.to_be_bytes()
18 };
19 result_bytes[4 * (n - 1)] = results[0];
20 result_bytes[4 * (n - 1) + 1] = results[1];
21 result_bytes[4 * (n - 1) + 2] = results[2];
22 result_bytes[4 * (n - 1) + 3] = results[3];
23 }
24 Self(result_bytes)
25 }
26}
27
28impl core::ops::AddAssign<Self> for H256 {
29 fn add_assign(&mut self, rhs: Self) {
30 for n in 1..9 {
31 let results: [u8; 4] = {
32 let val = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
33 let rhs = u32::from_be_bytes(rhs.0[4 * (n - 1)..4 * n].try_into().unwrap());
34 let tmp = ((val as u64) + (rhs as u64)) as u32;
35 tmp.to_be_bytes()
36 };
37 self[4 * (n - 1)] = results[0];
38 self[4 * (n - 1) + 1] = results[1];
39 self[4 * (n - 1) + 2] = results[2];
40 self[4 * (n - 1) + 3] = results[3];
41 }
42 }
43}
44
45impl core::ops::Add<f64> for H256 {
46 type Output = Self;
47
48 fn add(self, rhs: f64) -> Self {
49 let mut result_bytes = [0; 32];
50 for n in 1..9 {
51 let results: [u8; 4] = {
52 let v = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
53 let tmp = ((v as f64) + rhs) as u32;
54 tmp.to_be_bytes()
55 };
56 result_bytes[4 * (n - 1)] = results[0];
57 result_bytes[4 * (n - 1) + 1] = results[1];
58 result_bytes[4 * (n - 1) + 2] = results[2];
59 result_bytes[4 * (n - 1) + 3] = results[3];
60 }
61 Self(result_bytes)
62 }
63}
64
65impl core::ops::AddAssign<f64> for H256 {
66 fn add_assign(&mut self, rhs: f64) {
67 for n in 1..9 {
68 let results: [u8; 4] = {
69 let v = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
70 let tmp = ((v as f64) + rhs) as u32;
71 tmp.to_be_bytes()
72 };
73 self[4 * (n - 1)] = results[0];
74 self[4 * (n - 1) + 1] = results[1];
75 self[4 * (n - 1) + 2] = results[2];
76 self[4 * (n - 1) + 3] = results[3];
77 }
78 }
79}
80
81impl core::ops::Div<f64> for H256 {
82 type Output = Self;
83
84 fn div(self, rhs: f64) -> Self {
85 let mut result_bytes = [0; 32];
86 for n in 1..9 {
87 let results: [u8; 4] = {
88 let v = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
89 let tmp = ((v as f64) / rhs) as u32;
90 tmp.to_be_bytes()
91 };
92 result_bytes[4 * (n - 1)] = results[0];
93 result_bytes[4 * (n - 1) + 1] = results[1];
94 result_bytes[4 * (n - 1) + 2] = results[2];
95 result_bytes[4 * (n - 1) + 3] = results[3];
96 }
97 Self(result_bytes)
98 }
99}
100
101impl core::ops::DivAssign<f64> for H256 {
102 fn div_assign(&mut self, rhs: f64) {
103 for n in 1..9 {
104 let results: [u8; 4] = {
105 let v = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
106 let tmp = ((v as f64) / rhs) as u32;
107 tmp.to_be_bytes()
108 };
109 self[4 * (n - 1)] = results[0];
110 self[4 * (n - 1) + 1] = results[1];
111 self[4 * (n - 1) + 2] = results[2];
112 self[4 * (n - 1) + 3] = results[3];
113 }
114 }
115}
116
117impl core::ops::Mul<f64> for H256 {
118 type Output = Self;
119
120 fn mul(self, rhs: f64) -> Self {
121 let mut result_bytes = [0; 32];
122 for n in 1..9 {
123 let results: [u8; 4] = {
124 let v = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
125 let tmp = ((v as f64) * rhs) as u32;
126 tmp.to_be_bytes()
127 };
128 result_bytes[4 * (n - 1)] = results[0];
129 result_bytes[4 * (n - 1) + 1] = results[1];
130 result_bytes[4 * (n - 1) + 2] = results[2];
131 result_bytes[4 * (n - 1) + 3] = results[3];
132 }
133 Self(result_bytes)
134 }
135}
136
137impl core::ops::MulAssign<f64> for H256 {
138 fn mul_assign(&mut self, rhs: f64) {
139 for n in 1..9 {
140 let results: [u8; 4] = {
141 let v = u32::from_be_bytes(self.0[4 * (n - 1)..4 * n].try_into().unwrap());
142 let tmp = ((v as f64) * rhs) as u32;
143 tmp.to_be_bytes()
144 };
145 self[4 * (n - 1)] = results[0];
146 self[4 * (n - 1) + 1] = results[1];
147 self[4 * (n - 1) + 2] = results[2];
148 self[4 * (n - 1) + 3] = results[3];
149 }
150 }
151}
152
153impl core::ops::Index<usize> for H256 {
154 type Output = u8;
155
156 fn index(&self, index: usize) -> &Self::Output {
157 &self.0[index]
158 }
159}
160
161impl core::ops::IndexMut<usize> for H256 {
162 fn index_mut(&mut self, index: usize) -> &mut Self::Output {
163 &mut self.0[index]
164 }
165}
166
167impl core::ops::Index<core::ops::Range<usize>> for H256 {
168 type Output = [u8];
169
170 fn index(&self, index: core::ops::Range<usize>) -> &Self::Output {
171 &self.0[index]
172 }
173}
174
175impl core::ops::IndexMut<core::ops::Range<usize>> for H256 {
176 fn index_mut(&mut self, index: core::ops::Range<usize>) -> &mut Self::Output {
177 &mut self.0[index]
178 }
179}