range_set_blaze/
integer.rs1#[cfg(feature = "from_slice")]
2use crate::{from_slice::FromSliceIter, RangeSetBlaze};
3use core::ops::RangeInclusive;
4
5#[cfg(feature = "from_slice")]
6const LANES: usize = 16;
7
8use crate::Integer;
9
10impl Integer for i8 {
11 #[cfg(target_pointer_width = "32")]
12 type SafeLen = usize;
13 #[cfg(target_pointer_width = "64")]
14 type SafeLen = usize;
15
16 #[cfg(feature = "from_slice")]
17 #[inline]
18 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
19 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
20 }
21
22 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
23 r.end().overflowing_sub(*r.start()).0 as u8 as <Self as Integer>::SafeLen + 1
24 }
25 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
26 len as f64
27 }
28 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
29 f as Self::SafeLen
30 }
31 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
32 a + (b - 1) as Self
33 }
34 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
35 a - (b - 1) as Self
36 }
37}
38
39impl Integer for u8 {
40 #[cfg(target_pointer_width = "32")]
41 type SafeLen = usize;
42 #[cfg(target_pointer_width = "64")]
43 type SafeLen = usize;
44
45 #[cfg(feature = "from_slice")]
46 #[inline]
47 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
48 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
49 }
50
51 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
52 r.end().overflowing_sub(*r.start()).0 as <Self as Integer>::SafeLen + 1
53 }
54
55 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
56 len as f64
57 }
58 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
59 f as Self::SafeLen
60 }
61 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
62 a + (b - 1) as Self
63 }
64 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
65 a - (b - 1) as Self
66 }
67}
68
69impl Integer for i32 {
70 #[cfg(target_pointer_width = "32")]
71 type SafeLen = u64;
72 #[cfg(target_pointer_width = "64")]
73 type SafeLen = usize;
74
75 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
76 r.end().overflowing_sub(*r.start()).0 as u32 as <Self as Integer>::SafeLen + 1
77 }
78
79 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
80 len as f64
81 }
82 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
83 f as Self::SafeLen
84 }
85 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
86 a + (b - 1) as Self
87 }
88 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
89 a - (b - 1) as Self
90 }
91
92 #[cfg(feature = "from_slice")]
93 #[inline]
94 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
95 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
96 }
97}
98
99impl Integer for u32 {
100 #[cfg(target_pointer_width = "32")]
101 type SafeLen = u64;
102 #[cfg(target_pointer_width = "64")]
103 type SafeLen = usize;
104
105 #[cfg(feature = "from_slice")]
106 #[inline]
107 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
108 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
109 }
110
111 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
112 r.end().overflowing_sub(*r.start()).0 as <Self as Integer>::SafeLen + 1
113 }
114
115 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
116 len as f64
117 }
118 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
119 f as Self::SafeLen
120 }
121 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
122 a + (b - 1) as Self
123 }
124 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
125 a - (b - 1) as Self
126 }
127}
128
129impl Integer for i64 {
130 #[cfg(target_pointer_width = "32")]
131 type SafeLen = u128;
132 #[cfg(target_pointer_width = "64")]
133 type SafeLen = u128;
134
135 #[cfg(feature = "from_slice")]
136 #[inline]
137 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
138 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
139 }
140
141 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
142 r.end().overflowing_sub(*r.start()).0 as u64 as <Self as Integer>::SafeLen + 1
143 }
144 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
145 len as f64
146 }
147 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
148 f as Self::SafeLen
149 }
150 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
151 a + (b - 1) as Self
152 }
153 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
154 a - (b - 1) as Self
155 }
156}
157
158impl Integer for u64 {
159 #[cfg(target_pointer_width = "32")]
160 type SafeLen = u128;
161 #[cfg(target_pointer_width = "64")]
162 type SafeLen = u128;
163
164 #[cfg(feature = "from_slice")]
165 #[inline]
166 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
167 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
168 }
169
170 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
171 r.end().overflowing_sub(*r.start()).0 as <Self as Integer>::SafeLen + 1
172 }
173 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
174 len as f64
175 }
176 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
177 f as Self::SafeLen
178 }
179 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
180 a + (b - 1) as Self
181 }
182 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
183 a - (b - 1) as Self
184 }
185}
186
187impl Integer for i128 {
188 #[cfg(target_pointer_width = "32")]
189 type SafeLen = u128;
190 #[cfg(target_pointer_width = "64")]
191 type SafeLen = u128;
192
193 #[cfg(feature = "from_slice")]
194 #[inline]
195 fn from_slice(slice: impl AsRef<[Self]>) -> crate::RangeSetBlaze<Self> {
196 return slice.as_ref().iter().collect();
197 }
198
199 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
200 r.end().overflowing_sub(*r.start()).0 as u128 as <Self as Integer>::SafeLen + 1
201 }
202 fn safe_max_value() -> Self {
203 Self::max_value() - 1
204 }
205
206 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
207 len as f64
208 }
209 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
210 f as Self::SafeLen
211 }
212 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
213 a + (b - 1) as Self
214 }
215 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
216 a - (b - 1) as Self
217 }
218}
219
220impl Integer for u128 {
221 #[cfg(target_pointer_width = "32")]
222 type SafeLen = u128;
223 #[cfg(target_pointer_width = "64")]
224 type SafeLen = u128;
225
226 #[cfg(feature = "from_slice")]
227 #[inline]
228 fn from_slice(slice: impl AsRef<[Self]>) -> crate::RangeSetBlaze<Self> {
229 return slice.as_ref().iter().collect();
230 }
231
232 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
233 r.end().overflowing_sub(*r.start()).0 as <Self as Integer>::SafeLen + 1
234 }
235 fn safe_max_value() -> Self {
236 Self::max_value() - 1
237 }
238 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
239 len as f64
240 }
241 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
242 f as Self::SafeLen
243 }
244 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
245 a + (b - 1) as Self
246 }
247 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
248 a - (b - 1) as Self
249 }
250}
251
252impl Integer for isize {
253 #[cfg(target_pointer_width = "32")]
254 type SafeLen = u64;
255 #[cfg(target_pointer_width = "64")]
256 type SafeLen = u128;
257
258 #[cfg(feature = "from_slice")]
259 #[inline]
260 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
261 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
262 }
263
264 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
265 r.end().overflowing_sub(*r.start()).0 as usize as <Self as Integer>::SafeLen + 1
266 }
267
268 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
269 len as f64
270 }
271 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
272 f as Self::SafeLen
273 }
274 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
275 a + (b - 1) as Self
276 }
277 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
278 a - (b - 1) as Self
279 }
280}
281
282impl Integer for usize {
283 #[cfg(target_pointer_width = "32")]
284 type SafeLen = u64;
285 #[cfg(target_pointer_width = "64")]
286 type SafeLen = u128;
287
288 #[cfg(feature = "from_slice")]
289 #[inline]
290 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
291 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
292 }
293
294 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
295 r.end().overflowing_sub(*r.start()).0 as <Self as Integer>::SafeLen + 1
296 }
297
298 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
299 len as f64
300 }
301 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
302 f as Self::SafeLen
303 }
304 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
305 a + (b - 1) as Self
306 }
307 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
308 a - (b - 1) as Self
309 }
310}
311
312impl Integer for i16 {
313 #[cfg(target_pointer_width = "32")]
314 type SafeLen = usize;
315 #[cfg(target_pointer_width = "64")]
316 type SafeLen = usize;
317
318 #[cfg(feature = "from_slice")]
319 #[inline]
320 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
321 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
322 }
323
324 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
325 r.end().overflowing_sub(*r.start()).0 as u16 as <Self as Integer>::SafeLen + 1
326 }
327
328 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
329 len as f64
330 }
331 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
332 f as Self::SafeLen
333 }
334 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
335 a + (b - 1) as Self
336 }
337 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
338 a - (b - 1) as Self
339 }
340}
341
342impl Integer for u16 {
343 #[cfg(target_pointer_width = "32")]
344 type SafeLen = usize;
345 #[cfg(target_pointer_width = "64")]
346 type SafeLen = usize;
347
348 #[cfg(feature = "from_slice")]
349 #[inline]
350 fn from_slice(slice: impl AsRef<[Self]>) -> RangeSetBlaze<Self> {
351 FromSliceIter::<Self, LANES>::new(slice.as_ref()).collect()
352 }
353
354 fn safe_len(r: &RangeInclusive<Self>) -> <Self as Integer>::SafeLen {
355 r.end().overflowing_sub(*r.start()).0 as <Self as Integer>::SafeLen + 1
356 }
357
358 fn safe_len_to_f64(len: Self::SafeLen) -> f64 {
359 len as f64
360 }
361 fn f64_to_safe_len(f: f64) -> Self::SafeLen {
362 f as Self::SafeLen
363 }
364 fn add_len_less_one(a: Self, b: Self::SafeLen) -> Self {
365 a + (b - 1) as Self
366 }
367 fn sub_len_less_one(a: Self, b: Self::SafeLen) -> Self {
368 a - (b - 1) as Self
369 }
370}