/rust/registry/src/index.crates.io-6f17d22bba15001f/funty-2.0.0/src/lib.rs
Line | Count | Source (jump to first uncovered line) |
1 | | /*! `fun`damental `ty`pes |
2 | | |
3 | | This crate provides trait unification of the Rust fundamental items, allowing |
4 | | users to declare the behavior they want from a number without committing to a |
5 | | single particular numeric type. |
6 | | |
7 | | The number types can be categorized along two axes: behavior and width. Traits |
8 | | for each axis and group on that axis are provided: |
9 | | |
10 | | ## Numeric Categories |
11 | | |
12 | | The most general category is represented by the trait [`Numeric`]. It is |
13 | | implemented by all the numeric fundamentals, and includes only the traits that |
14 | | they all implement. This is an already-large amount: basic memory management, |
15 | | comparison, rendering, and numeric arithmetic. |
16 | | |
17 | | The numbers are then split into [`Floating`] and [`Integral`]. The former fills |
18 | | out the API of `f32` and `f64`, while the latter covers all of the `iN` and `uN` |
19 | | numbers. |
20 | | |
21 | | Lastly, [`Integral`] splits further, into [`Signed`] and [`Unsigned`]. These |
22 | | provide the last specializations unique to the differences between `iN` and |
23 | | `uN`. |
24 | | |
25 | | ## Width Categories |
26 | | |
27 | | Every number implements the trait `IsN` for the `N` of its bit width. `isize` |
28 | | and `usize` implement the trait that matches their width on the target platform. |
29 | | |
30 | | In addition, the trait groups `AtLeastN` and `AtMostN` enable clamping the range |
31 | | of acceptable widths to lower or upper bounds. These traits are equivalent to |
32 | | `mem::size_of::<T>() >= N` and `mem::size_of::<T>() <= N`, respectively. |
33 | | |
34 | | [`Floating`]: trait.Floating.html |
35 | | [`Integral`]: trait.Integral.html |
36 | | [`Numeric`]: trait.Numeric.html |
37 | | [`Signed`]: trait.Signed.html |
38 | | [`Unsigned`]: trait.Unsigned.html |
39 | | !*/ |
40 | | |
41 | | #![cfg_attr(not(feature = "std"), no_std)] |
42 | | #![deny(unconditional_recursion)] |
43 | | |
44 | | use core::{ |
45 | | convert::{ |
46 | | TryFrom, |
47 | | TryInto, |
48 | | }, |
49 | | fmt::{ |
50 | | Binary, |
51 | | Debug, |
52 | | Display, |
53 | | LowerExp, |
54 | | LowerHex, |
55 | | Octal, |
56 | | UpperExp, |
57 | | UpperHex, |
58 | | }, |
59 | | hash::Hash, |
60 | | iter::{ |
61 | | Product, |
62 | | Sum, |
63 | | }, |
64 | | num::{ |
65 | | FpCategory, |
66 | | ParseIntError, |
67 | | }, |
68 | | ops::{ |
69 | | Add, |
70 | | AddAssign, |
71 | | BitAnd, |
72 | | BitAndAssign, |
73 | | BitOr, |
74 | | BitOrAssign, |
75 | | BitXor, |
76 | | BitXorAssign, |
77 | | Div, |
78 | | DivAssign, |
79 | | Mul, |
80 | | MulAssign, |
81 | | Neg, |
82 | | Not, |
83 | | Rem, |
84 | | RemAssign, |
85 | | Shl, |
86 | | ShlAssign, |
87 | | Shr, |
88 | | ShrAssign, |
89 | | Sub, |
90 | | SubAssign, |
91 | | }, |
92 | | str::FromStr, |
93 | | }; |
94 | | |
95 | | /// Declare that a type is one of the language fundamental types. |
96 | | pub trait Fundamental: |
97 | | 'static |
98 | | + Sized |
99 | | + Send |
100 | | + Sync |
101 | | + Unpin |
102 | | + Clone |
103 | | + Copy |
104 | | + Default |
105 | | + FromStr |
106 | | // cmp |
107 | | + PartialEq<Self> |
108 | | + PartialOrd<Self> |
109 | | // fmt |
110 | | + Debug |
111 | | + Display |
112 | | { |
113 | | /// Tests `self != 0`. |
114 | | fn as_bool(self) -> bool; |
115 | | |
116 | | /// Represents `self` as a Unicode Scalar Value, if possible. |
117 | | fn as_char(self) -> Option<char>; |
118 | | |
119 | | /// Performs `self as i8`. |
120 | | fn as_i8(self) -> i8; |
121 | | |
122 | | /// Performs `self as i16`. |
123 | | fn as_i16(self) -> i16; |
124 | | |
125 | | /// Performs `self as i32`. |
126 | | fn as_i32(self) -> i32; |
127 | | |
128 | | /// Performs `self as i64`. |
129 | | fn as_i64(self) -> i64; |
130 | | |
131 | | /// Performs `self as i128`. |
132 | | fn as_i128(self) -> i128; |
133 | | |
134 | | /// Performs `self as isize`. |
135 | | fn as_isize(self) -> isize; |
136 | | |
137 | | /// Performs `self as u8`. |
138 | | fn as_u8(self) -> u8; |
139 | | |
140 | | /// Performs `self as u16`. |
141 | | fn as_u16(self) -> u16; |
142 | | |
143 | | /// Performs `self as u32`. |
144 | | fn as_u32(self) -> u32; |
145 | | |
146 | | /// Performs `self as u64`. |
147 | | fn as_u64(self) -> u64; |
148 | | |
149 | | /// Performs `self as u128`. |
150 | | fn as_u128(self) -> u128; |
151 | | |
152 | | /// Performs `self as usize`. |
153 | | fn as_usize(self) -> usize; |
154 | | |
155 | | /// Performs `self as f32`. |
156 | | fn as_f32(self) -> f32; |
157 | | |
158 | | /// Performs `self as f64`. |
159 | | fn as_f64(self) -> f64; |
160 | | } |
161 | | |
162 | | /// Declare that a type is an abstract number. |
163 | | /// |
164 | | /// This unifies all of the signed-integer, unsigned-integer, and floating-point |
165 | | /// types. |
166 | | pub trait Numeric: |
167 | | Fundamental |
168 | | // iter |
169 | | + Product<Self> |
170 | | + for<'a> Product<&'a Self> |
171 | | + Sum<Self> |
172 | | + for<'a> Sum<&'a Self> |
173 | | // numeric ops |
174 | | + Add<Self, Output = Self> |
175 | | + for<'a> Add<&'a Self, Output = Self> |
176 | | + AddAssign<Self> |
177 | | + for<'a> AddAssign<&'a Self> |
178 | | + Sub<Self, Output = Self> |
179 | | + for<'a> Sub<&'a Self, Output = Self> |
180 | | + SubAssign<Self> |
181 | | + for<'a> SubAssign<&'a Self> |
182 | | + Mul<Self, Output = Self> |
183 | | + for<'a> Mul<&'a Self, Output = Self> |
184 | | + MulAssign<Self> |
185 | | + for<'a> MulAssign<&'a Self> |
186 | | + Div<Self, Output = Self> |
187 | | + for<'a> Div<&'a Self, Output = Self> |
188 | | + DivAssign<Self> |
189 | | + for<'a> DivAssign<&'a Self> |
190 | | + Rem<Self, Output = Self> |
191 | | + for<'a> Rem<&'a Self, Output = Self> |
192 | | + RemAssign<Self> |
193 | | + for<'a> RemAssign<&'a Self> |
194 | | { |
195 | | /// The `[u8; N]` byte array that stores values of `Self`. |
196 | | type Bytes; |
197 | | |
198 | | /// Return the memory representation of this number as a byte array in |
199 | | /// big-endian (network) byte order. |
200 | | fn to_be_bytes(self) -> Self::Bytes; |
201 | | |
202 | | /// Return the memory representation of this number as a byte array in |
203 | | /// little-endian byte order. |
204 | | fn to_le_bytes(self) -> Self::Bytes; |
205 | | |
206 | | /// Return the memory representation of this number as a byte array in |
207 | | /// native byte order. |
208 | | fn to_ne_bytes(self) -> Self::Bytes; |
209 | | |
210 | | /// Create a numeric value from its representation as a byte array in big |
211 | | /// endian. |
212 | | fn from_be_bytes(bytes: Self::Bytes) -> Self; |
213 | | |
214 | | /// Create a numeric value from its representation as a byte array in little |
215 | | /// endian. |
216 | | fn from_le_bytes(bytes: Self::Bytes) -> Self; |
217 | | |
218 | | /// Create a numeric value from its memory representation as a byte array in |
219 | | /// native endianness. |
220 | | fn from_ne_bytes(bytes: Self::Bytes) -> Self; |
221 | | } |
222 | | |
223 | | /// Declare that a type is a fixed-point integer. |
224 | | /// |
225 | | /// This unifies all of the signed and unsigned integral types. |
226 | | pub trait Integral: |
227 | | Numeric |
228 | | + Hash |
229 | | + Eq |
230 | | + Ord |
231 | | + Binary |
232 | | + LowerHex |
233 | | + UpperHex |
234 | | + Octal |
235 | | + BitAnd<Self, Output = Self> |
236 | | + for<'a> BitAnd<&'a Self, Output = Self> |
237 | | + BitAndAssign<Self> |
238 | | + for<'a> BitAndAssign<&'a Self> |
239 | | + BitOr<Self, Output = Self> |
240 | | + for<'a> BitOr<&'a Self, Output = Self> |
241 | | + BitOrAssign<Self> |
242 | | + for<'a> BitOrAssign<&'a Self> |
243 | | + BitXor<Self, Output = Self> |
244 | | + for<'a> BitXor<&'a Self, Output = Self> |
245 | | + BitXorAssign<Self> |
246 | | + for<'a> BitXorAssign<&'a Self> |
247 | | + Not<Output = Self> |
248 | | + TryFrom<i8> |
249 | | + TryFrom<u8> |
250 | | + TryFrom<i16> |
251 | | + TryFrom<u16> |
252 | | + TryFrom<i32> |
253 | | + TryFrom<u32> |
254 | | + TryFrom<i64> |
255 | | + TryFrom<u64> |
256 | | + TryFrom<i128> |
257 | | + TryFrom<u128> |
258 | | + TryFrom<isize> |
259 | | + TryFrom<usize> |
260 | | + TryInto<i8> |
261 | | + TryInto<u8> |
262 | | + TryInto<i16> |
263 | | + TryInto<u16> |
264 | | + TryInto<i32> |
265 | | + TryInto<u32> |
266 | | + TryInto<i64> |
267 | | + TryInto<u64> |
268 | | + TryInto<i128> |
269 | | + TryInto<u128> |
270 | | + TryInto<isize> |
271 | | + TryInto<usize> |
272 | | + Shl<Self, Output = Self> |
273 | | + for<'a> Shl<&'a Self, Output = Self> |
274 | | + ShlAssign<Self> |
275 | | + for<'a> ShlAssign<&'a Self> |
276 | | + Shr<Self, Output = Self> |
277 | | + for<'a> Shr<&'a Self, Output = Self> |
278 | | + ShrAssign<Self> |
279 | | + for<'a> ShrAssign<&'a Self> |
280 | | + Shl<i8, Output = Self> |
281 | | + for<'a> Shl<&'a i8, Output = Self> |
282 | | + ShlAssign<i8> |
283 | | + for<'a> ShlAssign<&'a i8> |
284 | | + Shr<i8, Output = Self> |
285 | | + for<'a> Shr<&'a i8, Output = Self> |
286 | | + ShrAssign<i8> |
287 | | + for<'a> ShrAssign<&'a i8> |
288 | | + Shl<u8, Output = Self> |
289 | | + for<'a> Shl<&'a u8, Output = Self> |
290 | | + ShlAssign<u8> |
291 | | + for<'a> ShlAssign<&'a u8> |
292 | | + Shr<u8, Output = Self> |
293 | | + for<'a> Shr<&'a u8, Output = Self> |
294 | | + ShrAssign<u8> |
295 | | + for<'a> ShrAssign<&'a u8> |
296 | | + Shl<i16, Output = Self> |
297 | | + for<'a> Shl<&'a i16, Output = Self> |
298 | | + ShlAssign<i16> |
299 | | + for<'a> ShlAssign<&'a i16> |
300 | | + Shr<i16, Output = Self> |
301 | | + for<'a> Shr<&'a i16, Output = Self> |
302 | | + ShrAssign<i16> |
303 | | + for<'a> ShrAssign<&'a i16> |
304 | | + Shl<u16, Output = Self> |
305 | | + for<'a> Shl<&'a u16, Output = Self> |
306 | | + ShlAssign<u16> |
307 | | + for<'a> ShlAssign<&'a u16> |
308 | | + Shr<u16, Output = Self> |
309 | | + for<'a> Shr<&'a u16, Output = Self> |
310 | | + ShrAssign<u16> |
311 | | + for<'a> ShrAssign<&'a u16> |
312 | | + Shl<i32, Output = Self> |
313 | | + for<'a> Shl<&'a i32, Output = Self> |
314 | | + ShlAssign<i32> |
315 | | + for<'a> ShlAssign<&'a i32> |
316 | | + Shr<i32, Output = Self> |
317 | | + for<'a> Shr<&'a i32, Output = Self> |
318 | | + ShrAssign<i32> |
319 | | + for<'a> ShrAssign<&'a i32> |
320 | | + Shl<u32, Output = Self> |
321 | | + for<'a> Shl<&'a u32, Output = Self> |
322 | | + ShlAssign<u32> |
323 | | + for<'a> ShlAssign<&'a u32> |
324 | | + Shr<u32, Output = Self> |
325 | | + for<'a> Shr<&'a u32, Output = Self> |
326 | | + ShrAssign<u32> |
327 | | + for<'a> ShrAssign<&'a u32> |
328 | | + Shl<i64, Output = Self> |
329 | | + for<'a> Shl<&'a i64, Output = Self> |
330 | | + ShlAssign<i64> |
331 | | + for<'a> ShlAssign<&'a i64> |
332 | | + Shr<i64, Output = Self> |
333 | | + for<'a> Shr<&'a i64, Output = Self> |
334 | | + ShrAssign<i64> |
335 | | + for<'a> ShrAssign<&'a i64> |
336 | | + Shl<u64, Output = Self> |
337 | | + for<'a> Shl<&'a u64, Output = Self> |
338 | | + ShlAssign<u64> |
339 | | + for<'a> ShlAssign<&'a u64> |
340 | | + Shr<u64, Output = Self> |
341 | | + for<'a> Shr<&'a u64, Output = Self> |
342 | | + ShrAssign<u64> |
343 | | + for<'a> ShrAssign<&'a u64> |
344 | | + Shl<i128, Output = Self> |
345 | | + for<'a> Shl<&'a i128, Output = Self> |
346 | | + ShlAssign<i128> |
347 | | + for<'a> ShlAssign<&'a i128> |
348 | | + Shr<i128, Output = Self> |
349 | | + for<'a> Shr<&'a i128, Output = Self> |
350 | | + ShrAssign<i128> |
351 | | + for<'a> ShrAssign<&'a i128> |
352 | | + Shl<u128, Output = Self> |
353 | | + for<'a> Shl<&'a u128, Output = Self> |
354 | | + ShlAssign<u128> |
355 | | + for<'a> ShlAssign<&'a u128> |
356 | | + Shr<u128, Output = Self> |
357 | | + for<'a> Shr<&'a u128, Output = Self> |
358 | | + ShrAssign<u128> |
359 | | + for<'a> ShrAssign<&'a u128> |
360 | | + Shl<isize, Output = Self> |
361 | | + for<'a> Shl<&'a isize, Output = Self> |
362 | | + ShlAssign<isize> |
363 | | + for<'a> ShlAssign<&'a isize> |
364 | | + Shr<isize, Output = Self> |
365 | | + for<'a> Shr<&'a isize, Output = Self> |
366 | | + ShrAssign<isize> |
367 | | + for<'a> ShrAssign<&'a isize> |
368 | | + Shl<usize, Output = Self> |
369 | | + for<'a> Shl<&'a usize, Output = Self> |
370 | | + ShlAssign<usize> |
371 | | + for<'a> ShlAssign<&'a usize> |
372 | | + Shr<usize, Output = Self> |
373 | | + for<'a> Shr<&'a usize, Output = Self> |
374 | | + ShrAssign<usize> |
375 | | + for<'a> ShrAssign<&'a usize> |
376 | | { |
377 | | /// The type’s zero value. |
378 | | const ZERO: Self; |
379 | | |
380 | | /// The type’s step value. |
381 | | const ONE: Self; |
382 | | |
383 | | /// The type’s minimum value. This is zero for unsigned integers. |
384 | | const MIN: Self; |
385 | | |
386 | | /// The type’s maximum value. |
387 | | const MAX: Self; |
388 | | |
389 | | /// The size of this type in bits. |
390 | | const BITS: u32; |
391 | | |
392 | | /// Returns the smallest value that can be represented by this integer type. |
393 | | fn min_value() -> Self; |
394 | | |
395 | | /// Returns the largest value that can be represented by this integer type. |
396 | | fn max_value() -> Self; |
397 | | |
398 | | /// Converts a string slice in a given base to an integer. |
399 | | /// |
400 | | /// The string is expected to be an optional `+` or `-` sign followed by |
401 | | /// digits. Leading and trailing whitespace represent an error. Digits are a |
402 | | /// subset of these characters, depending on `radix`: |
403 | | /// |
404 | | /// - `0-9` |
405 | | /// - `a-z` |
406 | | /// - `A-Z` |
407 | | /// |
408 | | /// # Panics |
409 | | /// |
410 | | /// This function panics if `radix` is not in the range from 2 to 36. |
411 | | fn from_str_radix(src: &str, radix: u32) -> Result<Self, ParseIntError>; |
412 | | |
413 | | /// Returns the number of ones in the binary representation of `self`. |
414 | | fn count_ones(self) -> u32; |
415 | | |
416 | | /// Returns the number of zeros in the binary representation of `self`. |
417 | | fn count_zeros(self) -> u32; |
418 | | |
419 | | /// Returns the number of leading zeros in the binary representation of |
420 | | /// `self`. |
421 | | fn leading_zeros(self) -> u32; |
422 | | |
423 | | /// Returns the number of trailing zeros in the binary representation of |
424 | | /// `self`. |
425 | | fn trailing_zeros(self) -> u32; |
426 | | |
427 | | /// Returns the number of leading ones in the binary representation of |
428 | | /// `self`. |
429 | | fn leading_ones(self) -> u32; |
430 | | |
431 | | /// Returns the number of trailing ones in the binary representation of |
432 | | /// `self`. |
433 | | fn trailing_ones(self) -> u32; |
434 | | |
435 | | /// Shifts the bits to the left by a specified amount, `n`, wrapping the |
436 | | /// truncated bits to the end of the resulting integer. |
437 | | /// |
438 | | /// Please note this isn’t the same operation as the `<<` shifting operator! |
439 | | fn rotate_left(self, n: u32) -> Self; |
440 | | |
441 | | /// Shifts the bits to the right by a specified amount, `n`, wrapping the |
442 | | /// truncated bits to the beginning of the resulting integer. |
443 | | /// |
444 | | /// Please note this isn’t the same operation as the `>>` shifting operator! |
445 | | fn rotate_right(self, n: u32) -> Self; |
446 | | |
447 | | /// Reverses the byte order of the integer. |
448 | | fn swap_bytes(self) -> Self; |
449 | | |
450 | | /// Reverses the bit pattern of the integer. |
451 | | fn reverse_bits(self) -> Self; |
452 | | |
453 | | /// Converts an integer from big endian to the target’s endianness. |
454 | | /// |
455 | | /// On big endian this is a no-op. On little endian the bytes are swapped. |
456 | | #[allow(clippy::wrong_self_convention)] |
457 | | fn from_be(self) -> Self; |
458 | | |
459 | | /// Converts an integer frm little endian to the target’s endianness. |
460 | | /// |
461 | | /// On little endian this is a no-op. On big endian the bytes are swapped. |
462 | | #[allow(clippy::wrong_self_convention)] |
463 | | fn from_le(self) -> Self; |
464 | | |
465 | | /// Converts `self` to big endian from the target’s endianness. |
466 | | /// |
467 | | /// On big endian this is a no-op. On little endian the bytes are swapped. |
468 | | fn to_be(self) -> Self; |
469 | | |
470 | | /// Converts `self` to little endian from the target’s endianness. |
471 | | /// |
472 | | /// On little endian this is a no-op. On big endian the bytes are swapped. |
473 | | fn to_le(self) -> Self; |
474 | | |
475 | | /// Checked integer addition. Computes `self + rhs`, returning `None` if |
476 | | /// overflow occurred. |
477 | | fn checked_add(self, rhs: Self) -> Option<Self>; |
478 | | |
479 | | /// Checked integer subtraction. Computes `self - rhs`, returning `None` if |
480 | | /// overflow occurred. |
481 | | fn checked_sub(self, rhs: Self) -> Option<Self>; |
482 | | |
483 | | /// Checked integer multiplication. Computes `self * rhs`, returning `None` |
484 | | /// if overflow occurred. |
485 | | fn checked_mul(self, rhs: Self) -> Option<Self>; |
486 | | |
487 | | /// Checked integer division. Computes `self / rhs`, returning `None` if |
488 | | /// `rhs == 0` or the division results in overflow. |
489 | | fn checked_div(self, rhs: Self) -> Option<Self>; |
490 | | |
491 | | /// Checked Euclidean division. Computes `self.div_euclid(rhs)`, returning |
492 | | /// `None` if `rhs == 0` or the division results in overflow. |
493 | | fn checked_div_euclid(self, rhs: Self) -> Option<Self>; |
494 | | |
495 | | /// Checked integer remainder. Computes `self % rhs`, returning `None` if |
496 | | /// `rhs == 0` or the division results in overflow. |
497 | | fn checked_rem(self, rhs: Self) -> Option<Self>; |
498 | | |
499 | | /// Checked Euclidean remainder. Computes `self.rem_euclid(rhs)`, returning |
500 | | /// `None` if `rhs == 0` or the division results in overflow. |
501 | | fn checked_rem_euclid(self, rhs: Self) -> Option<Self>; |
502 | | |
503 | | /// Checked negation. Computes `-self`, returning `None` if `self == MIN`. |
504 | | /// |
505 | | /// Note that negating any positive integer will overflow. |
506 | | fn checked_neg(self) -> Option<Self>; |
507 | | |
508 | | /// Checked shift left. Computes `self << rhs`, returning `None` if `rhs` is |
509 | | /// larger than or equal to the number of bits in `self`. |
510 | | fn checked_shl(self, rhs: u32) -> Option<Self>; |
511 | | |
512 | | /// Checked shift right. Computes `self >> rhs`, returning `None` if `rhs` |
513 | | /// is larger than or equal to the number of bits in `self`. |
514 | | fn checked_shr(self, rhs: u32) -> Option<Self>; |
515 | | |
516 | | /// Checked exponentiation. Computes `self.pow(exp)`, returning `None` if |
517 | | /// overflow occurred. |
518 | | fn checked_pow(self, rhs: u32) -> Option<Self>; |
519 | | |
520 | | /// Saturating integer addition. Computes `self + rhs`, saturating at the |
521 | | /// numeric bounds instead of overflowing. |
522 | | fn saturating_add(self, rhs: Self) -> Self; |
523 | | |
524 | | /// Saturating integer subtraction. Computes `self - rhs`, saturating at the |
525 | | /// numeric bounds instead of overflowing. |
526 | | fn saturating_sub(self, rhs: Self) -> Self; |
527 | | |
528 | | /// Saturating integer multiplication. Computes `self * rhs`, saturating at |
529 | | /// the numeric bounds instead of overflowing. |
530 | | fn saturating_mul(self, rhs: Self) -> Self; |
531 | | |
532 | | /// Saturating integer exponentiation. Computes `self.pow(exp)`, saturating |
533 | | /// at the numeric bounds instead of overflowing. |
534 | | fn saturating_pow(self, rhs: u32) -> Self; |
535 | | |
536 | | /// Wrapping (modular) addition. Computes `self + rhs`, wrapping around at |
537 | | /// the boundary of the type. |
538 | | fn wrapping_add(self, rhs: Self) -> Self; |
539 | | |
540 | | /// Wrapping (modular) subtraction. Computes `self - rhs`, wrapping around |
541 | | /// at the boundary of the type. |
542 | | fn wrapping_sub(self, rhs: Self) -> Self; |
543 | | |
544 | | /// Wrapping (modular) multiplication. Computes `self * rhs`, wrapping |
545 | | /// around at the boundary of the type. |
546 | | fn wrapping_mul(self, rhs: Self) -> Self; |
547 | | |
548 | | /// Wrapping (modular) division. Computes `self / rhs`, wrapping around at |
549 | | /// the boundary of the type. |
550 | | /// |
551 | | /// # Signed Integers |
552 | | /// |
553 | | /// The only case where such wrapping can occur is when one divides |
554 | | /// `MIN / -1` on a signed type (where `MIN` is the negative minimal value |
555 | | /// for the type); this is equivalent to `-MIN`, a positive value that is |
556 | | /// too large to represent in the type. In such a case, this function |
557 | | /// returns `MIN` itself. |
558 | | /// |
559 | | /// # Unsigned Integers |
560 | | /// |
561 | | /// Wrapping (modular) division. Computes `self / rhs`. Wrapped division on |
562 | | /// unsigned types is just normal division. There’s no way wrapping could |
563 | | /// ever happen. This function exists, so that all operations are accounted |
564 | | /// for in the wrapping operations. |
565 | | /// |
566 | | /// # Panics |
567 | | /// |
568 | | /// This function will panic if `rhs` is 0. |
569 | | fn wrapping_div(self, rhs: Self) -> Self; |
570 | | |
571 | | /// Wrapping Euclidean division. Computes `self.div_euclid(rhs)`, wrapping |
572 | | /// around at the boundary of the type. |
573 | | /// |
574 | | /// # Signed Types |
575 | | /// |
576 | | /// Wrapping will only occur in `MIN / -1` on a signed type (where `MIN` is |
577 | | /// the negative minimal value for the type). This is equivalent to `-MIN`, |
578 | | /// a positive value that is too large to represent in the type. In this |
579 | | /// case, this method returns `MIN` itself. |
580 | | /// |
581 | | /// # Unsigned Types |
582 | | /// |
583 | | /// Wrapped division on unsigned types is just normal division. There’s no |
584 | | /// way wrapping could ever happen. This function exists, so that all |
585 | | /// operations are accounted for in the wrapping operations. Since, for the |
586 | | /// positive integers, all common definitions of division are equal, this is |
587 | | /// exactly equal to `self.wrapping_div(rhs)`. |
588 | | /// |
589 | | /// # Panics |
590 | | /// |
591 | | /// This function will panic if `rhs` is 0. |
592 | | fn wrapping_div_euclid(self, rhs: Self) -> Self; |
593 | | |
594 | | /// Wrapping (modular) remainder. Computes `self % rhs`, wrapping around at |
595 | | /// the boundary of the type. |
596 | | /// |
597 | | /// # Signed Integers |
598 | | /// |
599 | | /// Such wrap-around never actually occurs mathematically; implementation |
600 | | /// artifacts make `x % y` invalid for `MIN / -1` on a signed type (where |
601 | | /// `MIN` is the negative minimal value). In such a case, this function |
602 | | /// returns `0`. |
603 | | /// |
604 | | /// # Unsigned Integers |
605 | | /// |
606 | | /// Wrapped remainder calculation on unsigned types is just the regular |
607 | | /// remainder calculation. There’s no way wrapping could ever happen. This |
608 | | /// function exists, so that all operations are accounted for in the |
609 | | /// wrapping operations. |
610 | | /// |
611 | | /// # Panics |
612 | | /// |
613 | | /// This function will panic if `rhs` is 0. |
614 | | fn wrapping_rem(self, rhs: Self) -> Self; |
615 | | |
616 | | /// Wrapping Euclidean remainder. Computes `self.rem_euclid(rhs)`, wrapping |
617 | | /// around at the boundary of the type. |
618 | | /// |
619 | | /// # Signed Integers |
620 | | /// |
621 | | /// Wrapping will only occur in `MIN % -1` on a signed type (where `MIN` is |
622 | | /// the negative minimal value for the type). In this case, this method |
623 | | /// returns 0. |
624 | | /// |
625 | | /// # Unsigned Integers |
626 | | /// |
627 | | /// Wrapped modulo calculation on unsigned types is just the regular |
628 | | /// remainder calculation. There’s no way wrapping could ever happen. This |
629 | | /// function exists, so that all operations are accounted for in the |
630 | | /// wrapping operations. Since, for the positive integers, all common |
631 | | /// definitions of division are equal, this is exactly equal to |
632 | | /// `self.wrapping_rem(rhs)`. |
633 | | /// |
634 | | /// # Panics |
635 | | /// |
636 | | /// This function will panic if `rhs` is 0. |
637 | | fn wrapping_rem_euclid(self, rhs: Self) -> Self; |
638 | | |
639 | | /// Wrapping (modular) negation. Computes `-self`, wrapping around at the |
640 | | /// boundary of the type. |
641 | | /// |
642 | | /// # Signed Integers |
643 | | /// |
644 | | /// The only case where such wrapping can occur is when one negates `MIN` |
645 | | /// on a signed type (where `MIN` is the negative minimal value for the |
646 | | /// type); this is a positive value that is too large to represent in the |
647 | | /// type. In such a case, this function returns `MIN` itself. |
648 | | /// |
649 | | /// # Unsigned Integers |
650 | | /// |
651 | | /// Since unsigned types do not have negative equivalents all applications |
652 | | /// of this function will wrap (except for `-0`). For values smaller than |
653 | | /// the corresponding signed type’s maximum the result is the same as |
654 | | /// casting the corresponding signed value. Any larger values are equivalent |
655 | | /// to `MAX + 1 - (val - MAX - 1)` where `MAX` is the corresponding signed |
656 | | /// type’s maximum. |
657 | | fn wrapping_neg(self) -> Self; |
658 | | |
659 | | /// Panic-free bitwise shift-left; yields `self << mask(rhs)`, where `mask` |
660 | | /// removes any high-order bits of `rhs` that would cause the shift to |
661 | | /// exceed the bit-width of the type. |
662 | | /// |
663 | | /// Note that this is not the same as a rotate-left; the RHS of a wrapping |
664 | | /// shift-left is restricted to the range of the type, rather than the bits |
665 | | /// shifted out of the LHS being returned to the other end. The primitive |
666 | | /// integer types all implement a `rotate_left` function, which may be what |
667 | | /// you want instead. |
668 | | fn wrapping_shl(self, rhs: u32) -> Self; |
669 | | |
670 | | /// Panic-free bitwise shift-right; yields `self >> mask(rhs)`, where `mask` |
671 | | /// removes any high-order bits of `rhs` that would cause the shift to |
672 | | /// exceed the bit-width of the type. |
673 | | /// |
674 | | /// Note that this is not the same as a rotate-right; the RHS of a wrapping |
675 | | /// shift-right is restricted to the range of the type, rather than the bits |
676 | | /// shifted out of the LHS being returned to the other end. The primitive |
677 | | /// integer types all implement a `rotate_right` function, which may be what |
678 | | /// you want instead. |
679 | | fn wrapping_shr(self, rhs: u32) -> Self; |
680 | | |
681 | | /// Wrapping (modular) exponentiation. Computes `self.pow(exp)`, wrapping |
682 | | /// around at the boundary of the type. |
683 | | fn wrapping_pow(self, rhs: u32) -> Self; |
684 | | |
685 | | /// Calculates `self + rhs` |
686 | | /// |
687 | | /// Returns a tuple of the addition along with a boolean indicating whether |
688 | | /// an arithmetic overflow would occur. If an overflow would have occurred |
689 | | /// then the wrapped value is returned. |
690 | | fn overflowing_add(self, rhs: Self) -> (Self, bool); |
691 | | |
692 | | /// Calculates `self - rhs` |
693 | | /// |
694 | | /// Returns a tuple of the subtraction along with a boolean indicating |
695 | | /// whether an arithmetic overflow would occur. If an overflow would have |
696 | | /// occurred then the wrapped value is returned. |
697 | | fn overflowing_sub(self, rhs: Self) -> (Self, bool); |
698 | | |
699 | | /// Calculates the multiplication of `self` and `rhs`. |
700 | | /// |
701 | | /// Returns a tuple of the multiplication along with a boolean indicating |
702 | | /// whether an arithmetic overflow would occur. If an overflow would have |
703 | | /// occurred then the wrapped value is returned. |
704 | | fn overflowing_mul(self, rhs: Self) -> (Self, bool); |
705 | | |
706 | | /// Calculates the divisor when `self` is divided by `rhs`. |
707 | | /// |
708 | | /// Returns a tuple of the divisor along with a boolean indicating whether |
709 | | /// an arithmetic overflow would occur. If an overflow would occur then self |
710 | | /// is returned. |
711 | | /// |
712 | | /// # Panics |
713 | | /// |
714 | | /// This function will panic if `rhs` is 0. |
715 | | fn overflowing_div(self, rhs: Self) -> (Self, bool); |
716 | | |
717 | | /// Calculates the quotient of Euclidean division `self.div_euclid(rhs)`. |
718 | | /// |
719 | | /// Returns a tuple of the divisor along with a boolean indicating whether |
720 | | /// an arithmetic overflow would occur. If an overflow would occur then self |
721 | | /// is returned. |
722 | | /// |
723 | | /// # Panics |
724 | | /// |
725 | | /// This function will panic if `rhs` is 0. |
726 | | fn overflowing_div_euclid(self, rhs: Self) -> (Self, bool); |
727 | | |
728 | | /// Calculates the remainder when `self` is divided by `rhs`. |
729 | | /// |
730 | | /// Returns a tuple of the remainder after dividing along with a boolean |
731 | | /// indicating whether an arithmetic overflow would occur. If an overflow |
732 | | /// would occur then 0 is returned. |
733 | | /// |
734 | | /// # Panics |
735 | | /// |
736 | | /// This function will panic if `rhs` is 0. |
737 | | fn overflowing_rem(self, rhs: Self) -> (Self, bool); |
738 | | |
739 | | /// Overflowing Euclidean remainder. Calculates `self.rem_euclid(rhs)`. |
740 | | /// |
741 | | /// Returns a tuple of the remainder after dividing along with a boolean |
742 | | /// indicating whether an arithmetic overflow would occur. If an overflow |
743 | | /// would occur then 0 is returned. |
744 | | /// |
745 | | /// # Panics |
746 | | /// |
747 | | /// This function will panic if rhs is 0. |
748 | | fn overflowing_rem_euclid(self, rhs: Self) -> (Self, bool); |
749 | | |
750 | | /// Negates self, overflowing if this is equal to the minimum value. |
751 | | /// |
752 | | /// Returns a tuple of the negated version of self along with a boolean |
753 | | /// indicating whether an overflow happened. If `self` is the minimum value |
754 | | /// (e.g., `i32::MIN` for values of type `i32`), then the minimum value will |
755 | | /// be returned again and `true` will be returned for an overflow happening. |
756 | | fn overflowing_neg(self) -> (Self, bool); |
757 | | |
758 | | /// Shifts self left by `rhs` bits. |
759 | | /// |
760 | | /// Returns a tuple of the shifted version of self along with a boolean |
761 | | /// indicating whether the shift value was larger than or equal to the |
762 | | /// number of bits. If the shift value is too large, then value is masked |
763 | | /// (N-1) where N is the number of bits, and this value is then used to |
764 | | /// perform the shift. |
765 | | fn overflowing_shl(self, rhs: u32) -> (Self, bool); |
766 | | |
767 | | /// Shifts self right by `rhs` bits. |
768 | | /// |
769 | | /// Returns a tuple of the shifted version of self along with a boolean |
770 | | /// indicating whether the shift value was larger than or equal to the |
771 | | /// number of bits. If the shift value is too large, then value is masked |
772 | | /// (N-1) where N is the number of bits, and this value is then used to |
773 | | /// perform the shift. |
774 | | fn overflowing_shr(self, rhs: u32) -> (Self, bool); |
775 | | |
776 | | /// Raises self to the power of `exp`, using exponentiation by squaring. |
777 | | /// |
778 | | /// Returns a tuple of the exponentiation along with a bool indicating |
779 | | /// whether an overflow happened. |
780 | | fn overflowing_pow(self, rhs: u32) -> (Self, bool); |
781 | | |
782 | | /// Raises self to the power of `exp`, using exponentiation by squaring. |
783 | | fn pow(self, rhs: u32) -> Self; |
784 | | |
785 | | /// Calculates the quotient of Euclidean division of self by rhs. |
786 | | /// |
787 | | /// This computes the integer `n` such that |
788 | | /// `self = n * rhs + self.rem_euclid(rhs)`, with |
789 | | /// `0 <= self.rem_euclid(rhs) < rhs`. |
790 | | /// |
791 | | /// In other words, the result is `self / rhs` rounded to the integer `n` |
792 | | /// such that `self >= n * rhs`. If `self > 0`, this is equal to round |
793 | | /// towards zero (the default in Rust); if `self < 0`, this is equal to |
794 | | /// round towards +/- infinity. |
795 | | /// |
796 | | /// # Panics |
797 | | /// |
798 | | /// This function will panic if `rhs` is 0 or the division results in |
799 | | /// overflow. |
800 | | fn div_euclid(self, rhs: Self) -> Self; |
801 | | |
802 | | /// Calculates the least nonnegative remainder of `self (mod rhs)`. |
803 | | /// |
804 | | /// This is done as if by the Euclidean division algorithm -- given |
805 | | /// `r = self.rem_euclid(rhs)`, `self = rhs * self.div_euclid(rhs) + r`, and |
806 | | /// `0 <= r < abs(rhs)`. |
807 | | /// |
808 | | /// # Panics |
809 | | /// |
810 | | /// This function will panic if `rhs` is 0 or the division results in |
811 | | /// overflow. |
812 | | fn rem_euclid(self, rhs: Self) -> Self; |
813 | | } |
814 | | |
815 | | /// Declare that a type is a signed integer. |
816 | | pub trait Signed: Integral + Neg { |
817 | | /// Checked absolute value. Computes `self.abs()`, returning `None` if |
818 | | /// `self == MIN`. |
819 | | fn checked_abs(self) -> Option<Self>; |
820 | | |
821 | | /// Wrapping (modular) absolute value. Computes `self.abs()`, wrapping |
822 | | /// around at the boundary of the type. |
823 | | /// |
824 | | /// The only case where such wrapping can occur is when one takes the |
825 | | /// absolute value of the negative minimal value for the type this is a |
826 | | /// positive value that is too large to represent in the type. In such a |
827 | | /// case, this function returns `MIN` itself. |
828 | | fn wrapping_abs(self) -> Self; |
829 | | |
830 | | /// Computes the absolute value of `self`. |
831 | | /// |
832 | | /// Returns a tuple of the absolute version of self along with a boolean |
833 | | /// indicating whether an overflow happened. If self is the minimum value |
834 | | /// (e.g., iN::MIN for values of type iN), then the minimum value will be |
835 | | /// returned again and true will be returned for an overflow happening. |
836 | | fn overflowing_abs(self) -> (Self, bool); |
837 | | |
838 | | //// Computes the absolute value of self. |
839 | | /// |
840 | | /// # Overflow behavior |
841 | | /// |
842 | | /// The absolute value of `iN::min_value()` cannot be represented as an |
843 | | /// `iN`, and attempting to calculate it will cause an overflow. This means |
844 | | /// that code in debug mode will trigger a panic on this case and optimized |
845 | | /// code will return `iN::min_value()` without a panic. |
846 | | fn abs(self) -> Self; |
847 | | |
848 | | /// Returns a number representing sign of `self`. |
849 | | /// |
850 | | /// - `0` if the number is zero |
851 | | /// - `1` if the number is positive |
852 | | /// - `-1` if the number is negative |
853 | | fn signum(self) -> Self; |
854 | | |
855 | | /// Returns `true` if `self` is positive and `false` if the number is zero |
856 | | /// or negative. |
857 | | fn is_positive(self) -> bool; |
858 | | |
859 | | /// Returns `true` if `self` is negative and `false` if the number is zero |
860 | | /// or positive. |
861 | | fn is_negative(self) -> bool; |
862 | | } |
863 | | |
864 | | /// Declare that a type is an unsigned integer. |
865 | | pub trait Unsigned: Integral { |
866 | | /// Returns `true` if and only if `self == 2^k` for some `k`. |
867 | | fn is_power_of_two(self) -> bool; |
868 | | |
869 | | /// Returns the smallest power of two greater than or equal to `self`. |
870 | | /// |
871 | | /// When return value overflows (i.e., `self > (1 << (N-1))` for type `uN`), |
872 | | /// it panics in debug mode and return value is wrapped to 0 in release mode |
873 | | /// (the only situation in which method can return 0). |
874 | | fn next_power_of_two(self) -> Self; |
875 | | |
876 | | /// Returns the smallest power of two greater than or equal to `n`. If the |
877 | | /// next power of two is greater than the type’s maximum value, `None` is |
878 | | /// returned, otherwise the power of two is wrapped in `Some`. |
879 | | fn checked_next_power_of_two(self) -> Option<Self>; |
880 | | } |
881 | | |
882 | | /// Declare that a type is a floating-point number. |
883 | | pub trait Floating: |
884 | | Numeric |
885 | | + LowerExp |
886 | | + UpperExp |
887 | | + Neg |
888 | | + From<f32> |
889 | | + From<i8> |
890 | | + From<i16> |
891 | | + From<u8> |
892 | | + From<u16> |
893 | | { |
894 | | /// The unsigned integer type of the same width as `Self`. |
895 | | type Raw: Unsigned; |
896 | | |
897 | | /// The radix or base of the internal representation of `f32`. |
898 | | const RADIX: u32; |
899 | | |
900 | | /// Number of significant digits in base 2. |
901 | | const MANTISSA_DIGITS: u32; |
902 | | |
903 | | /// Approximate number of significant digits in base 10. |
904 | | const DIGITS: u32; |
905 | | |
906 | | /// [Machine epsilon] value for `f32`. |
907 | | /// |
908 | | /// This is the difference between `1.0` and the next larger representable |
909 | | /// number. |
910 | | /// |
911 | | /// [Machine epsilon]: https://en.wikipedia.org/wiki/Machine_epsilon |
912 | | const EPSILON: Self; |
913 | | |
914 | | /// Smallest finite `f32` value. |
915 | | const MIN: Self; |
916 | | |
917 | | /// Smallest positive normal `f32` value. |
918 | | const MIN_POSITIVE: Self; |
919 | | |
920 | | /// Largest finite `f32` value. |
921 | | const MAX: Self; |
922 | | |
923 | | /// One greater than the minimum possible normal power of 2 exponent. |
924 | | const MIN_EXP: i32; |
925 | | |
926 | | /// Maximum possible power of 2 exponent. |
927 | | const MAX_EXP: i32; |
928 | | |
929 | | /// Minimum possible normal power of 10 exponent. |
930 | | const MIN_10_EXP: i32; |
931 | | |
932 | | /// Maximum possible power of 10 exponent. |
933 | | const MAX_10_EXP: i32; |
934 | | |
935 | | /// Not a Number (NaN). |
936 | | const NAN: Self; |
937 | | |
938 | | /// Infinity (∞). |
939 | | const INFINITY: Self; |
940 | | |
941 | | /// Negative infinity (−∞). |
942 | | const NEG_INFINITY: Self; |
943 | | |
944 | | /// Archimedes' constant (Ï€) |
945 | | const PI: Self; |
946 | | |
947 | | /// π/2 |
948 | | const FRAC_PI_2: Self; |
949 | | |
950 | | /// π/3 |
951 | | const FRAC_PI_3: Self; |
952 | | |
953 | | /// π/4 |
954 | | const FRAC_PI_4: Self; |
955 | | |
956 | | /// π/6 |
957 | | const FRAC_PI_6: Self; |
958 | | |
959 | | /// π/8 |
960 | | const FRAC_PI_8: Self; |
961 | | |
962 | | /// 1/Ï€ |
963 | | const FRAC_1_PI: Self; |
964 | | |
965 | | /// 2/Ï€ |
966 | | const FRAC_2_PI: Self; |
967 | | |
968 | | /// 2/sqrt(Ï€) |
969 | | const FRAC_2_SQRT_PI: Self; |
970 | | |
971 | | /// sqrt(2) |
972 | | const SQRT_2: Self; |
973 | | |
974 | | /// 1/sqrt(2) |
975 | | const FRAC_1_SQRT_2: Self; |
976 | | |
977 | | /// Euler’s number (e) |
978 | | const E: Self; |
979 | | |
980 | | /// log<sub>2</sub>(e) |
981 | | const LOG2_E: Self; |
982 | | |
983 | | /// log<sub>10</sub>(e) |
984 | | const LOG10_E: Self; |
985 | | |
986 | | /// ln(2) |
987 | | const LN_2: Self; |
988 | | |
989 | | /// ln(10) |
990 | | const LN_10: Self; |
991 | | |
992 | | // These functions are only available in `std`, because they rely on the |
993 | | // system math library `libm` which is not provided by `core`. |
994 | | |
995 | | /// Returns the largest integer less than or equal to a number. |
996 | | #[cfg(feature = "std")] |
997 | | fn floor(self) -> Self; |
998 | | |
999 | | /// Returns the smallest integer greater than or equal to a number. |
1000 | | #[cfg(feature = "std")] |
1001 | | fn ceil(self) -> Self; |
1002 | | |
1003 | | /// Returns the nearest integer to a number. Round half-way cases away from |
1004 | | /// `0.0`. |
1005 | | #[cfg(feature = "std")] |
1006 | | fn round(self) -> Self; |
1007 | | |
1008 | | /// Returns the integer part of a number. |
1009 | | #[cfg(feature = "std")] |
1010 | | fn trunc(self) -> Self; |
1011 | | |
1012 | | /// Returns the fractional part of a number. |
1013 | | #[cfg(feature = "std")] |
1014 | | fn fract(self) -> Self; |
1015 | | |
1016 | | /// Computes the absolute value of `self`. Returns `NAN` if the |
1017 | | /// number is `NAN`. |
1018 | | #[cfg(feature = "std")] |
1019 | | fn abs(self) -> Self; |
1020 | | |
1021 | | /// Returns a number that represents the sign of `self`. |
1022 | | /// |
1023 | | /// - `1.0` if the number is positive, `+0.0` or `INFINITY` |
1024 | | /// - `-1.0` if the number is negative, `-0.0` or `NEG_INFINITY` |
1025 | | /// - `NAN` if the number is `NAN` |
1026 | | #[cfg(feature = "std")] |
1027 | | fn signum(self) -> Self; |
1028 | | |
1029 | | /// Returns a number composed of the magnitude of `self` and the sign of |
1030 | | /// `sign`. |
1031 | | /// |
1032 | | /// Equal to `self` if the sign of `self` and `sign` are the same, otherwise |
1033 | | /// equal to `-self`. If `self` is a `NAN`, then a `NAN` with the sign of |
1034 | | /// `sign` is returned. |
1035 | | #[cfg(feature = "std")] |
1036 | | fn copysign(self, sign: Self) -> Self; |
1037 | | |
1038 | | /// Fused multiply-add. Computes `(self * a) + b` with only one rounding |
1039 | | /// error, yielding a more accurate result than an un-fused multiply-add. |
1040 | | /// |
1041 | | /// Using `mul_add` can be more performant than an un-fused multiply-add if |
1042 | | /// the target architecture has a dedicated `fma` CPU instruction. |
1043 | | #[cfg(feature = "std")] |
1044 | | fn mul_add(self, a: Self, b: Self) -> Self; |
1045 | | |
1046 | | /// Calculates Euclidean division, the matching method for `rem_euclid`. |
1047 | | /// |
1048 | | /// This computes the integer `n` such that |
1049 | | /// `self = n * rhs + self.rem_euclid(rhs)`. |
1050 | | /// In other words, the result is `self / rhs` rounded to the integer `n` |
1051 | | /// such that `self >= n * rhs`. |
1052 | | #[cfg(feature = "std")] |
1053 | | fn div_euclid(self, rhs: Self) -> Self; |
1054 | | |
1055 | | /// Calculates the least nonnegative remainder of `self (mod rhs)`. |
1056 | | /// |
1057 | | /// In particular, the return value `r` satisfies `0.0 <= r < rhs.abs()` in |
1058 | | /// most cases. However, due to a floating point round-off error it can |
1059 | | /// result in `r == rhs.abs()`, violating the mathematical definition, if |
1060 | | /// `self` is much smaller than `rhs.abs()` in magnitude and `self < 0.0`. |
1061 | | /// This result is not an element of the function's codomain, but it is the |
1062 | | /// closest floating point number in the real numbers and thus fulfills the |
1063 | | /// property `self == self.div_euclid(rhs) * rhs + self.rem_euclid(rhs)` |
1064 | | /// approximatively. |
1065 | | #[cfg(feature = "std")] |
1066 | | fn rem_euclid(self, rhs: Self) -> Self; |
1067 | | |
1068 | | /// Raises a number to an integer power. |
1069 | | /// |
1070 | | /// Using this function is generally faster than using `powf` |
1071 | | #[cfg(feature = "std")] |
1072 | | fn powi(self, n: i32) -> Self; |
1073 | | |
1074 | | /// Raises a number to a floating point power. |
1075 | | #[cfg(feature = "std")] |
1076 | | fn powf(self, n: Self) -> Self; |
1077 | | |
1078 | | /// Returns the square root of a number. |
1079 | | /// |
1080 | | /// Returns NaN if `self` is a negative number. |
1081 | | #[cfg(feature = "std")] |
1082 | | fn sqrt(self) -> Self; |
1083 | | |
1084 | | /// Returns `e^(self)`, (the exponential function). |
1085 | | #[cfg(feature = "std")] |
1086 | | fn exp(self) -> Self; |
1087 | | |
1088 | | /// Returns `2^(self)`. |
1089 | | #[cfg(feature = "std")] |
1090 | | fn exp2(self) -> Self; |
1091 | | |
1092 | | /// Returns the natural logarithm of the number. |
1093 | | #[cfg(feature = "std")] |
1094 | | fn ln(self) -> Self; |
1095 | | |
1096 | | /// Returns the logarithm of the number with respect to an arbitrary base. |
1097 | | /// |
1098 | | /// The result may not be correctly rounded owing to implementation details; |
1099 | | /// `self.log2()` can produce more accurate results for base 2, and |
1100 | | /// `self.log10()` can produce more accurate results for base 10. |
1101 | | #[cfg(feature = "std")] |
1102 | | fn log(self, base: Self) -> Self; |
1103 | | |
1104 | | /// Returns the base 2 logarithm of the number. |
1105 | | #[cfg(feature = "std")] |
1106 | | fn log2(self) -> Self; |
1107 | | |
1108 | | /// Returns the base 10 logarithm of the number. |
1109 | | #[cfg(feature = "std")] |
1110 | | fn log10(self) -> Self; |
1111 | | |
1112 | | /// Returns the cubic root of a number. |
1113 | | #[cfg(feature = "std")] |
1114 | | fn cbrt(self) -> Self; |
1115 | | |
1116 | | /// Computes the sine of a number (in radians). |
1117 | | #[cfg(feature = "std")] |
1118 | | fn hypot(self, other: Self) -> Self; |
1119 | | |
1120 | | /// Computes the sine of a number (in radians). |
1121 | | #[cfg(feature = "std")] |
1122 | | fn sin(self) -> Self; |
1123 | | |
1124 | | /// Computes the cosine of a number (in radians). |
1125 | | #[cfg(feature = "std")] |
1126 | | fn cos(self) -> Self; |
1127 | | |
1128 | | /// Computes the tangent of a number (in radians). |
1129 | | #[cfg(feature = "std")] |
1130 | | fn tan(self) -> Self; |
1131 | | |
1132 | | /// Computes the arcsine of a number. Return value is in radians in the |
1133 | | /// range [-pi/2, pi/2] or NaN if the number is outside the range [-1, 1]. |
1134 | | #[cfg(feature = "std")] |
1135 | | fn asin(self) -> Self; |
1136 | | |
1137 | | /// Computes the arccosine of a number. Return value is in radians in the |
1138 | | /// range [0, pi] or NaN if the number is outside the range [-1, 1]. |
1139 | | #[cfg(feature = "std")] |
1140 | | fn acos(self) -> Self; |
1141 | | |
1142 | | /// Computes the arctangent of a number. Return value is in radians in the |
1143 | | /// range [-pi/2, pi/2]; |
1144 | | #[cfg(feature = "std")] |
1145 | | fn atan(self) -> Self; |
1146 | | |
1147 | | /// Computes the four quadrant arctangent of `self` (`y`) and `other` (`x`) |
1148 | | /// in radians. |
1149 | | /// |
1150 | | /// - `x = 0`, `y = 0`: `0` |
1151 | | /// - `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]` |
1152 | | /// - `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]` |
1153 | | /// - `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)` |
1154 | | #[cfg(feature = "std")] |
1155 | | fn atan2(self, other: Self) -> Self; |
1156 | | |
1157 | | /// Simultaneously computes the sine and cosine of the number, `x`. Returns |
1158 | | /// `(sin(x), cos(x))`. |
1159 | | #[cfg(feature = "std")] |
1160 | | fn sin_cos(self) -> (Self, Self); |
1161 | | |
1162 | | /// Returns `e^(self) - 1` in a way that is accurate even if the number is |
1163 | | /// close to zero. |
1164 | | #[cfg(feature = "std")] |
1165 | | fn exp_m1(self) -> Self; |
1166 | | |
1167 | | /// Returns `ln(1+n)` (natural logarithm) more accurately than if the |
1168 | | /// operations were performed separately. |
1169 | | #[cfg(feature = "std")] |
1170 | | fn ln_1p(self) -> Self; |
1171 | | |
1172 | | /// Hyperbolic sine function. |
1173 | | #[cfg(feature = "std")] |
1174 | | fn sinh(self) -> Self; |
1175 | | |
1176 | | /// Hyperbolic cosine function. |
1177 | | #[cfg(feature = "std")] |
1178 | | fn cosh(self) -> Self; |
1179 | | |
1180 | | /// Hyperbolic tangent function. |
1181 | | #[cfg(feature = "std")] |
1182 | | fn tanh(self) -> Self; |
1183 | | |
1184 | | /// Inverse hyperbolic sine function. |
1185 | | #[cfg(feature = "std")] |
1186 | | fn asinh(self) -> Self; |
1187 | | |
1188 | | /// Inverse hyperbolic cosine function. |
1189 | | #[cfg(feature = "std")] |
1190 | | fn acosh(self) -> Self; |
1191 | | |
1192 | | /// Inverse hyperbolic tangent function. |
1193 | | #[cfg(feature = "std")] |
1194 | | fn atanh(self) -> Self; |
1195 | | |
1196 | | /// Returns `true` if this value is `NaN`. |
1197 | | fn is_nan(self) -> bool; |
1198 | | |
1199 | | /// Returns `true` if this value is positive infinity or negative infinity, |
1200 | | /// and `false` otherwise. |
1201 | | fn is_infinite(self) -> bool; |
1202 | | |
1203 | | /// Returns `true` if this number is neither infinite nor `NaN`. |
1204 | | fn is_finite(self) -> bool; |
1205 | | |
1206 | | /// Returns `true` if the number is neither zero, infinite, [subnormal], or |
1207 | | /// `NaN`. |
1208 | | /// |
1209 | | /// [subnormal]: https://en.wixipedia.org/wiki/Denormal_number |
1210 | | fn is_normal(self) -> bool; |
1211 | | |
1212 | | /// Returns the floating point category of the number. If only one property |
1213 | | /// is going to be tested, it is generally faster to use the specific |
1214 | | /// predicate instead. |
1215 | | fn classify(self) -> FpCategory; |
1216 | | |
1217 | | /// Returns `true` if `self` has a positive sign, including `+0.0`, `NaN`s |
1218 | | /// with positive sign bit and positive infinity. |
1219 | | fn is_sign_positive(self) -> bool; |
1220 | | |
1221 | | /// Returns `true` if `self` has a negative sign, including `-0.0`, `NaN`s |
1222 | | /// with negative sign bit and negative infinity. |
1223 | | fn is_sign_negative(self) -> bool; |
1224 | | |
1225 | | /// Takes the reciprocal (inverse) of a number, `1/x`. |
1226 | | fn recip(self) -> Self; |
1227 | | |
1228 | | /// Converts radians to degrees. |
1229 | | fn to_degrees(self) -> Self; |
1230 | | |
1231 | | /// Converts degrees to radians. |
1232 | | fn to_radians(self) -> Self; |
1233 | | |
1234 | | /// Returns the maximum of the two numbers. |
1235 | | fn max(self, other: Self) -> Self; |
1236 | | |
1237 | | /// Returns the minimum of the two numbers. |
1238 | | fn min(self, other: Self) -> Self; |
1239 | | |
1240 | | /// Raw transmutation to `u32`. |
1241 | | /// |
1242 | | /// This is currently identical to `transmute::<f32, u32>(self)` on all |
1243 | | /// platforms. |
1244 | | /// |
1245 | | /// See `from_bits` for some discussion of the portability of this operation |
1246 | | /// (there are almost no issues). |
1247 | | /// |
1248 | | /// Note that this function is distinct from `as` casting, which attempts to |
1249 | | /// preserve the *numeric* value, and not the bitwise value. |
1250 | | fn to_bits(self) -> Self::Raw; |
1251 | | |
1252 | | /// Raw transmutation from `u32`. |
1253 | | /// |
1254 | | /// This is currently identical to `transmute::<u32, f32>(v)` on all |
1255 | | /// platforms. It turns out this is incredibly portable, for two reasons: |
1256 | | /// |
1257 | | /// - Floats and Ints have the same endianness on all supported platforms. |
1258 | | /// - IEEE-754 very precisely specifies the bit layout of floats. |
1259 | | /// |
1260 | | /// However there is one caveat: prior to the 2008 version of IEEE-754, how |
1261 | | /// to interpret the NaN signaling bit wasn't actually specified. Most |
1262 | | /// platforms (notably x86 and ARM) picked the interpretation that was |
1263 | | /// ultimately standardized in 2008, but some didn't (notably MIPS). As a |
1264 | | /// result, all signaling NaNs on MIPS are quiet NaNs on x86, and |
1265 | | /// vice-versa. |
1266 | | /// |
1267 | | /// Rather than trying to preserve signaling-ness cross-platform, this |
1268 | | /// implementation favors preserving the exact bits. This means that |
1269 | | /// any payloads encoded in NaNs will be preserved even if the result of |
1270 | | /// this method is sent over the network from an x86 machine to a MIPS one. |
1271 | | /// |
1272 | | /// If the results of this method are only manipulated by the same |
1273 | | /// architecture that produced them, then there is no portability concern. |
1274 | | /// |
1275 | | /// If the input isn't NaN, then there is no portability concern. |
1276 | | /// |
1277 | | /// If you don't care about signalingness (very likely), then there is no |
1278 | | /// portability concern. |
1279 | | /// |
1280 | | /// Note that this function is distinct from `as` casting, which attempts to |
1281 | | /// preserve the *numeric* value, and not the bitwise value. |
1282 | | fn from_bits(bits: Self::Raw) -> Self; |
1283 | | } |
1284 | | |
1285 | | /// Declare that a type is exactly eight bits wide. |
1286 | | pub trait Is8: Numeric {} |
1287 | | |
1288 | | /// Declare that a type is exactly sixteen bits wide. |
1289 | | pub trait Is16: Numeric {} |
1290 | | |
1291 | | /// Declare that a type is exactly thirty-two bits wide. |
1292 | | pub trait Is32: Numeric {} |
1293 | | |
1294 | | /// Declare that a type is exactly sixty-four bits wide. |
1295 | | pub trait Is64: Numeric {} |
1296 | | |
1297 | | /// Declare that a type is exactly one hundred twenty-eight bits wide. |
1298 | | pub trait Is128: Numeric {} |
1299 | | |
1300 | | /// Declare that a type is eight or more bits wide. |
1301 | | pub trait AtLeast8: Numeric {} |
1302 | | |
1303 | | /// Declare that a type is sixteen or more bits wide. |
1304 | | pub trait AtLeast16: Numeric {} |
1305 | | |
1306 | | /// Declare that a type is thirty-two or more bits wide. |
1307 | | pub trait AtLeast32: Numeric {} |
1308 | | |
1309 | | /// Declare that a type is sixty-four or more bits wide. |
1310 | | pub trait AtLeast64: Numeric {} |
1311 | | |
1312 | | /// Declare that a type is one hundred twenty-eight or more bits wide. |
1313 | | pub trait AtLeast128: Numeric {} |
1314 | | |
1315 | | /// Declare that a type is eight or fewer bits wide. |
1316 | | pub trait AtMost8: Numeric {} |
1317 | | |
1318 | | /// Declare that a type is sixteen or fewer bits wide. |
1319 | | pub trait AtMost16: Numeric {} |
1320 | | |
1321 | | /// Declare that a type is thirty-two or fewer bits wide. |
1322 | | pub trait AtMost32: Numeric {} |
1323 | | |
1324 | | /// Declare that a type is sixty-four or fewer bits wide. |
1325 | | pub trait AtMost64: Numeric {} |
1326 | | |
1327 | | /// Declare that a type is one hundred twenty-eight or fewer bits wide. |
1328 | | pub trait AtMost128: Numeric {} |
1329 | | |
1330 | | /// Creates new wrapper functions that forward to inherent items of the same |
1331 | | /// name and signature. |
1332 | | macro_rules! func { |
1333 | | ( |
1334 | | $(@$std:literal)? |
1335 | | $name:ident (self$(, $arg:ident: $t:ty)*) $(-> $ret:ty)?; |
1336 | | $($tt:tt)* |
1337 | | ) => { |
1338 | | $(#[cfg(feature = $std)])? |
1339 | 4.62k | fn $name(self$(, $arg: $t)*) $(-> $ret)? |
1340 | 4.62k | { |
1341 | 4.62k | <Self>::$name(self$(, $arg)*) |
1342 | 4.62k | } Unexecuted instantiation: <i8 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <i8 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <i8 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <i16 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <i16 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <i16 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <i32 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <i32 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <i32 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <i64 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <i64 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <i64 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <i128 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <i128 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <i128 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <isize as funty::Numeric>::to_be_bytes Unexecuted instantiation: <isize as funty::Numeric>::to_le_bytes Unexecuted instantiation: <isize as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <u8 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <u8 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <u8 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <u16 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <u16 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <u16 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <u32 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <u32 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <u32 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <u64 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <u64 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <u64 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <u128 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <u128 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <u128 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <usize as funty::Numeric>::to_be_bytes Unexecuted instantiation: <usize as funty::Numeric>::to_le_bytes Unexecuted instantiation: <usize as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <f32 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <f32 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <f32 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <f64 as funty::Numeric>::to_be_bytes Unexecuted instantiation: <f64 as funty::Numeric>::to_le_bytes Unexecuted instantiation: <f64 as funty::Numeric>::to_ne_bytes Unexecuted instantiation: <i8 as funty::Integral>::count_ones Unexecuted instantiation: <i8 as funty::Integral>::count_zeros Unexecuted instantiation: <i8 as funty::Integral>::leading_zeros Unexecuted instantiation: <i8 as funty::Integral>::trailing_zeros Unexecuted instantiation: <i8 as funty::Integral>::leading_ones Unexecuted instantiation: <i8 as funty::Integral>::trailing_ones Unexecuted instantiation: <i8 as funty::Integral>::rotate_left Unexecuted instantiation: <i8 as funty::Integral>::rotate_right Unexecuted instantiation: <i8 as funty::Integral>::swap_bytes Unexecuted instantiation: <i8 as funty::Integral>::reverse_bits Unexecuted instantiation: <i8 as funty::Integral>::from_be Unexecuted instantiation: <i8 as funty::Integral>::from_le Unexecuted instantiation: <i8 as funty::Integral>::to_be Unexecuted instantiation: <i8 as funty::Integral>::to_le Unexecuted instantiation: <i8 as funty::Integral>::checked_add Unexecuted instantiation: <i8 as funty::Integral>::checked_sub Unexecuted instantiation: <i8 as funty::Integral>::checked_mul Unexecuted instantiation: <i8 as funty::Integral>::checked_div Unexecuted instantiation: <i8 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <i8 as funty::Integral>::checked_rem Unexecuted instantiation: <i8 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <i8 as funty::Integral>::checked_neg Unexecuted instantiation: <i8 as funty::Integral>::checked_shl Unexecuted instantiation: <i8 as funty::Integral>::checked_shr Unexecuted instantiation: <i8 as funty::Integral>::checked_pow Unexecuted instantiation: <i8 as funty::Integral>::saturating_add Unexecuted instantiation: <i8 as funty::Integral>::saturating_sub Unexecuted instantiation: <i8 as funty::Integral>::saturating_mul Unexecuted instantiation: <i8 as funty::Integral>::saturating_pow Unexecuted instantiation: <i8 as funty::Integral>::wrapping_add Unexecuted instantiation: <i8 as funty::Integral>::wrapping_sub Unexecuted instantiation: <i8 as funty::Integral>::wrapping_mul Unexecuted instantiation: <i8 as funty::Integral>::wrapping_div Unexecuted instantiation: <i8 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <i8 as funty::Integral>::wrapping_rem Unexecuted instantiation: <i8 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <i8 as funty::Integral>::wrapping_neg Unexecuted instantiation: <i8 as funty::Integral>::wrapping_shl Unexecuted instantiation: <i8 as funty::Integral>::wrapping_shr Unexecuted instantiation: <i8 as funty::Integral>::wrapping_pow Unexecuted instantiation: <i8 as funty::Integral>::overflowing_add Unexecuted instantiation: <i8 as funty::Integral>::overflowing_sub Unexecuted instantiation: <i8 as funty::Integral>::overflowing_mul Unexecuted instantiation: <i8 as funty::Integral>::overflowing_div Unexecuted instantiation: <i8 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <i8 as funty::Integral>::overflowing_rem Unexecuted instantiation: <i8 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <i8 as funty::Integral>::overflowing_neg Unexecuted instantiation: <i8 as funty::Integral>::overflowing_shl Unexecuted instantiation: <i8 as funty::Integral>::overflowing_shr Unexecuted instantiation: <i8 as funty::Integral>::overflowing_pow Unexecuted instantiation: <i8 as funty::Integral>::pow Unexecuted instantiation: <i8 as funty::Integral>::div_euclid Unexecuted instantiation: <i8 as funty::Integral>::rem_euclid Unexecuted instantiation: <i16 as funty::Integral>::count_ones Unexecuted instantiation: <i16 as funty::Integral>::count_zeros Unexecuted instantiation: <i16 as funty::Integral>::leading_zeros Unexecuted instantiation: <i16 as funty::Integral>::trailing_zeros Unexecuted instantiation: <i16 as funty::Integral>::leading_ones Unexecuted instantiation: <i16 as funty::Integral>::trailing_ones Unexecuted instantiation: <i16 as funty::Integral>::rotate_left Unexecuted instantiation: <i16 as funty::Integral>::rotate_right Unexecuted instantiation: <i16 as funty::Integral>::swap_bytes Unexecuted instantiation: <i16 as funty::Integral>::reverse_bits Unexecuted instantiation: <i16 as funty::Integral>::from_be Unexecuted instantiation: <i16 as funty::Integral>::from_le Unexecuted instantiation: <i16 as funty::Integral>::to_be Unexecuted instantiation: <i16 as funty::Integral>::to_le Unexecuted instantiation: <i16 as funty::Integral>::checked_add Unexecuted instantiation: <i16 as funty::Integral>::checked_sub Unexecuted instantiation: <i16 as funty::Integral>::checked_mul Unexecuted instantiation: <i16 as funty::Integral>::checked_div Unexecuted instantiation: <i16 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <i16 as funty::Integral>::checked_rem Unexecuted instantiation: <i16 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <i16 as funty::Integral>::checked_neg Unexecuted instantiation: <i16 as funty::Integral>::checked_shl Unexecuted instantiation: <i16 as funty::Integral>::checked_shr Unexecuted instantiation: <i16 as funty::Integral>::checked_pow Unexecuted instantiation: <i16 as funty::Integral>::saturating_add Unexecuted instantiation: <i16 as funty::Integral>::saturating_sub Unexecuted instantiation: <i16 as funty::Integral>::saturating_mul Unexecuted instantiation: <i16 as funty::Integral>::saturating_pow Unexecuted instantiation: <i16 as funty::Integral>::wrapping_add Unexecuted instantiation: <i16 as funty::Integral>::wrapping_sub Unexecuted instantiation: <i16 as funty::Integral>::wrapping_mul Unexecuted instantiation: <i16 as funty::Integral>::wrapping_div Unexecuted instantiation: <i16 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <i16 as funty::Integral>::wrapping_rem Unexecuted instantiation: <i16 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <i16 as funty::Integral>::wrapping_neg Unexecuted instantiation: <i16 as funty::Integral>::wrapping_shl Unexecuted instantiation: <i16 as funty::Integral>::wrapping_shr Unexecuted instantiation: <i16 as funty::Integral>::wrapping_pow Unexecuted instantiation: <i16 as funty::Integral>::overflowing_add Unexecuted instantiation: <i16 as funty::Integral>::overflowing_sub Unexecuted instantiation: <i16 as funty::Integral>::overflowing_mul Unexecuted instantiation: <i16 as funty::Integral>::overflowing_div Unexecuted instantiation: <i16 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <i16 as funty::Integral>::overflowing_rem Unexecuted instantiation: <i16 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <i16 as funty::Integral>::overflowing_neg Unexecuted instantiation: <i16 as funty::Integral>::overflowing_shl Unexecuted instantiation: <i16 as funty::Integral>::overflowing_shr Unexecuted instantiation: <i16 as funty::Integral>::overflowing_pow Unexecuted instantiation: <i16 as funty::Integral>::pow Unexecuted instantiation: <i16 as funty::Integral>::div_euclid Unexecuted instantiation: <i16 as funty::Integral>::rem_euclid Unexecuted instantiation: <i32 as funty::Integral>::count_ones Unexecuted instantiation: <i32 as funty::Integral>::count_zeros Unexecuted instantiation: <i32 as funty::Integral>::leading_zeros Unexecuted instantiation: <i32 as funty::Integral>::trailing_zeros Unexecuted instantiation: <i32 as funty::Integral>::leading_ones Unexecuted instantiation: <i32 as funty::Integral>::trailing_ones Unexecuted instantiation: <i32 as funty::Integral>::rotate_left Unexecuted instantiation: <i32 as funty::Integral>::rotate_right Unexecuted instantiation: <i32 as funty::Integral>::swap_bytes Unexecuted instantiation: <i32 as funty::Integral>::reverse_bits Unexecuted instantiation: <i32 as funty::Integral>::from_be Unexecuted instantiation: <i32 as funty::Integral>::from_le Unexecuted instantiation: <i32 as funty::Integral>::to_be Unexecuted instantiation: <i32 as funty::Integral>::to_le Unexecuted instantiation: <i32 as funty::Integral>::checked_add Unexecuted instantiation: <i32 as funty::Integral>::checked_sub Unexecuted instantiation: <i32 as funty::Integral>::checked_mul Unexecuted instantiation: <i32 as funty::Integral>::checked_div Unexecuted instantiation: <i32 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <i32 as funty::Integral>::checked_rem Unexecuted instantiation: <i32 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <i32 as funty::Integral>::checked_neg Unexecuted instantiation: <i32 as funty::Integral>::checked_shl Unexecuted instantiation: <i32 as funty::Integral>::checked_shr Unexecuted instantiation: <i32 as funty::Integral>::checked_pow Unexecuted instantiation: <i32 as funty::Integral>::saturating_add Unexecuted instantiation: <i32 as funty::Integral>::saturating_sub Unexecuted instantiation: <i32 as funty::Integral>::saturating_mul Unexecuted instantiation: <i32 as funty::Integral>::saturating_pow Unexecuted instantiation: <i32 as funty::Integral>::wrapping_add Unexecuted instantiation: <i32 as funty::Integral>::wrapping_sub Unexecuted instantiation: <i32 as funty::Integral>::wrapping_mul Unexecuted instantiation: <i32 as funty::Integral>::wrapping_div Unexecuted instantiation: <i32 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <i32 as funty::Integral>::wrapping_rem Unexecuted instantiation: <i32 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <i32 as funty::Integral>::wrapping_neg Unexecuted instantiation: <i32 as funty::Integral>::wrapping_shl Unexecuted instantiation: <i32 as funty::Integral>::wrapping_shr Unexecuted instantiation: <i32 as funty::Integral>::wrapping_pow Unexecuted instantiation: <i32 as funty::Integral>::overflowing_add Unexecuted instantiation: <i32 as funty::Integral>::overflowing_sub Unexecuted instantiation: <i32 as funty::Integral>::overflowing_mul Unexecuted instantiation: <i32 as funty::Integral>::overflowing_div Unexecuted instantiation: <i32 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <i32 as funty::Integral>::overflowing_rem Unexecuted instantiation: <i32 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <i32 as funty::Integral>::overflowing_neg Unexecuted instantiation: <i32 as funty::Integral>::overflowing_shl Unexecuted instantiation: <i32 as funty::Integral>::overflowing_shr Unexecuted instantiation: <i32 as funty::Integral>::overflowing_pow Unexecuted instantiation: <i32 as funty::Integral>::pow Unexecuted instantiation: <i32 as funty::Integral>::div_euclid Unexecuted instantiation: <i32 as funty::Integral>::rem_euclid Unexecuted instantiation: <i64 as funty::Integral>::count_ones Unexecuted instantiation: <i64 as funty::Integral>::count_zeros Unexecuted instantiation: <i64 as funty::Integral>::leading_zeros Unexecuted instantiation: <i64 as funty::Integral>::trailing_zeros Unexecuted instantiation: <i64 as funty::Integral>::leading_ones Unexecuted instantiation: <i64 as funty::Integral>::trailing_ones Unexecuted instantiation: <i64 as funty::Integral>::rotate_left Unexecuted instantiation: <i64 as funty::Integral>::rotate_right Unexecuted instantiation: <i64 as funty::Integral>::swap_bytes Unexecuted instantiation: <i64 as funty::Integral>::reverse_bits Unexecuted instantiation: <i64 as funty::Integral>::from_be Unexecuted instantiation: <i64 as funty::Integral>::from_le Unexecuted instantiation: <i64 as funty::Integral>::to_be Unexecuted instantiation: <i64 as funty::Integral>::to_le Unexecuted instantiation: <i64 as funty::Integral>::checked_add Unexecuted instantiation: <i64 as funty::Integral>::checked_sub Unexecuted instantiation: <i64 as funty::Integral>::checked_mul Unexecuted instantiation: <i64 as funty::Integral>::checked_div Unexecuted instantiation: <i64 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <i64 as funty::Integral>::checked_rem Unexecuted instantiation: <i64 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <i64 as funty::Integral>::checked_neg Unexecuted instantiation: <i64 as funty::Integral>::checked_shl Unexecuted instantiation: <i64 as funty::Integral>::checked_shr Unexecuted instantiation: <i64 as funty::Integral>::checked_pow Unexecuted instantiation: <i64 as funty::Integral>::saturating_add Unexecuted instantiation: <i64 as funty::Integral>::saturating_sub Unexecuted instantiation: <i64 as funty::Integral>::saturating_mul Unexecuted instantiation: <i64 as funty::Integral>::saturating_pow Unexecuted instantiation: <i64 as funty::Integral>::wrapping_add Unexecuted instantiation: <i64 as funty::Integral>::wrapping_sub Unexecuted instantiation: <i64 as funty::Integral>::wrapping_mul Unexecuted instantiation: <i64 as funty::Integral>::wrapping_div Unexecuted instantiation: <i64 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <i64 as funty::Integral>::wrapping_rem Unexecuted instantiation: <i64 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <i64 as funty::Integral>::wrapping_neg Unexecuted instantiation: <i64 as funty::Integral>::wrapping_shl Unexecuted instantiation: <i64 as funty::Integral>::wrapping_shr Unexecuted instantiation: <i64 as funty::Integral>::wrapping_pow Unexecuted instantiation: <i64 as funty::Integral>::overflowing_add Unexecuted instantiation: <i64 as funty::Integral>::overflowing_sub Unexecuted instantiation: <i64 as funty::Integral>::overflowing_mul Unexecuted instantiation: <i64 as funty::Integral>::overflowing_div Unexecuted instantiation: <i64 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <i64 as funty::Integral>::overflowing_rem Unexecuted instantiation: <i64 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <i64 as funty::Integral>::overflowing_neg Unexecuted instantiation: <i64 as funty::Integral>::overflowing_shl Unexecuted instantiation: <i64 as funty::Integral>::overflowing_shr Unexecuted instantiation: <i64 as funty::Integral>::overflowing_pow Unexecuted instantiation: <i64 as funty::Integral>::pow Unexecuted instantiation: <i64 as funty::Integral>::div_euclid Unexecuted instantiation: <i64 as funty::Integral>::rem_euclid Unexecuted instantiation: <i128 as funty::Integral>::count_ones Unexecuted instantiation: <i128 as funty::Integral>::count_zeros Unexecuted instantiation: <i128 as funty::Integral>::leading_zeros Unexecuted instantiation: <i128 as funty::Integral>::trailing_zeros Unexecuted instantiation: <i128 as funty::Integral>::leading_ones Unexecuted instantiation: <i128 as funty::Integral>::trailing_ones Unexecuted instantiation: <i128 as funty::Integral>::rotate_left Unexecuted instantiation: <i128 as funty::Integral>::rotate_right Unexecuted instantiation: <i128 as funty::Integral>::swap_bytes Unexecuted instantiation: <i128 as funty::Integral>::reverse_bits Unexecuted instantiation: <i128 as funty::Integral>::from_be Unexecuted instantiation: <i128 as funty::Integral>::from_le Unexecuted instantiation: <i128 as funty::Integral>::to_be Unexecuted instantiation: <i128 as funty::Integral>::to_le Unexecuted instantiation: <i128 as funty::Integral>::checked_add Unexecuted instantiation: <i128 as funty::Integral>::checked_sub Unexecuted instantiation: <i128 as funty::Integral>::checked_mul Unexecuted instantiation: <i128 as funty::Integral>::checked_div Unexecuted instantiation: <i128 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <i128 as funty::Integral>::checked_rem Unexecuted instantiation: <i128 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <i128 as funty::Integral>::checked_neg Unexecuted instantiation: <i128 as funty::Integral>::checked_shl Unexecuted instantiation: <i128 as funty::Integral>::checked_shr Unexecuted instantiation: <i128 as funty::Integral>::checked_pow Unexecuted instantiation: <i128 as funty::Integral>::saturating_add Unexecuted instantiation: <i128 as funty::Integral>::saturating_sub Unexecuted instantiation: <i128 as funty::Integral>::saturating_mul Unexecuted instantiation: <i128 as funty::Integral>::saturating_pow Unexecuted instantiation: <i128 as funty::Integral>::wrapping_add Unexecuted instantiation: <i128 as funty::Integral>::wrapping_sub Unexecuted instantiation: <i128 as funty::Integral>::wrapping_mul Unexecuted instantiation: <i128 as funty::Integral>::wrapping_div Unexecuted instantiation: <i128 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <i128 as funty::Integral>::wrapping_rem Unexecuted instantiation: <i128 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <i128 as funty::Integral>::wrapping_neg Unexecuted instantiation: <i128 as funty::Integral>::wrapping_shl Unexecuted instantiation: <i128 as funty::Integral>::wrapping_shr Unexecuted instantiation: <i128 as funty::Integral>::wrapping_pow Unexecuted instantiation: <i128 as funty::Integral>::overflowing_add Unexecuted instantiation: <i128 as funty::Integral>::overflowing_sub Unexecuted instantiation: <i128 as funty::Integral>::overflowing_mul Unexecuted instantiation: <i128 as funty::Integral>::overflowing_div Unexecuted instantiation: <i128 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <i128 as funty::Integral>::overflowing_rem Unexecuted instantiation: <i128 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <i128 as funty::Integral>::overflowing_neg Unexecuted instantiation: <i128 as funty::Integral>::overflowing_shl Unexecuted instantiation: <i128 as funty::Integral>::overflowing_shr Unexecuted instantiation: <i128 as funty::Integral>::overflowing_pow Unexecuted instantiation: <i128 as funty::Integral>::pow Unexecuted instantiation: <i128 as funty::Integral>::div_euclid Unexecuted instantiation: <i128 as funty::Integral>::rem_euclid Unexecuted instantiation: <isize as funty::Integral>::count_ones Unexecuted instantiation: <isize as funty::Integral>::count_zeros Unexecuted instantiation: <isize as funty::Integral>::leading_zeros Unexecuted instantiation: <isize as funty::Integral>::trailing_zeros Unexecuted instantiation: <isize as funty::Integral>::leading_ones Unexecuted instantiation: <isize as funty::Integral>::trailing_ones Unexecuted instantiation: <isize as funty::Integral>::rotate_left Unexecuted instantiation: <isize as funty::Integral>::rotate_right Unexecuted instantiation: <isize as funty::Integral>::swap_bytes Unexecuted instantiation: <isize as funty::Integral>::reverse_bits Unexecuted instantiation: <isize as funty::Integral>::from_be Unexecuted instantiation: <isize as funty::Integral>::from_le Unexecuted instantiation: <isize as funty::Integral>::to_be Unexecuted instantiation: <isize as funty::Integral>::to_le Unexecuted instantiation: <isize as funty::Integral>::checked_add Unexecuted instantiation: <isize as funty::Integral>::checked_sub Unexecuted instantiation: <isize as funty::Integral>::checked_mul Unexecuted instantiation: <isize as funty::Integral>::checked_div Unexecuted instantiation: <isize as funty::Integral>::checked_div_euclid Unexecuted instantiation: <isize as funty::Integral>::checked_rem Unexecuted instantiation: <isize as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <isize as funty::Integral>::checked_neg Unexecuted instantiation: <isize as funty::Integral>::checked_shl Unexecuted instantiation: <isize as funty::Integral>::checked_shr Unexecuted instantiation: <isize as funty::Integral>::checked_pow Unexecuted instantiation: <isize as funty::Integral>::saturating_add Unexecuted instantiation: <isize as funty::Integral>::saturating_sub Unexecuted instantiation: <isize as funty::Integral>::saturating_mul Unexecuted instantiation: <isize as funty::Integral>::saturating_pow Unexecuted instantiation: <isize as funty::Integral>::wrapping_add Unexecuted instantiation: <isize as funty::Integral>::wrapping_sub Unexecuted instantiation: <isize as funty::Integral>::wrapping_mul Unexecuted instantiation: <isize as funty::Integral>::wrapping_div Unexecuted instantiation: <isize as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <isize as funty::Integral>::wrapping_rem Unexecuted instantiation: <isize as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <isize as funty::Integral>::wrapping_neg Unexecuted instantiation: <isize as funty::Integral>::wrapping_shl Unexecuted instantiation: <isize as funty::Integral>::wrapping_shr Unexecuted instantiation: <isize as funty::Integral>::wrapping_pow Unexecuted instantiation: <isize as funty::Integral>::overflowing_add Unexecuted instantiation: <isize as funty::Integral>::overflowing_sub Unexecuted instantiation: <isize as funty::Integral>::overflowing_mul Unexecuted instantiation: <isize as funty::Integral>::overflowing_div Unexecuted instantiation: <isize as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <isize as funty::Integral>::overflowing_rem Unexecuted instantiation: <isize as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <isize as funty::Integral>::overflowing_neg Unexecuted instantiation: <isize as funty::Integral>::overflowing_shl Unexecuted instantiation: <isize as funty::Integral>::overflowing_shr Unexecuted instantiation: <isize as funty::Integral>::overflowing_pow Unexecuted instantiation: <isize as funty::Integral>::pow Unexecuted instantiation: <isize as funty::Integral>::div_euclid Unexecuted instantiation: <isize as funty::Integral>::rem_euclid Unexecuted instantiation: <u8 as funty::Integral>::count_ones <u8 as funty::Integral>::count_zeros Line | Count | Source | 1339 | 4.62k | fn $name(self$(, $arg: $t)*) $(-> $ret)? | 1340 | 4.62k | { | 1341 | 4.62k | <Self>::$name(self$(, $arg)*) | 1342 | 4.62k | } |
Unexecuted instantiation: <u8 as funty::Integral>::leading_zeros Unexecuted instantiation: <u8 as funty::Integral>::trailing_zeros Unexecuted instantiation: <u8 as funty::Integral>::leading_ones Unexecuted instantiation: <u8 as funty::Integral>::trailing_ones Unexecuted instantiation: <u8 as funty::Integral>::rotate_left Unexecuted instantiation: <u8 as funty::Integral>::rotate_right Unexecuted instantiation: <u8 as funty::Integral>::swap_bytes Unexecuted instantiation: <u8 as funty::Integral>::reverse_bits Unexecuted instantiation: <u8 as funty::Integral>::from_be Unexecuted instantiation: <u8 as funty::Integral>::from_le Unexecuted instantiation: <u8 as funty::Integral>::to_be Unexecuted instantiation: <u8 as funty::Integral>::to_le Unexecuted instantiation: <u8 as funty::Integral>::checked_add Unexecuted instantiation: <u8 as funty::Integral>::checked_sub Unexecuted instantiation: <u8 as funty::Integral>::checked_mul Unexecuted instantiation: <u8 as funty::Integral>::checked_div Unexecuted instantiation: <u8 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <u8 as funty::Integral>::checked_rem Unexecuted instantiation: <u8 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <u8 as funty::Integral>::checked_neg Unexecuted instantiation: <u8 as funty::Integral>::checked_shl Unexecuted instantiation: <u8 as funty::Integral>::checked_shr Unexecuted instantiation: <u8 as funty::Integral>::checked_pow Unexecuted instantiation: <u8 as funty::Integral>::saturating_add Unexecuted instantiation: <u8 as funty::Integral>::saturating_sub Unexecuted instantiation: <u8 as funty::Integral>::saturating_mul Unexecuted instantiation: <u8 as funty::Integral>::saturating_pow Unexecuted instantiation: <u8 as funty::Integral>::wrapping_add Unexecuted instantiation: <u8 as funty::Integral>::wrapping_sub Unexecuted instantiation: <u8 as funty::Integral>::wrapping_mul Unexecuted instantiation: <u8 as funty::Integral>::wrapping_div Unexecuted instantiation: <u8 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <u8 as funty::Integral>::wrapping_rem Unexecuted instantiation: <u8 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <u8 as funty::Integral>::wrapping_neg Unexecuted instantiation: <u8 as funty::Integral>::wrapping_shl Unexecuted instantiation: <u8 as funty::Integral>::wrapping_shr Unexecuted instantiation: <u8 as funty::Integral>::wrapping_pow Unexecuted instantiation: <u8 as funty::Integral>::overflowing_add Unexecuted instantiation: <u8 as funty::Integral>::overflowing_sub Unexecuted instantiation: <u8 as funty::Integral>::overflowing_mul Unexecuted instantiation: <u8 as funty::Integral>::overflowing_div Unexecuted instantiation: <u8 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <u8 as funty::Integral>::overflowing_rem Unexecuted instantiation: <u8 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <u8 as funty::Integral>::overflowing_neg Unexecuted instantiation: <u8 as funty::Integral>::overflowing_shl Unexecuted instantiation: <u8 as funty::Integral>::overflowing_shr Unexecuted instantiation: <u8 as funty::Integral>::overflowing_pow Unexecuted instantiation: <u8 as funty::Integral>::pow Unexecuted instantiation: <u8 as funty::Integral>::div_euclid Unexecuted instantiation: <u8 as funty::Integral>::rem_euclid Unexecuted instantiation: <u16 as funty::Integral>::count_ones Unexecuted instantiation: <u16 as funty::Integral>::count_zeros Unexecuted instantiation: <u16 as funty::Integral>::leading_zeros Unexecuted instantiation: <u16 as funty::Integral>::trailing_zeros Unexecuted instantiation: <u16 as funty::Integral>::leading_ones Unexecuted instantiation: <u16 as funty::Integral>::trailing_ones Unexecuted instantiation: <u16 as funty::Integral>::rotate_left Unexecuted instantiation: <u16 as funty::Integral>::rotate_right Unexecuted instantiation: <u16 as funty::Integral>::swap_bytes Unexecuted instantiation: <u16 as funty::Integral>::reverse_bits Unexecuted instantiation: <u16 as funty::Integral>::from_be Unexecuted instantiation: <u16 as funty::Integral>::from_le Unexecuted instantiation: <u16 as funty::Integral>::to_be Unexecuted instantiation: <u16 as funty::Integral>::to_le Unexecuted instantiation: <u16 as funty::Integral>::checked_add Unexecuted instantiation: <u16 as funty::Integral>::checked_sub Unexecuted instantiation: <u16 as funty::Integral>::checked_mul Unexecuted instantiation: <u16 as funty::Integral>::checked_div Unexecuted instantiation: <u16 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <u16 as funty::Integral>::checked_rem Unexecuted instantiation: <u16 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <u16 as funty::Integral>::checked_neg Unexecuted instantiation: <u16 as funty::Integral>::checked_shl Unexecuted instantiation: <u16 as funty::Integral>::checked_shr Unexecuted instantiation: <u16 as funty::Integral>::checked_pow Unexecuted instantiation: <u16 as funty::Integral>::saturating_add Unexecuted instantiation: <u16 as funty::Integral>::saturating_sub Unexecuted instantiation: <u16 as funty::Integral>::saturating_mul Unexecuted instantiation: <u16 as funty::Integral>::saturating_pow Unexecuted instantiation: <u16 as funty::Integral>::wrapping_add Unexecuted instantiation: <u16 as funty::Integral>::wrapping_sub Unexecuted instantiation: <u16 as funty::Integral>::wrapping_mul Unexecuted instantiation: <u16 as funty::Integral>::wrapping_div Unexecuted instantiation: <u16 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <u16 as funty::Integral>::wrapping_rem Unexecuted instantiation: <u16 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <u16 as funty::Integral>::wrapping_neg Unexecuted instantiation: <u16 as funty::Integral>::wrapping_shl Unexecuted instantiation: <u16 as funty::Integral>::wrapping_shr Unexecuted instantiation: <u16 as funty::Integral>::wrapping_pow Unexecuted instantiation: <u16 as funty::Integral>::overflowing_add Unexecuted instantiation: <u16 as funty::Integral>::overflowing_sub Unexecuted instantiation: <u16 as funty::Integral>::overflowing_mul Unexecuted instantiation: <u16 as funty::Integral>::overflowing_div Unexecuted instantiation: <u16 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <u16 as funty::Integral>::overflowing_rem Unexecuted instantiation: <u16 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <u16 as funty::Integral>::overflowing_neg Unexecuted instantiation: <u16 as funty::Integral>::overflowing_shl Unexecuted instantiation: <u16 as funty::Integral>::overflowing_shr Unexecuted instantiation: <u16 as funty::Integral>::overflowing_pow Unexecuted instantiation: <u16 as funty::Integral>::pow Unexecuted instantiation: <u16 as funty::Integral>::div_euclid Unexecuted instantiation: <u16 as funty::Integral>::rem_euclid Unexecuted instantiation: <u32 as funty::Integral>::count_ones Unexecuted instantiation: <u32 as funty::Integral>::count_zeros Unexecuted instantiation: <u32 as funty::Integral>::leading_zeros Unexecuted instantiation: <u32 as funty::Integral>::trailing_zeros Unexecuted instantiation: <u32 as funty::Integral>::leading_ones Unexecuted instantiation: <u32 as funty::Integral>::trailing_ones Unexecuted instantiation: <u32 as funty::Integral>::rotate_left Unexecuted instantiation: <u32 as funty::Integral>::rotate_right Unexecuted instantiation: <u32 as funty::Integral>::swap_bytes Unexecuted instantiation: <u32 as funty::Integral>::reverse_bits Unexecuted instantiation: <u32 as funty::Integral>::from_be Unexecuted instantiation: <u32 as funty::Integral>::from_le Unexecuted instantiation: <u32 as funty::Integral>::to_be Unexecuted instantiation: <u32 as funty::Integral>::to_le Unexecuted instantiation: <u32 as funty::Integral>::checked_add Unexecuted instantiation: <u32 as funty::Integral>::checked_sub Unexecuted instantiation: <u32 as funty::Integral>::checked_mul Unexecuted instantiation: <u32 as funty::Integral>::checked_div Unexecuted instantiation: <u32 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <u32 as funty::Integral>::checked_rem Unexecuted instantiation: <u32 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <u32 as funty::Integral>::checked_neg Unexecuted instantiation: <u32 as funty::Integral>::checked_shl Unexecuted instantiation: <u32 as funty::Integral>::checked_shr Unexecuted instantiation: <u32 as funty::Integral>::checked_pow Unexecuted instantiation: <u32 as funty::Integral>::saturating_add Unexecuted instantiation: <u32 as funty::Integral>::saturating_sub Unexecuted instantiation: <u32 as funty::Integral>::saturating_mul Unexecuted instantiation: <u32 as funty::Integral>::saturating_pow Unexecuted instantiation: <u32 as funty::Integral>::wrapping_add Unexecuted instantiation: <u32 as funty::Integral>::wrapping_sub Unexecuted instantiation: <u32 as funty::Integral>::wrapping_mul Unexecuted instantiation: <u32 as funty::Integral>::wrapping_div Unexecuted instantiation: <u32 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <u32 as funty::Integral>::wrapping_rem Unexecuted instantiation: <u32 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <u32 as funty::Integral>::wrapping_neg Unexecuted instantiation: <u32 as funty::Integral>::wrapping_shl Unexecuted instantiation: <u32 as funty::Integral>::wrapping_shr Unexecuted instantiation: <u32 as funty::Integral>::wrapping_pow Unexecuted instantiation: <u32 as funty::Integral>::overflowing_add Unexecuted instantiation: <u32 as funty::Integral>::overflowing_sub Unexecuted instantiation: <u32 as funty::Integral>::overflowing_mul Unexecuted instantiation: <u32 as funty::Integral>::overflowing_div Unexecuted instantiation: <u32 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <u32 as funty::Integral>::overflowing_rem Unexecuted instantiation: <u32 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <u32 as funty::Integral>::overflowing_neg Unexecuted instantiation: <u32 as funty::Integral>::overflowing_shl Unexecuted instantiation: <u32 as funty::Integral>::overflowing_shr Unexecuted instantiation: <u32 as funty::Integral>::overflowing_pow Unexecuted instantiation: <u32 as funty::Integral>::pow Unexecuted instantiation: <u32 as funty::Integral>::div_euclid Unexecuted instantiation: <u32 as funty::Integral>::rem_euclid Unexecuted instantiation: <u64 as funty::Integral>::count_ones Unexecuted instantiation: <u64 as funty::Integral>::count_zeros Unexecuted instantiation: <u64 as funty::Integral>::leading_zeros Unexecuted instantiation: <u64 as funty::Integral>::trailing_zeros Unexecuted instantiation: <u64 as funty::Integral>::leading_ones Unexecuted instantiation: <u64 as funty::Integral>::trailing_ones Unexecuted instantiation: <u64 as funty::Integral>::rotate_left Unexecuted instantiation: <u64 as funty::Integral>::rotate_right Unexecuted instantiation: <u64 as funty::Integral>::swap_bytes Unexecuted instantiation: <u64 as funty::Integral>::reverse_bits Unexecuted instantiation: <u64 as funty::Integral>::from_be Unexecuted instantiation: <u64 as funty::Integral>::from_le Unexecuted instantiation: <u64 as funty::Integral>::to_be Unexecuted instantiation: <u64 as funty::Integral>::to_le Unexecuted instantiation: <u64 as funty::Integral>::checked_add Unexecuted instantiation: <u64 as funty::Integral>::checked_sub Unexecuted instantiation: <u64 as funty::Integral>::checked_mul Unexecuted instantiation: <u64 as funty::Integral>::checked_div Unexecuted instantiation: <u64 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <u64 as funty::Integral>::checked_rem Unexecuted instantiation: <u64 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <u64 as funty::Integral>::checked_neg Unexecuted instantiation: <u64 as funty::Integral>::checked_shl Unexecuted instantiation: <u64 as funty::Integral>::checked_shr Unexecuted instantiation: <u64 as funty::Integral>::checked_pow Unexecuted instantiation: <u64 as funty::Integral>::saturating_add Unexecuted instantiation: <u64 as funty::Integral>::saturating_sub Unexecuted instantiation: <u64 as funty::Integral>::saturating_mul Unexecuted instantiation: <u64 as funty::Integral>::saturating_pow Unexecuted instantiation: <u64 as funty::Integral>::wrapping_add Unexecuted instantiation: <u64 as funty::Integral>::wrapping_sub Unexecuted instantiation: <u64 as funty::Integral>::wrapping_mul Unexecuted instantiation: <u64 as funty::Integral>::wrapping_div Unexecuted instantiation: <u64 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <u64 as funty::Integral>::wrapping_rem Unexecuted instantiation: <u64 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <u64 as funty::Integral>::wrapping_neg Unexecuted instantiation: <u64 as funty::Integral>::wrapping_shl Unexecuted instantiation: <u64 as funty::Integral>::wrapping_shr Unexecuted instantiation: <u64 as funty::Integral>::wrapping_pow Unexecuted instantiation: <u64 as funty::Integral>::overflowing_add Unexecuted instantiation: <u64 as funty::Integral>::overflowing_sub Unexecuted instantiation: <u64 as funty::Integral>::overflowing_mul Unexecuted instantiation: <u64 as funty::Integral>::overflowing_div Unexecuted instantiation: <u64 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <u64 as funty::Integral>::overflowing_rem Unexecuted instantiation: <u64 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <u64 as funty::Integral>::overflowing_neg Unexecuted instantiation: <u64 as funty::Integral>::overflowing_shl Unexecuted instantiation: <u64 as funty::Integral>::overflowing_shr Unexecuted instantiation: <u64 as funty::Integral>::overflowing_pow Unexecuted instantiation: <u64 as funty::Integral>::pow Unexecuted instantiation: <u64 as funty::Integral>::div_euclid Unexecuted instantiation: <u64 as funty::Integral>::rem_euclid Unexecuted instantiation: <u128 as funty::Integral>::count_ones Unexecuted instantiation: <u128 as funty::Integral>::count_zeros Unexecuted instantiation: <u128 as funty::Integral>::leading_zeros Unexecuted instantiation: <u128 as funty::Integral>::trailing_zeros Unexecuted instantiation: <u128 as funty::Integral>::leading_ones Unexecuted instantiation: <u128 as funty::Integral>::trailing_ones Unexecuted instantiation: <u128 as funty::Integral>::rotate_left Unexecuted instantiation: <u128 as funty::Integral>::rotate_right Unexecuted instantiation: <u128 as funty::Integral>::swap_bytes Unexecuted instantiation: <u128 as funty::Integral>::reverse_bits Unexecuted instantiation: <u128 as funty::Integral>::from_be Unexecuted instantiation: <u128 as funty::Integral>::from_le Unexecuted instantiation: <u128 as funty::Integral>::to_be Unexecuted instantiation: <u128 as funty::Integral>::to_le Unexecuted instantiation: <u128 as funty::Integral>::checked_add Unexecuted instantiation: <u128 as funty::Integral>::checked_sub Unexecuted instantiation: <u128 as funty::Integral>::checked_mul Unexecuted instantiation: <u128 as funty::Integral>::checked_div Unexecuted instantiation: <u128 as funty::Integral>::checked_div_euclid Unexecuted instantiation: <u128 as funty::Integral>::checked_rem Unexecuted instantiation: <u128 as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <u128 as funty::Integral>::checked_neg Unexecuted instantiation: <u128 as funty::Integral>::checked_shl Unexecuted instantiation: <u128 as funty::Integral>::checked_shr Unexecuted instantiation: <u128 as funty::Integral>::checked_pow Unexecuted instantiation: <u128 as funty::Integral>::saturating_add Unexecuted instantiation: <u128 as funty::Integral>::saturating_sub Unexecuted instantiation: <u128 as funty::Integral>::saturating_mul Unexecuted instantiation: <u128 as funty::Integral>::saturating_pow Unexecuted instantiation: <u128 as funty::Integral>::wrapping_add Unexecuted instantiation: <u128 as funty::Integral>::wrapping_sub Unexecuted instantiation: <u128 as funty::Integral>::wrapping_mul Unexecuted instantiation: <u128 as funty::Integral>::wrapping_div Unexecuted instantiation: <u128 as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <u128 as funty::Integral>::wrapping_rem Unexecuted instantiation: <u128 as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <u128 as funty::Integral>::wrapping_neg Unexecuted instantiation: <u128 as funty::Integral>::wrapping_shl Unexecuted instantiation: <u128 as funty::Integral>::wrapping_shr Unexecuted instantiation: <u128 as funty::Integral>::wrapping_pow Unexecuted instantiation: <u128 as funty::Integral>::overflowing_add Unexecuted instantiation: <u128 as funty::Integral>::overflowing_sub Unexecuted instantiation: <u128 as funty::Integral>::overflowing_mul Unexecuted instantiation: <u128 as funty::Integral>::overflowing_div Unexecuted instantiation: <u128 as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <u128 as funty::Integral>::overflowing_rem Unexecuted instantiation: <u128 as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <u128 as funty::Integral>::overflowing_neg Unexecuted instantiation: <u128 as funty::Integral>::overflowing_shl Unexecuted instantiation: <u128 as funty::Integral>::overflowing_shr Unexecuted instantiation: <u128 as funty::Integral>::overflowing_pow Unexecuted instantiation: <u128 as funty::Integral>::pow Unexecuted instantiation: <u128 as funty::Integral>::div_euclid Unexecuted instantiation: <u128 as funty::Integral>::rem_euclid Unexecuted instantiation: <usize as funty::Integral>::count_ones Unexecuted instantiation: <usize as funty::Integral>::count_zeros Unexecuted instantiation: <usize as funty::Integral>::leading_zeros Unexecuted instantiation: <usize as funty::Integral>::trailing_zeros Unexecuted instantiation: <usize as funty::Integral>::leading_ones Unexecuted instantiation: <usize as funty::Integral>::trailing_ones Unexecuted instantiation: <usize as funty::Integral>::rotate_left Unexecuted instantiation: <usize as funty::Integral>::rotate_right Unexecuted instantiation: <usize as funty::Integral>::swap_bytes Unexecuted instantiation: <usize as funty::Integral>::reverse_bits Unexecuted instantiation: <usize as funty::Integral>::from_be Unexecuted instantiation: <usize as funty::Integral>::from_le Unexecuted instantiation: <usize as funty::Integral>::to_be Unexecuted instantiation: <usize as funty::Integral>::to_le Unexecuted instantiation: <usize as funty::Integral>::checked_add Unexecuted instantiation: <usize as funty::Integral>::checked_sub Unexecuted instantiation: <usize as funty::Integral>::checked_mul Unexecuted instantiation: <usize as funty::Integral>::checked_div Unexecuted instantiation: <usize as funty::Integral>::checked_div_euclid Unexecuted instantiation: <usize as funty::Integral>::checked_rem Unexecuted instantiation: <usize as funty::Integral>::checked_rem_euclid Unexecuted instantiation: <usize as funty::Integral>::checked_neg Unexecuted instantiation: <usize as funty::Integral>::checked_shl Unexecuted instantiation: <usize as funty::Integral>::checked_shr Unexecuted instantiation: <usize as funty::Integral>::checked_pow Unexecuted instantiation: <usize as funty::Integral>::saturating_add Unexecuted instantiation: <usize as funty::Integral>::saturating_sub Unexecuted instantiation: <usize as funty::Integral>::saturating_mul Unexecuted instantiation: <usize as funty::Integral>::saturating_pow Unexecuted instantiation: <usize as funty::Integral>::wrapping_add Unexecuted instantiation: <usize as funty::Integral>::wrapping_sub Unexecuted instantiation: <usize as funty::Integral>::wrapping_mul Unexecuted instantiation: <usize as funty::Integral>::wrapping_div Unexecuted instantiation: <usize as funty::Integral>::wrapping_div_euclid Unexecuted instantiation: <usize as funty::Integral>::wrapping_rem Unexecuted instantiation: <usize as funty::Integral>::wrapping_rem_euclid Unexecuted instantiation: <usize as funty::Integral>::wrapping_neg Unexecuted instantiation: <usize as funty::Integral>::wrapping_shl Unexecuted instantiation: <usize as funty::Integral>::wrapping_shr Unexecuted instantiation: <usize as funty::Integral>::wrapping_pow Unexecuted instantiation: <usize as funty::Integral>::overflowing_add Unexecuted instantiation: <usize as funty::Integral>::overflowing_sub Unexecuted instantiation: <usize as funty::Integral>::overflowing_mul Unexecuted instantiation: <usize as funty::Integral>::overflowing_div Unexecuted instantiation: <usize as funty::Integral>::overflowing_div_euclid Unexecuted instantiation: <usize as funty::Integral>::overflowing_rem Unexecuted instantiation: <usize as funty::Integral>::overflowing_rem_euclid Unexecuted instantiation: <usize as funty::Integral>::overflowing_neg Unexecuted instantiation: <usize as funty::Integral>::overflowing_shl Unexecuted instantiation: <usize as funty::Integral>::overflowing_shr Unexecuted instantiation: <usize as funty::Integral>::overflowing_pow Unexecuted instantiation: <usize as funty::Integral>::pow Unexecuted instantiation: <usize as funty::Integral>::div_euclid Unexecuted instantiation: <usize as funty::Integral>::rem_euclid Unexecuted instantiation: <i8 as funty::Signed>::checked_abs Unexecuted instantiation: <i8 as funty::Signed>::wrapping_abs Unexecuted instantiation: <i8 as funty::Signed>::overflowing_abs Unexecuted instantiation: <i8 as funty::Signed>::abs Unexecuted instantiation: <i8 as funty::Signed>::signum Unexecuted instantiation: <i8 as funty::Signed>::is_positive Unexecuted instantiation: <i8 as funty::Signed>::is_negative Unexecuted instantiation: <i16 as funty::Signed>::checked_abs Unexecuted instantiation: <i16 as funty::Signed>::wrapping_abs Unexecuted instantiation: <i16 as funty::Signed>::overflowing_abs Unexecuted instantiation: <i16 as funty::Signed>::abs Unexecuted instantiation: <i16 as funty::Signed>::signum Unexecuted instantiation: <i16 as funty::Signed>::is_positive Unexecuted instantiation: <i16 as funty::Signed>::is_negative Unexecuted instantiation: <i32 as funty::Signed>::checked_abs Unexecuted instantiation: <i32 as funty::Signed>::wrapping_abs Unexecuted instantiation: <i32 as funty::Signed>::overflowing_abs Unexecuted instantiation: <i32 as funty::Signed>::abs Unexecuted instantiation: <i32 as funty::Signed>::signum Unexecuted instantiation: <i32 as funty::Signed>::is_positive Unexecuted instantiation: <i32 as funty::Signed>::is_negative Unexecuted instantiation: <i64 as funty::Signed>::checked_abs Unexecuted instantiation: <i64 as funty::Signed>::wrapping_abs Unexecuted instantiation: <i64 as funty::Signed>::overflowing_abs Unexecuted instantiation: <i64 as funty::Signed>::abs Unexecuted instantiation: <i64 as funty::Signed>::signum Unexecuted instantiation: <i64 as funty::Signed>::is_positive Unexecuted instantiation: <i64 as funty::Signed>::is_negative Unexecuted instantiation: <i128 as funty::Signed>::checked_abs Unexecuted instantiation: <i128 as funty::Signed>::wrapping_abs Unexecuted instantiation: <i128 as funty::Signed>::overflowing_abs Unexecuted instantiation: <i128 as funty::Signed>::abs Unexecuted instantiation: <i128 as funty::Signed>::signum Unexecuted instantiation: <i128 as funty::Signed>::is_positive Unexecuted instantiation: <i128 as funty::Signed>::is_negative Unexecuted instantiation: <isize as funty::Signed>::checked_abs Unexecuted instantiation: <isize as funty::Signed>::wrapping_abs Unexecuted instantiation: <isize as funty::Signed>::overflowing_abs Unexecuted instantiation: <isize as funty::Signed>::abs Unexecuted instantiation: <isize as funty::Signed>::signum Unexecuted instantiation: <isize as funty::Signed>::is_positive Unexecuted instantiation: <isize as funty::Signed>::is_negative Unexecuted instantiation: <u8 as funty::Unsigned>::is_power_of_two Unexecuted instantiation: <u8 as funty::Unsigned>::next_power_of_two Unexecuted instantiation: <u8 as funty::Unsigned>::checked_next_power_of_two Unexecuted instantiation: <u16 as funty::Unsigned>::is_power_of_two Unexecuted instantiation: <u16 as funty::Unsigned>::next_power_of_two Unexecuted instantiation: <u16 as funty::Unsigned>::checked_next_power_of_two Unexecuted instantiation: <u32 as funty::Unsigned>::is_power_of_two Unexecuted instantiation: <u32 as funty::Unsigned>::next_power_of_two Unexecuted instantiation: <u32 as funty::Unsigned>::checked_next_power_of_two Unexecuted instantiation: <u64 as funty::Unsigned>::is_power_of_two Unexecuted instantiation: <u64 as funty::Unsigned>::next_power_of_two Unexecuted instantiation: <u64 as funty::Unsigned>::checked_next_power_of_two Unexecuted instantiation: <u128 as funty::Unsigned>::is_power_of_two Unexecuted instantiation: <u128 as funty::Unsigned>::next_power_of_two Unexecuted instantiation: <u128 as funty::Unsigned>::checked_next_power_of_two Unexecuted instantiation: <usize as funty::Unsigned>::is_power_of_two Unexecuted instantiation: <usize as funty::Unsigned>::next_power_of_two Unexecuted instantiation: <usize as funty::Unsigned>::checked_next_power_of_two Unexecuted instantiation: <f32 as funty::Floating>::is_nan Unexecuted instantiation: <f32 as funty::Floating>::is_infinite Unexecuted instantiation: <f32 as funty::Floating>::is_finite Unexecuted instantiation: <f32 as funty::Floating>::is_normal Unexecuted instantiation: <f32 as funty::Floating>::classify Unexecuted instantiation: <f32 as funty::Floating>::is_sign_positive Unexecuted instantiation: <f32 as funty::Floating>::is_sign_negative Unexecuted instantiation: <f32 as funty::Floating>::recip Unexecuted instantiation: <f32 as funty::Floating>::to_degrees Unexecuted instantiation: <f32 as funty::Floating>::to_radians Unexecuted instantiation: <f32 as funty::Floating>::max Unexecuted instantiation: <f32 as funty::Floating>::min Unexecuted instantiation: <f32 as funty::Floating>::to_bits Unexecuted instantiation: <f64 as funty::Floating>::is_nan Unexecuted instantiation: <f64 as funty::Floating>::is_infinite Unexecuted instantiation: <f64 as funty::Floating>::is_finite Unexecuted instantiation: <f64 as funty::Floating>::is_normal Unexecuted instantiation: <f64 as funty::Floating>::classify Unexecuted instantiation: <f64 as funty::Floating>::is_sign_positive Unexecuted instantiation: <f64 as funty::Floating>::is_sign_negative Unexecuted instantiation: <f64 as funty::Floating>::recip Unexecuted instantiation: <f64 as funty::Floating>::to_degrees Unexecuted instantiation: <f64 as funty::Floating>::to_radians Unexecuted instantiation: <f64 as funty::Floating>::max Unexecuted instantiation: <f64 as funty::Floating>::min Unexecuted instantiation: <f64 as funty::Floating>::to_bits |
1343 | | |
1344 | | func!($($tt)*); |
1345 | | }; |
1346 | | ( |
1347 | | $(@$std:literal)? |
1348 | | $name:ident(&self$(, $arg:ident: $t:ty)*) $(-> $ret:ty)?; |
1349 | | $($tt:tt)* |
1350 | | ) => { |
1351 | | $(#[cfg(feature = $std)])? |
1352 | | fn $name(&self$(, $arg: $t)*) $(-> $ret)? |
1353 | | { |
1354 | | <Self>::$name(&self$(, $arg )*) |
1355 | | } |
1356 | | |
1357 | | func!($($tt)*); |
1358 | | }; |
1359 | | ( |
1360 | | $(@$std:literal)? |
1361 | | $name:ident(&mut self$(, $arg:ident: $t:ty)*) $(-> $ret:ty)?; |
1362 | | $($tt:tt)* |
1363 | | ) => { |
1364 | | $(#[cfg(feature = $std)])? |
1365 | | fn $name(&mut self$(, $arg: $t)*) $(-> $ret)? |
1366 | | { |
1367 | | <Self>::$name(&mut self$(, $arg)*) |
1368 | | } |
1369 | | |
1370 | | func!($($tt)*); |
1371 | | }; |
1372 | | ( |
1373 | | $(@$std:literal)? |
1374 | | $name:ident($($arg:ident: $t:ty),* $(,)?) $(-> $ret:ty)?; |
1375 | | $($tt:tt)* |
1376 | | ) => { |
1377 | | $(#[cfg(feature = $std)])? |
1378 | 0 | fn $name($($arg: $t),*) $(-> $ret)? |
1379 | 0 | { |
1380 | 0 | <Self>::$name($($arg),*) |
1381 | 0 | } Unexecuted instantiation: <i8 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <i8 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <i8 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <i16 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <i16 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <i16 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <i32 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <i32 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <i32 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <i64 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <i64 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <i64 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <i128 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <i128 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <i128 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <isize as funty::Numeric>::from_be_bytes Unexecuted instantiation: <isize as funty::Numeric>::from_le_bytes Unexecuted instantiation: <isize as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <u8 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <u8 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <u8 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <u16 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <u16 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <u16 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <u32 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <u32 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <u32 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <u64 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <u64 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <u64 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <u128 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <u128 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <u128 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <usize as funty::Numeric>::from_be_bytes Unexecuted instantiation: <usize as funty::Numeric>::from_le_bytes Unexecuted instantiation: <usize as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <f32 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <f32 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <f32 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <f64 as funty::Numeric>::from_be_bytes Unexecuted instantiation: <f64 as funty::Numeric>::from_le_bytes Unexecuted instantiation: <f64 as funty::Numeric>::from_ne_bytes Unexecuted instantiation: <i8 as funty::Integral>::min_value Unexecuted instantiation: <i8 as funty::Integral>::max_value Unexecuted instantiation: <i8 as funty::Integral>::from_str_radix Unexecuted instantiation: <i16 as funty::Integral>::min_value Unexecuted instantiation: <i16 as funty::Integral>::max_value Unexecuted instantiation: <i16 as funty::Integral>::from_str_radix Unexecuted instantiation: <i32 as funty::Integral>::min_value Unexecuted instantiation: <i32 as funty::Integral>::max_value Unexecuted instantiation: <i32 as funty::Integral>::from_str_radix Unexecuted instantiation: <i64 as funty::Integral>::min_value Unexecuted instantiation: <i64 as funty::Integral>::max_value Unexecuted instantiation: <i64 as funty::Integral>::from_str_radix Unexecuted instantiation: <i128 as funty::Integral>::min_value Unexecuted instantiation: <i128 as funty::Integral>::max_value Unexecuted instantiation: <i128 as funty::Integral>::from_str_radix Unexecuted instantiation: <isize as funty::Integral>::min_value Unexecuted instantiation: <isize as funty::Integral>::max_value Unexecuted instantiation: <isize as funty::Integral>::from_str_radix Unexecuted instantiation: <u8 as funty::Integral>::min_value Unexecuted instantiation: <u8 as funty::Integral>::max_value Unexecuted instantiation: <u8 as funty::Integral>::from_str_radix Unexecuted instantiation: <u16 as funty::Integral>::min_value Unexecuted instantiation: <u16 as funty::Integral>::max_value Unexecuted instantiation: <u16 as funty::Integral>::from_str_radix Unexecuted instantiation: <u32 as funty::Integral>::min_value Unexecuted instantiation: <u32 as funty::Integral>::max_value Unexecuted instantiation: <u32 as funty::Integral>::from_str_radix Unexecuted instantiation: <u64 as funty::Integral>::min_value Unexecuted instantiation: <u64 as funty::Integral>::max_value Unexecuted instantiation: <u64 as funty::Integral>::from_str_radix Unexecuted instantiation: <u128 as funty::Integral>::min_value Unexecuted instantiation: <u128 as funty::Integral>::max_value Unexecuted instantiation: <u128 as funty::Integral>::from_str_radix Unexecuted instantiation: <usize as funty::Integral>::min_value Unexecuted instantiation: <usize as funty::Integral>::max_value Unexecuted instantiation: <usize as funty::Integral>::from_str_radix Unexecuted instantiation: <f32 as funty::Floating>::from_bits Unexecuted instantiation: <f64 as funty::Floating>::from_bits |
1382 | | |
1383 | | func!($($tt)*); |
1384 | | }; |
1385 | | () => {}; |
1386 | | } |
1387 | | |
1388 | | macro_rules! impl_for { |
1389 | | ( Fundamental => $($t:ty => $is_zero:expr),+ $(,)? ) => { $( |
1390 | | impl Fundamental for $t { |
1391 | | #[inline(always)] |
1392 | | #[allow(clippy::redundant_closure_call)] |
1393 | 0 | fn as_bool(self) -> bool { ($is_zero)(self) } Unexecuted instantiation: <bool as funty::Fundamental>::as_bool Unexecuted instantiation: <char as funty::Fundamental>::as_bool Unexecuted instantiation: <i8 as funty::Fundamental>::as_bool Unexecuted instantiation: <i16 as funty::Fundamental>::as_bool Unexecuted instantiation: <i32 as funty::Fundamental>::as_bool Unexecuted instantiation: <i64 as funty::Fundamental>::as_bool Unexecuted instantiation: <i128 as funty::Fundamental>::as_bool Unexecuted instantiation: <isize as funty::Fundamental>::as_bool Unexecuted instantiation: <u8 as funty::Fundamental>::as_bool Unexecuted instantiation: <u16 as funty::Fundamental>::as_bool Unexecuted instantiation: <u32 as funty::Fundamental>::as_bool Unexecuted instantiation: <u64 as funty::Fundamental>::as_bool Unexecuted instantiation: <u128 as funty::Fundamental>::as_bool Unexecuted instantiation: <usize as funty::Fundamental>::as_bool Unexecuted instantiation: <f32 as funty::Fundamental>::as_bool Unexecuted instantiation: <f64 as funty::Fundamental>::as_bool |
1394 | | |
1395 | | #[inline(always)] |
1396 | 0 | fn as_char(self) -> Option<char> { |
1397 | 0 | core::char::from_u32(self as u32) |
1398 | 0 | } Unexecuted instantiation: <bool as funty::Fundamental>::as_char Unexecuted instantiation: <char as funty::Fundamental>::as_char Unexecuted instantiation: <i8 as funty::Fundamental>::as_char Unexecuted instantiation: <i16 as funty::Fundamental>::as_char Unexecuted instantiation: <i32 as funty::Fundamental>::as_char Unexecuted instantiation: <i64 as funty::Fundamental>::as_char Unexecuted instantiation: <i128 as funty::Fundamental>::as_char Unexecuted instantiation: <isize as funty::Fundamental>::as_char Unexecuted instantiation: <u8 as funty::Fundamental>::as_char Unexecuted instantiation: <u16 as funty::Fundamental>::as_char Unexecuted instantiation: <u32 as funty::Fundamental>::as_char Unexecuted instantiation: <u64 as funty::Fundamental>::as_char Unexecuted instantiation: <u128 as funty::Fundamental>::as_char Unexecuted instantiation: <usize as funty::Fundamental>::as_char Unexecuted instantiation: <f32 as funty::Fundamental>::as_char Unexecuted instantiation: <f64 as funty::Fundamental>::as_char |
1399 | | |
1400 | | #[inline(always)] |
1401 | 0 | fn as_i8(self) -> i8 { self as i8 } Unexecuted instantiation: <bool as funty::Fundamental>::as_i8 Unexecuted instantiation: <char as funty::Fundamental>::as_i8 Unexecuted instantiation: <i8 as funty::Fundamental>::as_i8 Unexecuted instantiation: <i16 as funty::Fundamental>::as_i8 Unexecuted instantiation: <i32 as funty::Fundamental>::as_i8 Unexecuted instantiation: <i64 as funty::Fundamental>::as_i8 Unexecuted instantiation: <i128 as funty::Fundamental>::as_i8 Unexecuted instantiation: <isize as funty::Fundamental>::as_i8 Unexecuted instantiation: <u8 as funty::Fundamental>::as_i8 Unexecuted instantiation: <u16 as funty::Fundamental>::as_i8 Unexecuted instantiation: <u32 as funty::Fundamental>::as_i8 Unexecuted instantiation: <u64 as funty::Fundamental>::as_i8 Unexecuted instantiation: <u128 as funty::Fundamental>::as_i8 Unexecuted instantiation: <usize as funty::Fundamental>::as_i8 Unexecuted instantiation: <f32 as funty::Fundamental>::as_i8 Unexecuted instantiation: <f64 as funty::Fundamental>::as_i8 |
1402 | | |
1403 | | #[inline(always)] |
1404 | 0 | fn as_i16(self) -> i16 { self as i16 } Unexecuted instantiation: <bool as funty::Fundamental>::as_i16 Unexecuted instantiation: <char as funty::Fundamental>::as_i16 Unexecuted instantiation: <i8 as funty::Fundamental>::as_i16 Unexecuted instantiation: <i16 as funty::Fundamental>::as_i16 Unexecuted instantiation: <i32 as funty::Fundamental>::as_i16 Unexecuted instantiation: <i64 as funty::Fundamental>::as_i16 Unexecuted instantiation: <i128 as funty::Fundamental>::as_i16 Unexecuted instantiation: <isize as funty::Fundamental>::as_i16 Unexecuted instantiation: <u8 as funty::Fundamental>::as_i16 Unexecuted instantiation: <u16 as funty::Fundamental>::as_i16 Unexecuted instantiation: <u32 as funty::Fundamental>::as_i16 Unexecuted instantiation: <u64 as funty::Fundamental>::as_i16 Unexecuted instantiation: <u128 as funty::Fundamental>::as_i16 Unexecuted instantiation: <usize as funty::Fundamental>::as_i16 Unexecuted instantiation: <f32 as funty::Fundamental>::as_i16 Unexecuted instantiation: <f64 as funty::Fundamental>::as_i16 |
1405 | | |
1406 | | #[inline(always)] |
1407 | 0 | fn as_i32(self) -> i32 { self as i32 } Unexecuted instantiation: <bool as funty::Fundamental>::as_i32 Unexecuted instantiation: <char as funty::Fundamental>::as_i32 Unexecuted instantiation: <i8 as funty::Fundamental>::as_i32 Unexecuted instantiation: <i16 as funty::Fundamental>::as_i32 Unexecuted instantiation: <i32 as funty::Fundamental>::as_i32 Unexecuted instantiation: <i64 as funty::Fundamental>::as_i32 Unexecuted instantiation: <i128 as funty::Fundamental>::as_i32 Unexecuted instantiation: <isize as funty::Fundamental>::as_i32 Unexecuted instantiation: <u8 as funty::Fundamental>::as_i32 Unexecuted instantiation: <u16 as funty::Fundamental>::as_i32 Unexecuted instantiation: <u32 as funty::Fundamental>::as_i32 Unexecuted instantiation: <u64 as funty::Fundamental>::as_i32 Unexecuted instantiation: <u128 as funty::Fundamental>::as_i32 Unexecuted instantiation: <usize as funty::Fundamental>::as_i32 Unexecuted instantiation: <f32 as funty::Fundamental>::as_i32 Unexecuted instantiation: <f64 as funty::Fundamental>::as_i32 |
1408 | | |
1409 | | #[inline(always)] |
1410 | 0 | fn as_i64(self) -> i64 { self as i64 } Unexecuted instantiation: <bool as funty::Fundamental>::as_i64 Unexecuted instantiation: <char as funty::Fundamental>::as_i64 Unexecuted instantiation: <i8 as funty::Fundamental>::as_i64 Unexecuted instantiation: <i16 as funty::Fundamental>::as_i64 Unexecuted instantiation: <i32 as funty::Fundamental>::as_i64 Unexecuted instantiation: <i64 as funty::Fundamental>::as_i64 Unexecuted instantiation: <i128 as funty::Fundamental>::as_i64 Unexecuted instantiation: <isize as funty::Fundamental>::as_i64 Unexecuted instantiation: <u8 as funty::Fundamental>::as_i64 Unexecuted instantiation: <u16 as funty::Fundamental>::as_i64 Unexecuted instantiation: <u32 as funty::Fundamental>::as_i64 Unexecuted instantiation: <u64 as funty::Fundamental>::as_i64 Unexecuted instantiation: <u128 as funty::Fundamental>::as_i64 Unexecuted instantiation: <usize as funty::Fundamental>::as_i64 Unexecuted instantiation: <f32 as funty::Fundamental>::as_i64 Unexecuted instantiation: <f64 as funty::Fundamental>::as_i64 |
1411 | | |
1412 | | #[inline(always)] |
1413 | 0 | fn as_i128(self) -> i128 { self as i128 } Unexecuted instantiation: <bool as funty::Fundamental>::as_i128 Unexecuted instantiation: <char as funty::Fundamental>::as_i128 Unexecuted instantiation: <i8 as funty::Fundamental>::as_i128 Unexecuted instantiation: <i16 as funty::Fundamental>::as_i128 Unexecuted instantiation: <i32 as funty::Fundamental>::as_i128 Unexecuted instantiation: <i64 as funty::Fundamental>::as_i128 Unexecuted instantiation: <i128 as funty::Fundamental>::as_i128 Unexecuted instantiation: <isize as funty::Fundamental>::as_i128 Unexecuted instantiation: <u8 as funty::Fundamental>::as_i128 Unexecuted instantiation: <u16 as funty::Fundamental>::as_i128 Unexecuted instantiation: <u32 as funty::Fundamental>::as_i128 Unexecuted instantiation: <u64 as funty::Fundamental>::as_i128 Unexecuted instantiation: <u128 as funty::Fundamental>::as_i128 Unexecuted instantiation: <usize as funty::Fundamental>::as_i128 Unexecuted instantiation: <f32 as funty::Fundamental>::as_i128 Unexecuted instantiation: <f64 as funty::Fundamental>::as_i128 |
1414 | | |
1415 | | #[inline(always)] |
1416 | 0 | fn as_isize(self) -> isize { self as isize } Unexecuted instantiation: <bool as funty::Fundamental>::as_isize Unexecuted instantiation: <char as funty::Fundamental>::as_isize Unexecuted instantiation: <i8 as funty::Fundamental>::as_isize Unexecuted instantiation: <i16 as funty::Fundamental>::as_isize Unexecuted instantiation: <i32 as funty::Fundamental>::as_isize Unexecuted instantiation: <i64 as funty::Fundamental>::as_isize Unexecuted instantiation: <i128 as funty::Fundamental>::as_isize Unexecuted instantiation: <isize as funty::Fundamental>::as_isize Unexecuted instantiation: <u8 as funty::Fundamental>::as_isize Unexecuted instantiation: <u16 as funty::Fundamental>::as_isize Unexecuted instantiation: <u32 as funty::Fundamental>::as_isize Unexecuted instantiation: <u64 as funty::Fundamental>::as_isize Unexecuted instantiation: <u128 as funty::Fundamental>::as_isize Unexecuted instantiation: <usize as funty::Fundamental>::as_isize Unexecuted instantiation: <f32 as funty::Fundamental>::as_isize Unexecuted instantiation: <f64 as funty::Fundamental>::as_isize |
1417 | | |
1418 | | #[inline(always)] |
1419 | 0 | fn as_u8(self) -> u8 { self as u8 } Unexecuted instantiation: <bool as funty::Fundamental>::as_u8 Unexecuted instantiation: <char as funty::Fundamental>::as_u8 Unexecuted instantiation: <i8 as funty::Fundamental>::as_u8 Unexecuted instantiation: <i16 as funty::Fundamental>::as_u8 Unexecuted instantiation: <i32 as funty::Fundamental>::as_u8 Unexecuted instantiation: <i64 as funty::Fundamental>::as_u8 Unexecuted instantiation: <i128 as funty::Fundamental>::as_u8 Unexecuted instantiation: <isize as funty::Fundamental>::as_u8 Unexecuted instantiation: <u8 as funty::Fundamental>::as_u8 Unexecuted instantiation: <u16 as funty::Fundamental>::as_u8 Unexecuted instantiation: <u32 as funty::Fundamental>::as_u8 Unexecuted instantiation: <u64 as funty::Fundamental>::as_u8 Unexecuted instantiation: <u128 as funty::Fundamental>::as_u8 Unexecuted instantiation: <usize as funty::Fundamental>::as_u8 Unexecuted instantiation: <f32 as funty::Fundamental>::as_u8 Unexecuted instantiation: <f64 as funty::Fundamental>::as_u8 |
1420 | | |
1421 | | #[inline(always)] |
1422 | 0 | fn as_u16(self) -> u16 { self as u16 } Unexecuted instantiation: <bool as funty::Fundamental>::as_u16 Unexecuted instantiation: <char as funty::Fundamental>::as_u16 Unexecuted instantiation: <i8 as funty::Fundamental>::as_u16 Unexecuted instantiation: <i16 as funty::Fundamental>::as_u16 Unexecuted instantiation: <i32 as funty::Fundamental>::as_u16 Unexecuted instantiation: <i64 as funty::Fundamental>::as_u16 Unexecuted instantiation: <i128 as funty::Fundamental>::as_u16 Unexecuted instantiation: <isize as funty::Fundamental>::as_u16 Unexecuted instantiation: <u8 as funty::Fundamental>::as_u16 Unexecuted instantiation: <u16 as funty::Fundamental>::as_u16 Unexecuted instantiation: <u32 as funty::Fundamental>::as_u16 Unexecuted instantiation: <u64 as funty::Fundamental>::as_u16 Unexecuted instantiation: <u128 as funty::Fundamental>::as_u16 Unexecuted instantiation: <usize as funty::Fundamental>::as_u16 Unexecuted instantiation: <f32 as funty::Fundamental>::as_u16 Unexecuted instantiation: <f64 as funty::Fundamental>::as_u16 |
1423 | | |
1424 | | #[inline(always)] |
1425 | 0 | fn as_u32(self) -> u32 { self as u32 } Unexecuted instantiation: <bool as funty::Fundamental>::as_u32 Unexecuted instantiation: <char as funty::Fundamental>::as_u32 Unexecuted instantiation: <i8 as funty::Fundamental>::as_u32 Unexecuted instantiation: <i16 as funty::Fundamental>::as_u32 Unexecuted instantiation: <i32 as funty::Fundamental>::as_u32 Unexecuted instantiation: <i64 as funty::Fundamental>::as_u32 Unexecuted instantiation: <i128 as funty::Fundamental>::as_u32 Unexecuted instantiation: <isize as funty::Fundamental>::as_u32 Unexecuted instantiation: <u8 as funty::Fundamental>::as_u32 Unexecuted instantiation: <u16 as funty::Fundamental>::as_u32 Unexecuted instantiation: <u32 as funty::Fundamental>::as_u32 Unexecuted instantiation: <u64 as funty::Fundamental>::as_u32 Unexecuted instantiation: <u128 as funty::Fundamental>::as_u32 Unexecuted instantiation: <usize as funty::Fundamental>::as_u32 Unexecuted instantiation: <f32 as funty::Fundamental>::as_u32 Unexecuted instantiation: <f64 as funty::Fundamental>::as_u32 |
1426 | | |
1427 | | #[inline(always)] |
1428 | 0 | fn as_u64(self) -> u64 { self as u64 } Unexecuted instantiation: <bool as funty::Fundamental>::as_u64 Unexecuted instantiation: <char as funty::Fundamental>::as_u64 Unexecuted instantiation: <i8 as funty::Fundamental>::as_u64 Unexecuted instantiation: <i16 as funty::Fundamental>::as_u64 Unexecuted instantiation: <i32 as funty::Fundamental>::as_u64 Unexecuted instantiation: <i64 as funty::Fundamental>::as_u64 Unexecuted instantiation: <i128 as funty::Fundamental>::as_u64 Unexecuted instantiation: <isize as funty::Fundamental>::as_u64 Unexecuted instantiation: <u8 as funty::Fundamental>::as_u64 Unexecuted instantiation: <u16 as funty::Fundamental>::as_u64 Unexecuted instantiation: <u32 as funty::Fundamental>::as_u64 Unexecuted instantiation: <u64 as funty::Fundamental>::as_u64 Unexecuted instantiation: <u128 as funty::Fundamental>::as_u64 Unexecuted instantiation: <usize as funty::Fundamental>::as_u64 Unexecuted instantiation: <f32 as funty::Fundamental>::as_u64 Unexecuted instantiation: <f64 as funty::Fundamental>::as_u64 |
1429 | | |
1430 | | #[inline(always)] |
1431 | 0 | fn as_u128(self) ->u128 { self as u128 } Unexecuted instantiation: <bool as funty::Fundamental>::as_u128 Unexecuted instantiation: <char as funty::Fundamental>::as_u128 Unexecuted instantiation: <i8 as funty::Fundamental>::as_u128 Unexecuted instantiation: <i16 as funty::Fundamental>::as_u128 Unexecuted instantiation: <i32 as funty::Fundamental>::as_u128 Unexecuted instantiation: <i64 as funty::Fundamental>::as_u128 Unexecuted instantiation: <i128 as funty::Fundamental>::as_u128 Unexecuted instantiation: <isize as funty::Fundamental>::as_u128 Unexecuted instantiation: <u8 as funty::Fundamental>::as_u128 Unexecuted instantiation: <u16 as funty::Fundamental>::as_u128 Unexecuted instantiation: <u32 as funty::Fundamental>::as_u128 Unexecuted instantiation: <u64 as funty::Fundamental>::as_u128 Unexecuted instantiation: <u128 as funty::Fundamental>::as_u128 Unexecuted instantiation: <usize as funty::Fundamental>::as_u128 Unexecuted instantiation: <f32 as funty::Fundamental>::as_u128 Unexecuted instantiation: <f64 as funty::Fundamental>::as_u128 |
1432 | | |
1433 | | #[inline(always)] |
1434 | 0 | fn as_usize(self) -> usize { self as usize } Unexecuted instantiation: <bool as funty::Fundamental>::as_usize Unexecuted instantiation: <char as funty::Fundamental>::as_usize Unexecuted instantiation: <i8 as funty::Fundamental>::as_usize Unexecuted instantiation: <i16 as funty::Fundamental>::as_usize Unexecuted instantiation: <i32 as funty::Fundamental>::as_usize Unexecuted instantiation: <i64 as funty::Fundamental>::as_usize Unexecuted instantiation: <i128 as funty::Fundamental>::as_usize Unexecuted instantiation: <isize as funty::Fundamental>::as_usize Unexecuted instantiation: <u8 as funty::Fundamental>::as_usize Unexecuted instantiation: <u16 as funty::Fundamental>::as_usize Unexecuted instantiation: <u32 as funty::Fundamental>::as_usize Unexecuted instantiation: <u64 as funty::Fundamental>::as_usize Unexecuted instantiation: <u128 as funty::Fundamental>::as_usize Unexecuted instantiation: <usize as funty::Fundamental>::as_usize Unexecuted instantiation: <f32 as funty::Fundamental>::as_usize Unexecuted instantiation: <f64 as funty::Fundamental>::as_usize |
1435 | | |
1436 | | #[inline(always)] |
1437 | 0 | fn as_f32(self) -> f32 { self as u32 as f32 } Unexecuted instantiation: <bool as funty::Fundamental>::as_f32 Unexecuted instantiation: <char as funty::Fundamental>::as_f32 Unexecuted instantiation: <i8 as funty::Fundamental>::as_f32 Unexecuted instantiation: <i16 as funty::Fundamental>::as_f32 Unexecuted instantiation: <i32 as funty::Fundamental>::as_f32 Unexecuted instantiation: <i64 as funty::Fundamental>::as_f32 Unexecuted instantiation: <i128 as funty::Fundamental>::as_f32 Unexecuted instantiation: <isize as funty::Fundamental>::as_f32 Unexecuted instantiation: <u8 as funty::Fundamental>::as_f32 Unexecuted instantiation: <u16 as funty::Fundamental>::as_f32 Unexecuted instantiation: <u32 as funty::Fundamental>::as_f32 Unexecuted instantiation: <u64 as funty::Fundamental>::as_f32 Unexecuted instantiation: <u128 as funty::Fundamental>::as_f32 Unexecuted instantiation: <usize as funty::Fundamental>::as_f32 Unexecuted instantiation: <f32 as funty::Fundamental>::as_f32 Unexecuted instantiation: <f64 as funty::Fundamental>::as_f32 |
1438 | | |
1439 | | #[inline(always)] |
1440 | 0 | fn as_f64(self) -> f64 { self as u64 as f64 } Unexecuted instantiation: <bool as funty::Fundamental>::as_f64 Unexecuted instantiation: <char as funty::Fundamental>::as_f64 Unexecuted instantiation: <i8 as funty::Fundamental>::as_f64 Unexecuted instantiation: <i16 as funty::Fundamental>::as_f64 Unexecuted instantiation: <i32 as funty::Fundamental>::as_f64 Unexecuted instantiation: <i64 as funty::Fundamental>::as_f64 Unexecuted instantiation: <i128 as funty::Fundamental>::as_f64 Unexecuted instantiation: <isize as funty::Fundamental>::as_f64 Unexecuted instantiation: <u8 as funty::Fundamental>::as_f64 Unexecuted instantiation: <u16 as funty::Fundamental>::as_f64 Unexecuted instantiation: <u32 as funty::Fundamental>::as_f64 Unexecuted instantiation: <u64 as funty::Fundamental>::as_f64 Unexecuted instantiation: <u128 as funty::Fundamental>::as_f64 Unexecuted instantiation: <usize as funty::Fundamental>::as_f64 Unexecuted instantiation: <f32 as funty::Fundamental>::as_f64 Unexecuted instantiation: <f64 as funty::Fundamental>::as_f64 |
1441 | | } |
1442 | | )+ }; |
1443 | | ( Numeric => $($t:ty),+ $(,)? ) => { $( |
1444 | | impl Numeric for $t { |
1445 | | type Bytes = [u8; core::mem::size_of::<Self>()]; |
1446 | | |
1447 | | func! { |
1448 | | to_be_bytes(self) -> Self::Bytes; |
1449 | | to_le_bytes(self) -> Self::Bytes; |
1450 | | to_ne_bytes(self) -> Self::Bytes; |
1451 | | from_be_bytes(bytes: Self::Bytes) -> Self; |
1452 | | from_le_bytes(bytes: Self::Bytes) -> Self; |
1453 | | from_ne_bytes(bytes: Self::Bytes) -> Self; |
1454 | | } |
1455 | | } |
1456 | | )+ }; |
1457 | | ( Integral => $($t:ty),+ $(,)? ) => { $( |
1458 | | impl Integral for $t { |
1459 | | const ZERO: Self = 0; |
1460 | | const ONE: Self = 1; |
1461 | | const MIN: Self = <Self>::min_value(); |
1462 | | const MAX: Self = <Self>::max_value(); |
1463 | | |
1464 | | const BITS: u32 = <Self>::BITS; |
1465 | | |
1466 | | func! { |
1467 | | min_value() -> Self; |
1468 | | max_value() -> Self; |
1469 | | from_str_radix(src: &str, radix: u32) -> Result<Self, ParseIntError>; |
1470 | | count_ones(self) -> u32; |
1471 | | count_zeros(self) -> u32; |
1472 | | leading_zeros(self) -> u32; |
1473 | | trailing_zeros(self) -> u32; |
1474 | | leading_ones(self) -> u32; |
1475 | | trailing_ones(self) -> u32; |
1476 | | rotate_left(self, n: u32) -> Self; |
1477 | | rotate_right(self, n: u32) -> Self; |
1478 | | swap_bytes(self) -> Self; |
1479 | | reverse_bits(self) -> Self; |
1480 | | from_be(self) -> Self; |
1481 | | from_le(self) -> Self; |
1482 | | to_be(self) -> Self; |
1483 | | to_le(self) -> Self; |
1484 | | checked_add(self, rhs: Self) -> Option<Self>; |
1485 | | checked_sub(self, rhs: Self) -> Option<Self>; |
1486 | | checked_mul(self, rhs: Self) -> Option<Self>; |
1487 | | checked_div(self, rhs: Self) -> Option<Self>; |
1488 | | checked_div_euclid(self, rhs: Self) -> Option<Self>; |
1489 | | checked_rem(self, rhs: Self) -> Option<Self>; |
1490 | | checked_rem_euclid(self, rhs: Self) -> Option<Self>; |
1491 | | checked_neg(self) -> Option<Self>; |
1492 | | checked_shl(self, rhs: u32) -> Option<Self>; |
1493 | | checked_shr(self, rhs: u32) -> Option<Self>; |
1494 | | checked_pow(self, rhs: u32) -> Option<Self>; |
1495 | | saturating_add(self, rhs: Self) -> Self; |
1496 | | saturating_sub(self, rhs: Self) -> Self; |
1497 | | saturating_mul(self, rhs: Self) -> Self; |
1498 | | saturating_pow(self, rhs: u32) -> Self; |
1499 | | wrapping_add(self, rhs: Self) -> Self; |
1500 | | wrapping_sub(self, rhs: Self) -> Self; |
1501 | | wrapping_mul(self, rhs: Self) -> Self; |
1502 | | wrapping_div(self, rhs: Self) -> Self; |
1503 | | wrapping_div_euclid(self, rhs: Self) -> Self; |
1504 | | wrapping_rem(self, rhs: Self) -> Self; |
1505 | | wrapping_rem_euclid(self, rhs: Self) -> Self; |
1506 | | wrapping_neg(self) -> Self; |
1507 | | wrapping_shl(self, rhs: u32) -> Self; |
1508 | | wrapping_shr(self, rhs: u32) -> Self; |
1509 | | wrapping_pow(self, rhs: u32) -> Self; |
1510 | | overflowing_add(self, rhs: Self) -> (Self, bool); |
1511 | | overflowing_sub(self, rhs: Self) -> (Self, bool); |
1512 | | overflowing_mul(self, rhs: Self) -> (Self, bool); |
1513 | | overflowing_div(self, rhs: Self) -> (Self, bool); |
1514 | | overflowing_div_euclid(self, rhs: Self) -> (Self, bool); |
1515 | | overflowing_rem(self, rhs: Self) -> (Self, bool); |
1516 | | overflowing_rem_euclid(self, rhs: Self) -> (Self, bool); |
1517 | | overflowing_neg(self) -> (Self, bool); |
1518 | | overflowing_shl(self, rhs: u32) -> (Self, bool); |
1519 | | overflowing_shr(self, rhs: u32) -> (Self, bool); |
1520 | | overflowing_pow(self, rhs: u32) -> (Self, bool); |
1521 | | pow(self, rhs: u32) -> Self; |
1522 | | div_euclid(self, rhs: Self) -> Self; |
1523 | | rem_euclid(self, rhs: Self) -> Self; |
1524 | | } |
1525 | | } |
1526 | | )+ }; |
1527 | | ( Signed => $($t:ty),+ $(,)? ) => { $( |
1528 | | impl Signed for $t { |
1529 | | func! { |
1530 | | checked_abs(self) -> Option<Self>; |
1531 | | wrapping_abs(self) -> Self; |
1532 | | overflowing_abs(self) -> (Self, bool); |
1533 | | abs(self) -> Self; |
1534 | | signum(self) -> Self; |
1535 | | is_positive(self) -> bool; |
1536 | | is_negative(self) -> bool; |
1537 | | } |
1538 | | } |
1539 | | )+ }; |
1540 | | ( Unsigned => $($t:ty),+ $(,)? ) => { $( |
1541 | | impl Unsigned for $t { |
1542 | | func! { |
1543 | | is_power_of_two(self) -> bool; |
1544 | | next_power_of_two(self) -> Self; |
1545 | | checked_next_power_of_two(self) -> Option<Self>; |
1546 | | } |
1547 | | } |
1548 | | )+ }; |
1549 | | ( Floating => $($t:ident | $u:ty),+ $(,)? ) => { $( |
1550 | | impl Floating for $t { |
1551 | | type Raw = $u; |
1552 | | |
1553 | | const RADIX: u32 = core::$t::RADIX; |
1554 | | const MANTISSA_DIGITS: u32 = core::$t::MANTISSA_DIGITS; |
1555 | | const DIGITS: u32 = core::$t::DIGITS; |
1556 | | const EPSILON: Self = core::$t::EPSILON; |
1557 | | const MIN: Self = core::$t::MIN; |
1558 | | const MIN_POSITIVE: Self = core::$t::MIN_POSITIVE; |
1559 | | const MAX: Self = core::$t::MAX; |
1560 | | const MIN_EXP: i32 = core::$t::MIN_EXP; |
1561 | | const MAX_EXP: i32 = core::$t::MAX_EXP; |
1562 | | const MIN_10_EXP: i32 = core::$t::MIN_10_EXP; |
1563 | | const MAX_10_EXP: i32 = core::$t::MAX_10_EXP; |
1564 | | const NAN: Self = core::$t::NAN; |
1565 | | const INFINITY: Self = core::$t::INFINITY; |
1566 | | const NEG_INFINITY: Self = core::$t::NEG_INFINITY; |
1567 | | |
1568 | | const PI: Self = core::$t::consts::PI; |
1569 | | const FRAC_PI_2: Self = core::$t::consts::FRAC_PI_2; |
1570 | | const FRAC_PI_3: Self = core::$t::consts::FRAC_PI_3; |
1571 | | const FRAC_PI_4: Self = core::$t::consts::FRAC_PI_4; |
1572 | | const FRAC_PI_6: Self = core::$t::consts::FRAC_PI_6; |
1573 | | const FRAC_PI_8: Self = core::$t::consts::FRAC_PI_8; |
1574 | | const FRAC_1_PI: Self = core::$t::consts::FRAC_1_PI; |
1575 | | const FRAC_2_PI: Self = core::$t::consts::FRAC_2_PI; |
1576 | | const FRAC_2_SQRT_PI: Self = core::$t::consts::FRAC_2_SQRT_PI; |
1577 | | const SQRT_2: Self = core::$t::consts::SQRT_2; |
1578 | | const FRAC_1_SQRT_2: Self = core::$t::consts::FRAC_1_SQRT_2; |
1579 | | const E: Self = core::$t::consts::E; |
1580 | | const LOG2_E: Self = core::$t::consts::LOG2_E; |
1581 | | const LOG10_E: Self = core::$t::consts::LOG10_E; |
1582 | | const LN_2: Self = core::$t::consts::LN_2; |
1583 | | const LN_10: Self = core::$t::consts::LN_10; |
1584 | | |
1585 | | func! { |
1586 | | @"std" floor(self) -> Self; |
1587 | | @"std" ceil(self) -> Self; |
1588 | | @"std" round(self) -> Self; |
1589 | | @"std" trunc(self) -> Self; |
1590 | | @"std" fract(self) -> Self; |
1591 | | @"std" abs(self) -> Self; |
1592 | | @"std" signum(self) -> Self; |
1593 | | @"std" copysign(self, sign: Self) -> Self; |
1594 | | @"std" mul_add(self, a: Self, b: Self) -> Self; |
1595 | | @"std" div_euclid(self, rhs: Self) -> Self; |
1596 | | @"std" rem_euclid(self, rhs: Self) -> Self; |
1597 | | @"std" powi(self, n: i32) -> Self; |
1598 | | @"std" powf(self, n: Self) -> Self; |
1599 | | @"std" sqrt(self) -> Self; |
1600 | | @"std" exp(self) -> Self; |
1601 | | @"std" exp2(self) -> Self; |
1602 | | @"std" ln(self) -> Self; |
1603 | | @"std" log(self, base: Self) -> Self; |
1604 | | @"std" log2(self) -> Self; |
1605 | | @"std" log10(self) -> Self; |
1606 | | @"std" cbrt(self) -> Self; |
1607 | | @"std" hypot(self, other: Self) -> Self; |
1608 | | @"std" sin(self) -> Self; |
1609 | | @"std" cos(self) -> Self; |
1610 | | @"std" tan(self) -> Self; |
1611 | | @"std" asin(self) -> Self; |
1612 | | @"std" acos(self) -> Self; |
1613 | | @"std" atan(self) -> Self; |
1614 | | @"std" atan2(self, other: Self) -> Self; |
1615 | | @"std" sin_cos(self) -> (Self, Self); |
1616 | | @"std" exp_m1(self) -> Self; |
1617 | | @"std" ln_1p(self) -> Self; |
1618 | | @"std" sinh(self) -> Self; |
1619 | | @"std" cosh(self) -> Self; |
1620 | | @"std" tanh(self) -> Self; |
1621 | | @"std" asinh(self) -> Self; |
1622 | | @"std" acosh(self) -> Self; |
1623 | | @"std" atanh(self) -> Self; |
1624 | | is_nan(self) -> bool; |
1625 | | is_infinite(self) -> bool; |
1626 | | is_finite(self) -> bool; |
1627 | | is_normal(self) -> bool; |
1628 | | classify(self) -> FpCategory; |
1629 | | is_sign_positive(self) -> bool; |
1630 | | is_sign_negative(self) -> bool; |
1631 | | recip(self) -> Self; |
1632 | | to_degrees(self) -> Self; |
1633 | | to_radians(self) -> Self; |
1634 | | max(self, other: Self) -> Self; |
1635 | | min(self, other: Self) -> Self; |
1636 | | to_bits(self) -> Self::Raw; |
1637 | | from_bits(bits: Self::Raw) -> Self; |
1638 | | } |
1639 | | } |
1640 | | )+ }; |
1641 | | ( $which:ty => $($t:ty),+ $(,)? ) => { $( |
1642 | | impl $which for $t {} |
1643 | | )+ }; |
1644 | | } |
1645 | | |
1646 | | impl_for!(Fundamental => |
1647 | 0 | bool => |this: bool| !this, |
1648 | 0 | char => |this| this != '\0', |
1649 | 0 | i8 => |this| this != 0, |
1650 | 0 | i16 => |this| this != 0, |
1651 | 0 | i32 => |this| this != 0, |
1652 | 0 | i64 => |this| this != 0, |
1653 | 0 | i128 => |this| this != 0, |
1654 | 0 | isize => |this| this != 0, |
1655 | 0 | u8 => |this| this != 0, |
1656 | 0 | u16 => |this| this != 0, |
1657 | 0 | u32 => |this| this != 0, |
1658 | 0 | u64 => |this| this != 0, |
1659 | 0 | u128 => |this| this != 0, |
1660 | 0 | usize => |this| this != 0, |
1661 | 0 | f32 => |this: f32| (-Self::EPSILON ..= Self::EPSILON).contains(&this), |
1662 | 0 | f64 => |this: f64| (-Self::EPSILON ..= Self::EPSILON).contains(&this), |
1663 | | ); |
1664 | | impl_for!(Numeric => i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64); |
1665 | | impl_for!(Integral => i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize); |
1666 | | impl_for!(Signed => i8, i16, i32, i64, i128, isize); |
1667 | | impl_for!(Unsigned => u8, u16, u32, u64, u128, usize); |
1668 | | impl_for!(Floating => f32 | u32, f64 | u64); |
1669 | | |
1670 | | impl_for!(Is8 => i8, u8); |
1671 | | impl_for!(Is16 => i16, u16); |
1672 | | impl_for!(Is32 => i32, u32, f32); |
1673 | | impl_for!(Is64 => i64, u64, f64); |
1674 | | impl_for!(Is128 => i128, u128); |
1675 | | |
1676 | | #[cfg(target_pointer_width = "16")] |
1677 | | impl_for!(Is16 => isize, usize); |
1678 | | |
1679 | | #[cfg(target_pointer_width = "32")] |
1680 | | impl_for!(Is32 => isize, usize); |
1681 | | |
1682 | | #[cfg(target_pointer_width = "64")] |
1683 | | impl_for!(Is64 => isize, usize); |
1684 | | |
1685 | | impl_for!(AtLeast8 => i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64); |
1686 | | impl_for!(AtLeast16 => i16, i32, i64, i128, u16, u32, u64, u128, f32, f64); |
1687 | | impl_for!(AtLeast32 => i32, i64, i128, u32, u64, u128, f32, f64); |
1688 | | impl_for!(AtLeast64 => i64, i128, u64, u128, f64); |
1689 | | impl_for!(AtLeast128 => i128, u128); |
1690 | | |
1691 | | #[cfg(any( |
1692 | | target_pointer_width = "16", |
1693 | | target_pointer_width = "32", |
1694 | | target_pointer_width = "64" |
1695 | | ))] |
1696 | | impl_for!(AtLeast16 => isize, usize); |
1697 | | |
1698 | | #[cfg(any(target_pointer_width = "32", target_pointer_width = "64"))] |
1699 | | impl_for!(AtLeast32 => isize, usize); |
1700 | | |
1701 | | #[cfg(target_pointer_width = "64")] |
1702 | | impl_for!(AtLeast64 => isize, usize); |
1703 | | |
1704 | | impl_for!(AtMost8 => i8, u8); |
1705 | | impl_for!(AtMost16 => i8, i16, u8, u16); |
1706 | | impl_for!(AtMost32 => i8, i16, i32, u8, u16, u32, f32); |
1707 | | impl_for!(AtMost64 => i8, i16, i32, i64, isize, u8, u16, u32, u64, usize, f32, f64); |
1708 | | impl_for!(AtMost128 => i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64); |
1709 | | |
1710 | | #[cfg(target_pointer_width = "16")] |
1711 | | impl_for!(AtMost16 => isize, usize); |
1712 | | |
1713 | | #[cfg(any(target_pointer_width = "16", target_pointer_width = "32"))] |
1714 | | impl_for!(AtMost32 => isize, usize); |
1715 | | |
1716 | | #[cfg(test)] |
1717 | | mod tests { |
1718 | | use super::*; |
1719 | | use static_assertions::*; |
1720 | | |
1721 | | assert_impl_all!(bool: Fundamental); |
1722 | | assert_impl_all!(char: Fundamental); |
1723 | | |
1724 | | assert_impl_all!(i8: Integral, Signed, Is8); |
1725 | | assert_impl_all!(i16: Integral, Signed, Is16); |
1726 | | assert_impl_all!(i32: Integral, Signed, Is32); |
1727 | | assert_impl_all!(i64: Integral, Signed, Is64); |
1728 | | assert_impl_all!(i128: Integral, Signed, Is128); |
1729 | | assert_impl_all!(isize: Integral, Signed); |
1730 | | |
1731 | | assert_impl_all!(u8: Integral, Unsigned, Is8); |
1732 | | assert_impl_all!(u16: Integral, Unsigned, Is16); |
1733 | | assert_impl_all!(u32: Integral, Unsigned, Is32); |
1734 | | assert_impl_all!(u64: Integral, Unsigned, Is64); |
1735 | | assert_impl_all!(u128: Integral, Unsigned, Is128); |
1736 | | assert_impl_all!(usize: Integral, Unsigned); |
1737 | | |
1738 | | assert_impl_all!(f32: Floating, Is32); |
1739 | | assert_impl_all!(f64: Floating, Is64); |
1740 | | } |