diff --git a/.lock b/.lock new file mode 100644 index 0000000..e69de29 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/crates.js b/crates.js new file mode 100644 index 0000000..94bca26 --- /dev/null +++ b/crates.js @@ -0,0 +1,2 @@ +window.ALL_CRATES = ["num_traits","rbitset"]; +//{"start":21,"fragment_lengths":[12,10]} \ No newline at end of file diff --git a/help.html b/help.html new file mode 100644 index 0000000..1eb7c79 --- /dev/null +++ b/help.html @@ -0,0 +1 @@ +Help

Rustdoc help

Back
\ No newline at end of file diff --git a/num_traits/all.html b/num_traits/all.html new file mode 100644 index 0000000..7c158b1 --- /dev/null +++ b/num_traits/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Structs

Enums

Traits

Functions

\ No newline at end of file diff --git a/num_traits/bounds/index.html b/num_traits/bounds/index.html new file mode 100644 index 0000000..1a54b88 --- /dev/null +++ b/num_traits/bounds/index.html @@ -0,0 +1 @@ +num_traits::bounds - Rust
num_traits

Module bounds

Source

Traits§

\ No newline at end of file diff --git a/num_traits/bounds/sidebar-items.js b/num_traits/bounds/sidebar-items.js new file mode 100644 index 0000000..03c75d1 --- /dev/null +++ b/num_traits/bounds/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["Bounded","LowerBounded","UpperBounded"]}; \ No newline at end of file diff --git a/num_traits/bounds/trait.Bounded.html b/num_traits/bounds/trait.Bounded.html new file mode 100644 index 0000000..bf3698c --- /dev/null +++ b/num_traits/bounds/trait.Bounded.html @@ -0,0 +1,8 @@ +Bounded in num_traits::bounds - Rust
num_traits::bounds

Trait Bounded

Source
pub trait Bounded {
+    // Required methods
+    fn min_value() -> Self;
+    fn max_value() -> Self;
+}
Expand description

Numbers which have upper and lower bounds

+

Required Methods§

Source

fn min_value() -> Self

Returns the smallest finite number this type can represent

+
Source

fn max_value() -> Self

Returns the largest finite number this type can represent

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Bounded for f32

Source§

impl Bounded for f64

Source§

impl Bounded for i8

Source§

impl Bounded for i16

Source§

impl Bounded for i32

Source§

impl Bounded for i64

Source§

impl Bounded for i128

Source§

impl Bounded for isize

Source§

impl Bounded for u8

Source§

impl Bounded for u16

Source§

impl Bounded for u32

Source§

impl Bounded for u64

Source§

impl Bounded for u128

Source§

impl Bounded for ()

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl Bounded for usize

Source§

impl<A: Bounded, B: Bounded, C: Bounded, D: Bounded, E: Bounded, F: Bounded, G: Bounded, H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<B: Bounded, C: Bounded, D: Bounded, E: Bounded, F: Bounded, G: Bounded, H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<C: Bounded, D: Bounded, E: Bounded, F: Bounded, G: Bounded, H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<D: Bounded, E: Bounded, F: Bounded, G: Bounded, H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<E: Bounded, F: Bounded, G: Bounded, H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<F: Bounded, G: Bounded, H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<G: Bounded, H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<H: Bounded, I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<I: Bounded, J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<J: Bounded, K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (J, K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<K: Bounded, L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (K, L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<L: Bounded, M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (L, M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<M: Bounded, N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (M, N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<N: Bounded, O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (N, O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<O: Bounded, P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (O, P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<P: Bounded, Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (P, Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<Q: Bounded, R: Bounded, S: Bounded, T: Bounded> Bounded for (Q, R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<R: Bounded, S: Bounded, T: Bounded> Bounded for (R, S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<S: Bounded, T: Bounded> Bounded for (S, T)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<T: Bounded> Bounded for (T,)

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Source§

impl<T: Bounded> Bounded for Wrapping<T>

Source§

fn min_value() -> Self

Source§

fn max_value() -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/bounds/trait.LowerBounded.html b/num_traits/bounds/trait.LowerBounded.html new file mode 100644 index 0000000..a912500 --- /dev/null +++ b/num_traits/bounds/trait.LowerBounded.html @@ -0,0 +1,6 @@ +LowerBounded in num_traits::bounds - Rust
num_traits::bounds

Trait LowerBounded

Source
pub trait LowerBounded {
+    // Required method
+    fn min_value() -> Self;
+}
Expand description

Numbers which have lower bounds

+

Required Methods§

Source

fn min_value() -> Self

Returns the smallest finite number this type can represent

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/num_traits/bounds/trait.UpperBounded.html b/num_traits/bounds/trait.UpperBounded.html new file mode 100644 index 0000000..15b1de6 --- /dev/null +++ b/num_traits/bounds/trait.UpperBounded.html @@ -0,0 +1,6 @@ +UpperBounded in num_traits::bounds - Rust
num_traits::bounds

Trait UpperBounded

Source
pub trait UpperBounded {
+    // Required method
+    fn max_value() -> Self;
+}
Expand description

Numbers which have upper bounds

+

Required Methods§

Source

fn max_value() -> Self

Returns the largest finite number this type can represent

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

\ No newline at end of file diff --git a/num_traits/cast/fn.cast.html b/num_traits/cast/fn.cast.html new file mode 100644 index 0000000..9ce481f --- /dev/null +++ b/num_traits/cast/fn.cast.html @@ -0,0 +1,5 @@ +cast in num_traits::cast - Rust
num_traits::cast

Function cast

Source
pub fn cast<T: NumCast, U: NumCast>(n: T) -> Option<U>
Expand description

Cast from one machine scalar to another.

+

§Examples

+
let twenty: f32 = num::cast(0x14).unwrap();
+assert_eq!(twenty, 20f32);
+
\ No newline at end of file diff --git a/num_traits/cast/index.html b/num_traits/cast/index.html new file mode 100644 index 0000000..88fbebd --- /dev/null +++ b/num_traits/cast/index.html @@ -0,0 +1,5 @@ +num_traits::cast - Rust
num_traits

Module cast

Source

Traits§

  • A generic interface for casting between machine scalars with the +as operator, which admits narrowing and precision loss. +Implementers of this trait AsPrimitive should behave like a primitive +numeric type (e.g. a newtype around another primitive), and the +intended conversion must never fail.
  • A generic trait for converting a number to a value.
  • An interface for casting between machine scalars.
  • A generic trait for converting a value to a number.

Functions§

  • Cast from one machine scalar to another.
\ No newline at end of file diff --git a/num_traits/cast/sidebar-items.js b/num_traits/cast/sidebar-items.js new file mode 100644 index 0000000..3460e55 --- /dev/null +++ b/num_traits/cast/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["cast"],"trait":["AsPrimitive","FromPrimitive","NumCast","ToPrimitive"]}; \ No newline at end of file diff --git a/num_traits/cast/trait.AsPrimitive.html b/num_traits/cast/trait.AsPrimitive.html new file mode 100644 index 0000000..f692bff --- /dev/null +++ b/num_traits/cast/trait.AsPrimitive.html @@ -0,0 +1,21 @@ +AsPrimitive in num_traits::cast - Rust
num_traits::cast

Trait AsPrimitive

Source
pub trait AsPrimitive<T>: 'static + Copy
where + T: 'static + Copy,
{ + // Required method + fn as_(self) -> T; +}
Expand description

A generic interface for casting between machine scalars with the +as operator, which admits narrowing and precision loss. +Implementers of this trait AsPrimitive should behave like a primitive +numeric type (e.g. a newtype around another primitive), and the +intended conversion must never fail.

+

§Examples

+
let three: i32 = (3.14159265f32).as_();
+assert_eq!(three, 3);
+

§Safety

+

In Rust versions before 1.45.0, some uses of the as operator were not entirely safe. +In particular, it was undefined behavior if +a truncated floating point value could not fit in the target integer +type (#10184).

+ +
let x: u8 = (1.04E+17).as_(); // UB
+

Required Methods§

Source

fn as_(self) -> T

Convert a value to another, using the as operator.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl AsPrimitive<char> for char

Source§

fn as_(self) -> char

Source§

impl AsPrimitive<char> for u8

Source§

fn as_(self) -> char

Source§

impl AsPrimitive<f32> for f32

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for f64

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for i8

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for i16

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for i32

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for i64

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for i128

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for isize

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for u8

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for u16

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for u32

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for u64

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for u128

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f32> for usize

Source§

fn as_(self) -> f32

Source§

impl AsPrimitive<f64> for f32

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for f64

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for i8

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for i16

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for i32

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for i64

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for i128

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for isize

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for u8

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for u16

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for u32

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for u64

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for u128

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<f64> for usize

Source§

fn as_(self) -> f64

Source§

impl AsPrimitive<i8> for bool

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for char

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for f32

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for f64

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for i8

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for i16

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for i32

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for i64

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for i128

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for isize

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for u8

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for u16

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for u32

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for u64

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for u128

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i8> for usize

Source§

fn as_(self) -> i8

Source§

impl AsPrimitive<i16> for bool

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for char

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for f32

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for f64

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for i8

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for i16

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for i32

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for i64

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for i128

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for isize

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for u8

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for u16

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for u32

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for u64

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for u128

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i16> for usize

Source§

fn as_(self) -> i16

Source§

impl AsPrimitive<i32> for bool

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for char

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for f32

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for f64

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for i8

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for i16

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for i32

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for i64

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for i128

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for isize

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for u8

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for u16

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for u32

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for u64

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for u128

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i32> for usize

Source§

fn as_(self) -> i32

Source§

impl AsPrimitive<i64> for bool

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for char

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for f32

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for f64

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for i8

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for i16

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for i32

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for i64

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for i128

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for isize

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for u8

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for u16

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for u32

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for u64

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for u128

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i64> for usize

Source§

fn as_(self) -> i64

Source§

impl AsPrimitive<i128> for bool

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for char

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for f32

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for f64

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for i8

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for i16

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for i32

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for i64

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for i128

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for isize

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for u8

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for u16

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for u32

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for u64

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for u128

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<i128> for usize

Source§

fn as_(self) -> i128

Source§

impl AsPrimitive<isize> for bool

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for char

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for f32

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for f64

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for i8

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for i16

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for i32

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for i64

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for i128

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for isize

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for u8

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for u16

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for u32

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for u64

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for u128

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<isize> for usize

Source§

fn as_(self) -> isize

Source§

impl AsPrimitive<u8> for bool

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for char

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for f32

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for f64

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for i8

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for i16

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for i32

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for i64

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for i128

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for isize

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for u8

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for u16

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for u32

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for u64

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for u128

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u8> for usize

Source§

fn as_(self) -> u8

Source§

impl AsPrimitive<u16> for bool

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for char

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for f32

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for f64

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for i8

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for i16

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for i32

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for i64

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for i128

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for isize

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for u8

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for u16

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for u32

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for u64

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for u128

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u16> for usize

Source§

fn as_(self) -> u16

Source§

impl AsPrimitive<u32> for bool

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for char

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for f32

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for f64

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for i8

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for i16

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for i32

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for i64

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for i128

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for isize

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for u8

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for u16

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for u32

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for u64

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for u128

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u32> for usize

Source§

fn as_(self) -> u32

Source§

impl AsPrimitive<u64> for bool

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for char

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for f32

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for f64

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for i8

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for i16

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for i32

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for i64

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for i128

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for isize

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for u8

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for u16

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for u32

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for u64

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for u128

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u64> for usize

Source§

fn as_(self) -> u64

Source§

impl AsPrimitive<u128> for bool

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for char

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for f32

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for f64

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for i8

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for i16

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for i32

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for i64

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for i128

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for isize

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for u8

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for u16

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for u32

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for u64

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for u128

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<u128> for usize

Source§

fn as_(self) -> u128

Source§

impl AsPrimitive<usize> for bool

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for char

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for f32

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for f64

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for i8

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for i16

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for i32

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for i64

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for i128

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for isize

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for u8

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for u16

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for u32

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for u64

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for u128

Source§

fn as_(self) -> usize

Source§

impl AsPrimitive<usize> for usize

Source§

fn as_(self) -> usize

Implementors§

\ No newline at end of file diff --git a/num_traits/cast/trait.FromPrimitive.html b/num_traits/cast/trait.FromPrimitive.html new file mode 100644 index 0000000..9d563cd --- /dev/null +++ b/num_traits/cast/trait.FromPrimitive.html @@ -0,0 +1,63 @@ +FromPrimitive in num_traits::cast - Rust
num_traits::cast

Trait FromPrimitive

Source
pub trait FromPrimitive: Sized {
+
Show 14 methods // Required methods + fn from_i64(n: i64) -> Option<Self>; + fn from_u64(n: u64) -> Option<Self>; + + // Provided methods + fn from_isize(n: isize) -> Option<Self> { ... } + fn from_i8(n: i8) -> Option<Self> { ... } + fn from_i16(n: i16) -> Option<Self> { ... } + fn from_i32(n: i32) -> Option<Self> { ... } + fn from_i128(n: i128) -> Option<Self> { ... } + fn from_usize(n: usize) -> Option<Self> { ... } + fn from_u8(n: u8) -> Option<Self> { ... } + fn from_u16(n: u16) -> Option<Self> { ... } + fn from_u32(n: u32) -> Option<Self> { ... } + fn from_u128(n: u128) -> Option<Self> { ... } + fn from_f32(n: f32) -> Option<Self> { ... } + fn from_f64(n: f64) -> Option<Self> { ... } +
}
Expand description

A generic trait for converting a number to a value.

+

A value can be represented by the target type when it lies within +the range of scalars supported by the target type. +For example, a negative integer cannot be represented by an unsigned +integer type, and an i64 with a very high magnitude might not be +convertible to an i32. +On the other hand, conversions with possible precision loss or truncation +are admitted, like an f32 with a decimal part to an integer type, or +even a large f64 saturating to f32 infinity.

+

Required Methods§

Source

fn from_i64(n: i64) -> Option<Self>

Converts an i64 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_u64(n: u64) -> Option<Self>

Converts an u64 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+

Provided Methods§

Source

fn from_isize(n: isize) -> Option<Self>

Converts an isize to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_i8(n: i8) -> Option<Self>

Converts an i8 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_i16(n: i16) -> Option<Self>

Converts an i16 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_i32(n: i32) -> Option<Self>

Converts an i32 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_i128(n: i128) -> Option<Self>

Converts an i128 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+

The default implementation converts through from_i64(). Types implementing +this trait should override this method if they can represent a greater range.

+
Source

fn from_usize(n: usize) -> Option<Self>

Converts a usize to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_u8(n: u8) -> Option<Self>

Converts an u8 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_u16(n: u16) -> Option<Self>

Converts an u16 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_u32(n: u32) -> Option<Self>

Converts an u32 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_u128(n: u128) -> Option<Self>

Converts an u128 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+

The default implementation converts through from_u64(). Types implementing +this trait should override this method if they can represent a greater range.

+
Source

fn from_f32(n: f32) -> Option<Self>

Converts a f32 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+
Source

fn from_f64(n: f64) -> Option<Self>

Converts a f64 to return an optional value of this type. If the +value cannot be represented by this type, then None is returned.

+

The default implementation tries to convert through from_i64(), and +failing that through from_u64(). Types implementing this trait should +override this method if they can represent a greater range.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl FromPrimitive for f32

Source§

impl FromPrimitive for f64

Source§

impl FromPrimitive for i8

Source§

impl FromPrimitive for i16

Source§

impl FromPrimitive for i32

Source§

impl FromPrimitive for i64

Source§

impl FromPrimitive for i128

Source§

impl FromPrimitive for isize

Source§

impl FromPrimitive for u8

Source§

impl FromPrimitive for u16

Source§

impl FromPrimitive for u32

Source§

impl FromPrimitive for u64

Source§

impl FromPrimitive for u128

Source§

impl FromPrimitive for usize

Source§

impl<T: FromPrimitive> FromPrimitive for Wrapping<T>

Source§

fn from_isize(n: isize) -> Option<Self>

Source§

fn from_i8(n: i8) -> Option<Self>

Source§

fn from_i16(n: i16) -> Option<Self>

Source§

fn from_i32(n: i32) -> Option<Self>

Source§

fn from_i64(n: i64) -> Option<Self>

Source§

fn from_i128(n: i128) -> Option<Self>

Source§

fn from_usize(n: usize) -> Option<Self>

Source§

fn from_u8(n: u8) -> Option<Self>

Source§

fn from_u16(n: u16) -> Option<Self>

Source§

fn from_u32(n: u32) -> Option<Self>

Source§

fn from_u64(n: u64) -> Option<Self>

Source§

fn from_u128(n: u128) -> Option<Self>

Source§

fn from_f32(n: f32) -> Option<Self>

Source§

fn from_f64(n: f64) -> Option<Self>

Implementors§

\ No newline at end of file diff --git a/num_traits/cast/trait.NumCast.html b/num_traits/cast/trait.NumCast.html new file mode 100644 index 0000000..f7ab032 --- /dev/null +++ b/num_traits/cast/trait.NumCast.html @@ -0,0 +1,16 @@ +NumCast in num_traits::cast - Rust
num_traits::cast

Trait NumCast

Source
pub trait NumCast: Sized + ToPrimitive {
+    // Required method
+    fn from<T: ToPrimitive>(n: T) -> Option<Self>;
+}
Expand description

An interface for casting between machine scalars.

+

Required Methods§

Source

fn from<T: ToPrimitive>(n: T) -> Option<Self>

Creates a number from another value that can be converted into +a primitive via the ToPrimitive trait. If the source value cannot be +represented by the target type, then None is returned.

+

A value can be represented by the target type when it lies within +the range of scalars supported by the target type. +For example, a negative integer cannot be represented by an unsigned +integer type, and an i64 with a very high magnitude might not be +convertible to an i32. +On the other hand, conversions with possible precision loss or truncation +are admitted, like an f32 with a decimal part to an integer type, or +even a large f64 saturating to f32 infinity.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl NumCast for f32

Source§

impl NumCast for f64

Source§

impl NumCast for i8

Source§

impl NumCast for i16

Source§

impl NumCast for i32

Source§

impl NumCast for i64

Source§

impl NumCast for i128

Source§

impl NumCast for isize

Source§

impl NumCast for u8

Source§

impl NumCast for u16

Source§

impl NumCast for u32

Source§

impl NumCast for u64

Source§

impl NumCast for u128

Source§

impl NumCast for usize

Source§

impl<T: NumCast> NumCast for Wrapping<T>

Source§

fn from<U: ToPrimitive>(n: U) -> Option<Self>

Implementors§

\ No newline at end of file diff --git a/num_traits/cast/trait.ToPrimitive.html b/num_traits/cast/trait.ToPrimitive.html new file mode 100644 index 0000000..96534aa --- /dev/null +++ b/num_traits/cast/trait.ToPrimitive.html @@ -0,0 +1,67 @@ +ToPrimitive in num_traits::cast - Rust
num_traits::cast

Trait ToPrimitive

Source
pub trait ToPrimitive {
+
Show 14 methods // Required methods + fn to_i64(&self) -> Option<i64>; + fn to_u64(&self) -> Option<u64>; + + // Provided methods + fn to_isize(&self) -> Option<isize> { ... } + fn to_i8(&self) -> Option<i8> { ... } + fn to_i16(&self) -> Option<i16> { ... } + fn to_i32(&self) -> Option<i32> { ... } + fn to_i128(&self) -> Option<i128> { ... } + fn to_usize(&self) -> Option<usize> { ... } + fn to_u8(&self) -> Option<u8> { ... } + fn to_u16(&self) -> Option<u16> { ... } + fn to_u32(&self) -> Option<u32> { ... } + fn to_u128(&self) -> Option<u128> { ... } + fn to_f32(&self) -> Option<f32> { ... } + fn to_f64(&self) -> Option<f64> { ... } +
}
Expand description

A generic trait for converting a value to a number.

+

A value can be represented by the target type when it lies within +the range of scalars supported by the target type. +For example, a negative integer cannot be represented by an unsigned +integer type, and an i64 with a very high magnitude might not be +convertible to an i32. +On the other hand, conversions with possible precision loss or truncation +are admitted, like an f32 with a decimal part to an integer type, or +even a large f64 saturating to f32 infinity.

+

Required Methods§

Source

fn to_i64(&self) -> Option<i64>

Converts the value of self to an i64. If the value cannot be +represented by an i64, then None is returned.

+
Source

fn to_u64(&self) -> Option<u64>

Converts the value of self to a u64. If the value cannot be +represented by a u64, then None is returned.

+

Provided Methods§

Source

fn to_isize(&self) -> Option<isize>

Converts the value of self to an isize. If the value cannot be +represented by an isize, then None is returned.

+
Source

fn to_i8(&self) -> Option<i8>

Converts the value of self to an i8. If the value cannot be +represented by an i8, then None is returned.

+
Source

fn to_i16(&self) -> Option<i16>

Converts the value of self to an i16. If the value cannot be +represented by an i16, then None is returned.

+
Source

fn to_i32(&self) -> Option<i32>

Converts the value of self to an i32. If the value cannot be +represented by an i32, then None is returned.

+
Source

fn to_i128(&self) -> Option<i128>

Converts the value of self to an i128. If the value cannot be +represented by an i128 (i64 under the default implementation), then +None is returned.

+

The default implementation converts through to_i64(). Types implementing +this trait should override this method if they can represent a greater range.

+
Source

fn to_usize(&self) -> Option<usize>

Converts the value of self to a usize. If the value cannot be +represented by a usize, then None is returned.

+
Source

fn to_u8(&self) -> Option<u8>

Converts the value of self to a u8. If the value cannot be +represented by a u8, then None is returned.

+
Source

fn to_u16(&self) -> Option<u16>

Converts the value of self to a u16. If the value cannot be +represented by a u16, then None is returned.

+
Source

fn to_u32(&self) -> Option<u32>

Converts the value of self to a u32. If the value cannot be +represented by a u32, then None is returned.

+
Source

fn to_u128(&self) -> Option<u128>

Converts the value of self to a u128. If the value cannot be +represented by a u128 (u64 under the default implementation), then +None is returned.

+

The default implementation converts through to_u64(). Types implementing +this trait should override this method if they can represent a greater range.

+
Source

fn to_f32(&self) -> Option<f32>

Converts the value of self to an f32. Overflows may map to positive +or negative inifinity, otherwise None is returned if the value cannot +be represented by an f32.

+
Source

fn to_f64(&self) -> Option<f64>

Converts the value of self to an f64. Overflows may map to positive +or negative inifinity, otherwise None is returned if the value cannot +be represented by an f64.

+

The default implementation tries to convert through to_i64(), and +failing that through to_u64(). Types implementing this trait should +override this method if they can represent a greater range.

+

Implementations on Foreign Types§

Source§

impl ToPrimitive for f32

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for f64

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for i8

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for i16

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for i32

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for i64

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for i128

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for isize

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for u8

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for u16

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for u32

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for u64

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for u128

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl ToPrimitive for usize

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Source§

impl<T: ToPrimitive> ToPrimitive for Wrapping<T>

Source§

fn to_isize(&self) -> Option<isize>

Source§

fn to_i8(&self) -> Option<i8>

Source§

fn to_i16(&self) -> Option<i16>

Source§

fn to_i32(&self) -> Option<i32>

Source§

fn to_i64(&self) -> Option<i64>

Source§

fn to_i128(&self) -> Option<i128>

Source§

fn to_usize(&self) -> Option<usize>

Source§

fn to_u8(&self) -> Option<u8>

Source§

fn to_u16(&self) -> Option<u16>

Source§

fn to_u32(&self) -> Option<u32>

Source§

fn to_u64(&self) -> Option<u64>

Source§

fn to_u128(&self) -> Option<u128>

Source§

fn to_f32(&self) -> Option<f32>

Source§

fn to_f64(&self) -> Option<f64>

Implementors§

\ No newline at end of file diff --git a/num_traits/enum.FloatErrorKind.html b/num_traits/enum.FloatErrorKind.html new file mode 100644 index 0000000..4788102 --- /dev/null +++ b/num_traits/enum.FloatErrorKind.html @@ -0,0 +1,14 @@ +FloatErrorKind in num_traits - Rust
num_traits

Enum FloatErrorKind

Source
pub enum FloatErrorKind {
+    Empty,
+    Invalid,
+}

Variants§

§

Empty

§

Invalid

Trait Implementations§

Source§

impl Debug for FloatErrorKind

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/num_traits/float/index.html b/num_traits/float/index.html new file mode 100644 index 0000000..bcfbbec --- /dev/null +++ b/num_traits/float/index.html @@ -0,0 +1,3 @@ +num_traits::float - Rust
num_traits

Module float

Source

Traits§

  • Generic trait for floating point numbers that works with no_std.
  • Trait for floating point numbers that provide an implementation +of the totalOrder predicate as defined in the IEEE 754 (2008 revision) +floating point standard.
\ No newline at end of file diff --git a/num_traits/float/sidebar-items.js b/num_traits/float/sidebar-items.js new file mode 100644 index 0000000..ce3eb53 --- /dev/null +++ b/num_traits/float/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["FloatConst","FloatCore","TotalOrder"]}; \ No newline at end of file diff --git a/num_traits/float/trait.FloatConst.html b/num_traits/float/trait.FloatConst.html new file mode 100644 index 0000000..02ae8f6 --- /dev/null +++ b/num_traits/float/trait.FloatConst.html @@ -0,0 +1,49 @@ +FloatConst in num_traits::float - Rust
num_traits::float

Trait FloatConst

Source
pub trait FloatConst {
+
Show 19 methods // Required methods + fn E() -> Self; + fn FRAC_1_PI() -> Self; + fn FRAC_1_SQRT_2() -> Self; + fn FRAC_2_PI() -> Self; + fn FRAC_2_SQRT_PI() -> Self; + fn FRAC_PI_2() -> Self; + fn FRAC_PI_3() -> Self; + fn FRAC_PI_4() -> Self; + fn FRAC_PI_6() -> Self; + fn FRAC_PI_8() -> Self; + fn LN_10() -> Self; + fn LN_2() -> Self; + fn LOG10_E() -> Self; + fn LOG2_E() -> Self; + fn PI() -> Self; + fn SQRT_2() -> Self; + + // Provided methods + fn TAU() -> Self + where Self: Sized + Add<Self, Output = Self> { ... } + fn LOG10_2() -> Self + where Self: Sized + Div<Self, Output = Self> { ... } + fn LOG2_10() -> Self + where Self: Sized + Div<Self, Output = Self> { ... } +
}

Required Methods§

Source

fn E() -> Self

Return Euler’s number.

+
Source

fn FRAC_1_PI() -> Self

Return 1.0 / π.

+
Source

fn FRAC_1_SQRT_2() -> Self

Return 1.0 / sqrt(2.0).

+
Source

fn FRAC_2_PI() -> Self

Return 2.0 / π.

+
Source

fn FRAC_2_SQRT_PI() -> Self

Return 2.0 / sqrt(π).

+
Source

fn FRAC_PI_2() -> Self

Return π / 2.0.

+
Source

fn FRAC_PI_3() -> Self

Return π / 3.0.

+
Source

fn FRAC_PI_4() -> Self

Return π / 4.0.

+
Source

fn FRAC_PI_6() -> Self

Return π / 6.0.

+
Source

fn FRAC_PI_8() -> Self

Return π / 8.0.

+
Source

fn LN_10() -> Self

Return ln(10.0).

+
Source

fn LN_2() -> Self

Return ln(2.0).

+
Source

fn LOG10_E() -> Self

Return log10(e).

+
Source

fn LOG2_E() -> Self

Return log2(e).

+
Source

fn PI() -> Self

Return Archimedes’ constant π.

+
Source

fn SQRT_2() -> Self

Return sqrt(2.0).

+

Provided Methods§

Source

fn TAU() -> Self
where + Self: Sized + Add<Self, Output = Self>,

Return the full circle constant τ.

+
Source

fn LOG10_2() -> Self
where + Self: Sized + Div<Self, Output = Self>,

Return log10(2.0).

+
Source

fn LOG2_10() -> Self
where + Self: Sized + Div<Self, Output = Self>,

Return log2(10.0).

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl FloatConst for f32

Source§

fn E() -> Self

Source§

fn FRAC_1_PI() -> Self

Source§

fn FRAC_1_SQRT_2() -> Self

Source§

fn FRAC_2_PI() -> Self

Source§

fn FRAC_2_SQRT_PI() -> Self

Source§

fn FRAC_PI_2() -> Self

Source§

fn FRAC_PI_3() -> Self

Source§

fn FRAC_PI_4() -> Self

Source§

fn FRAC_PI_6() -> Self

Source§

fn FRAC_PI_8() -> Self

Source§

fn LN_10() -> Self

Source§

fn LN_2() -> Self

Source§

fn LOG10_E() -> Self

Source§

fn LOG2_E() -> Self

Source§

fn PI() -> Self

Source§

fn SQRT_2() -> Self

Source§

fn TAU() -> Self

Source§

fn LOG10_2() -> Self

Source§

fn LOG2_10() -> Self

Source§

impl FloatConst for f64

Source§

fn E() -> Self

Source§

fn FRAC_1_PI() -> Self

Source§

fn FRAC_1_SQRT_2() -> Self

Source§

fn FRAC_2_PI() -> Self

Source§

fn FRAC_2_SQRT_PI() -> Self

Source§

fn FRAC_PI_2() -> Self

Source§

fn FRAC_PI_3() -> Self

Source§

fn FRAC_PI_4() -> Self

Source§

fn FRAC_PI_6() -> Self

Source§

fn FRAC_PI_8() -> Self

Source§

fn LN_10() -> Self

Source§

fn LN_2() -> Self

Source§

fn LOG10_E() -> Self

Source§

fn LOG2_E() -> Self

Source§

fn PI() -> Self

Source§

fn SQRT_2() -> Self

Source§

fn TAU() -> Self

Source§

fn LOG10_2() -> Self

Source§

fn LOG2_10() -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/float/trait.FloatCore.html b/num_traits/float/trait.FloatCore.html new file mode 100644 index 0000000..9483999 --- /dev/null +++ b/num_traits/float/trait.FloatCore.html @@ -0,0 +1,505 @@ +FloatCore in num_traits::float - Rust
num_traits::float

Trait FloatCore

Source
pub trait FloatCore:
+    Num
+    + NumCast
+    + Neg<Output = Self>
+    + PartialOrd
+    + Copy {
+
Show 31 methods // Required methods + fn infinity() -> Self; + fn neg_infinity() -> Self; + fn nan() -> Self; + fn neg_zero() -> Self; + fn min_value() -> Self; + fn min_positive_value() -> Self; + fn epsilon() -> Self; + fn max_value() -> Self; + fn classify(self) -> FpCategory; + fn to_degrees(self) -> Self; + fn to_radians(self) -> Self; + fn integer_decode(self) -> (u64, i16, i8); + + // Provided methods + fn is_nan(self) -> bool { ... } + fn is_infinite(self) -> bool { ... } + fn is_finite(self) -> bool { ... } + fn is_normal(self) -> bool { ... } + fn is_subnormal(self) -> bool { ... } + fn floor(self) -> Self { ... } + fn ceil(self) -> Self { ... } + fn round(self) -> Self { ... } + fn trunc(self) -> Self { ... } + fn fract(self) -> Self { ... } + fn abs(self) -> Self { ... } + fn signum(self) -> Self { ... } + fn is_sign_positive(self) -> bool { ... } + fn is_sign_negative(self) -> bool { ... } + fn min(self, other: Self) -> Self { ... } + fn max(self, other: Self) -> Self { ... } + fn clamp(self, min: Self, max: Self) -> Self { ... } + fn recip(self) -> Self { ... } + fn powi(self, exp: i32) -> Self { ... } +
}
Expand description

Generic trait for floating point numbers that works with no_std.

+

This trait implements a subset of the Float trait.

+

Required Methods§

Source

fn infinity() -> Self

Returns positive infinity.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T) {
+    assert!(T::infinity() == x);
+}
+
+check(f32::INFINITY);
+check(f64::INFINITY);
+
Source

fn neg_infinity() -> Self

Returns negative infinity.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T) {
+    assert!(T::neg_infinity() == x);
+}
+
+check(f32::NEG_INFINITY);
+check(f64::NEG_INFINITY);
+
Source

fn nan() -> Self

Returns NaN.

+
§Examples
+
use num_traits::float::FloatCore;
+
+fn check<T: FloatCore>() {
+    let n = T::nan();
+    assert!(n != n);
+}
+
+check::<f32>();
+check::<f64>();
+
Source

fn neg_zero() -> Self

Returns -0.0.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(n: T) {
+    let z = T::neg_zero();
+    assert!(z.is_zero());
+    assert!(T::one() / z == n);
+}
+
+check(f32::NEG_INFINITY);
+check(f64::NEG_INFINITY);
+
Source

fn min_value() -> Self

Returns the smallest finite value that this type can represent.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T) {
+    assert!(T::min_value() == x);
+}
+
+check(f32::MIN);
+check(f64::MIN);
+
Source

fn min_positive_value() -> Self

Returns the smallest positive, normalized value that this type can represent.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T) {
+    assert!(T::min_positive_value() == x);
+}
+
+check(f32::MIN_POSITIVE);
+check(f64::MIN_POSITIVE);
+
Source

fn epsilon() -> Self

Returns epsilon, a small positive value.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T) {
+    assert!(T::epsilon() == x);
+}
+
+check(f32::EPSILON);
+check(f64::EPSILON);
+
Source

fn max_value() -> Self

Returns the largest finite value that this type can represent.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T) {
+    assert!(T::max_value() == x);
+}
+
+check(f32::MAX);
+check(f64::MAX);
+
Source

fn classify(self) -> FpCategory

Returns the floating point category of the number. If only one property +is going to be tested, it is generally faster to use the specific +predicate instead.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+use std::num::FpCategory;
+
+fn check<T: FloatCore>(x: T, c: FpCategory) {
+    assert!(x.classify() == c);
+}
+
+check(f32::INFINITY, FpCategory::Infinite);
+check(f32::MAX, FpCategory::Normal);
+check(f64::NAN, FpCategory::Nan);
+check(f64::MIN_POSITIVE, FpCategory::Normal);
+check(f64::MIN_POSITIVE / 2.0, FpCategory::Subnormal);
+check(0.0f64, FpCategory::Zero);
+
Source

fn to_degrees(self) -> Self

Converts to degrees, assuming the number is in radians.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(rad: T, deg: T) {
+    assert!(rad.to_degrees() == deg);
+}
+
+check(0.0f32, 0.0);
+check(f32::consts::PI, 180.0);
+check(f64::consts::FRAC_PI_4, 45.0);
+check(f64::INFINITY, f64::INFINITY);
+
Source

fn to_radians(self) -> Self

Converts to radians, assuming the number is in degrees.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(deg: T, rad: T) {
+    assert!(deg.to_radians() == rad);
+}
+
+check(0.0f32, 0.0);
+check(180.0, f32::consts::PI);
+check(45.0, f64::consts::FRAC_PI_4);
+check(f64::INFINITY, f64::INFINITY);
+
Source

fn integer_decode(self) -> (u64, i16, i8)

Returns the mantissa, base 2 exponent, and sign as integers, respectively. +The original number can be recovered by sign * mantissa * 2 ^ exponent.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, m: u64, e: i16, s:i8) {
+    let (mantissa, exponent, sign) = x.integer_decode();
+    assert_eq!(mantissa, m);
+    assert_eq!(exponent, e);
+    assert_eq!(sign, s);
+}
+
+check(2.0f32, 1 << 23, -22, 1);
+check(-2.0f32, 1 << 23, -22, -1);
+check(f32::INFINITY, 1 << 23, 105, 1);
+check(f64::NEG_INFINITY, 1 << 52, 972, -1);
+

Provided Methods§

Source

fn is_nan(self) -> bool

Returns true if the number is NaN.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, p: bool) {
+    assert!(x.is_nan() == p);
+}
+
+check(f32::NAN, true);
+check(f32::INFINITY, false);
+check(f64::NAN, true);
+check(0.0f64, false);
+
Source

fn is_infinite(self) -> bool

Returns true if the number is infinite.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, p: bool) {
+    assert!(x.is_infinite() == p);
+}
+
+check(f32::INFINITY, true);
+check(f32::NEG_INFINITY, true);
+check(f32::NAN, false);
+check(f64::INFINITY, true);
+check(f64::NEG_INFINITY, true);
+check(0.0f64, false);
+
Source

fn is_finite(self) -> bool

Returns true if the number is neither infinite or NaN.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, p: bool) {
+    assert!(x.is_finite() == p);
+}
+
+check(f32::INFINITY, false);
+check(f32::MAX, true);
+check(f64::NEG_INFINITY, false);
+check(f64::MIN_POSITIVE, true);
+check(f64::NAN, false);
+
Source

fn is_normal(self) -> bool

Returns true if the number is neither zero, infinite, subnormal or NaN.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, p: bool) {
+    assert!(x.is_normal() == p);
+}
+
+check(f32::INFINITY, false);
+check(f32::MAX, true);
+check(f64::NEG_INFINITY, false);
+check(f64::MIN_POSITIVE, true);
+check(0.0f64, false);
+
Source

fn is_subnormal(self) -> bool

Returns true if the number is subnormal.

+ +
use num_traits::float::FloatCore;
+use std::f64;
+
+let min = f64::MIN_POSITIVE; // 2.2250738585072014e-308_f64
+let max = f64::MAX;
+let lower_than_min = 1.0e-308_f64;
+let zero = 0.0_f64;
+
+assert!(!min.is_subnormal());
+assert!(!max.is_subnormal());
+
+assert!(!zero.is_subnormal());
+assert!(!f64::NAN.is_subnormal());
+assert!(!f64::INFINITY.is_subnormal());
+// Values between `0` and `min` are Subnormal.
+assert!(lower_than_min.is_subnormal());
+
Source

fn floor(self) -> Self

Returns the largest integer less than or equal to a number.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.floor() == y);
+}
+
+check(f32::INFINITY, f32::INFINITY);
+check(0.9f32, 0.0);
+check(1.0f32, 1.0);
+check(1.1f32, 1.0);
+check(-0.0f64, 0.0);
+check(-0.9f64, -1.0);
+check(-1.0f64, -1.0);
+check(-1.1f64, -2.0);
+check(f64::MIN, f64::MIN);
+
Source

fn ceil(self) -> Self

Returns the smallest integer greater than or equal to a number.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.ceil() == y);
+}
+
+check(f32::INFINITY, f32::INFINITY);
+check(0.9f32, 1.0);
+check(1.0f32, 1.0);
+check(1.1f32, 2.0);
+check(-0.0f64, 0.0);
+check(-0.9f64, -0.0);
+check(-1.0f64, -1.0);
+check(-1.1f64, -1.0);
+check(f64::MIN, f64::MIN);
+
Source

fn round(self) -> Self

Returns the nearest integer to a number. Round half-way cases away from 0.0.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.round() == y);
+}
+
+check(f32::INFINITY, f32::INFINITY);
+check(0.4f32, 0.0);
+check(0.5f32, 1.0);
+check(0.6f32, 1.0);
+check(-0.4f64, 0.0);
+check(-0.5f64, -1.0);
+check(-0.6f64, -1.0);
+check(f64::MIN, f64::MIN);
+
Source

fn trunc(self) -> Self

Return the integer part of a number.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.trunc() == y);
+}
+
+check(f32::INFINITY, f32::INFINITY);
+check(0.9f32, 0.0);
+check(1.0f32, 1.0);
+check(1.1f32, 1.0);
+check(-0.0f64, 0.0);
+check(-0.9f64, -0.0);
+check(-1.0f64, -1.0);
+check(-1.1f64, -1.0);
+check(f64::MIN, f64::MIN);
+
Source

fn fract(self) -> Self

Returns the fractional part of a number.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.fract() == y);
+}
+
+check(f32::MAX, 0.0);
+check(0.75f32, 0.75);
+check(1.0f32, 0.0);
+check(1.25f32, 0.25);
+check(-0.0f64, 0.0);
+check(-0.75f64, -0.75);
+check(-1.0f64, 0.0);
+check(-1.25f64, -0.25);
+check(f64::MIN, 0.0);
+
Source

fn abs(self) -> Self

Computes the absolute value of self. Returns FloatCore::nan() if the +number is FloatCore::nan().

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.abs() == y);
+}
+
+check(f32::INFINITY, f32::INFINITY);
+check(1.0f32, 1.0);
+check(0.0f64, 0.0);
+check(-0.0f64, 0.0);
+check(-1.0f64, 1.0);
+check(f64::MIN, f64::MAX);
+
Source

fn signum(self) -> Self

Returns a number that represents the sign of self.

+
    +
  • 1.0 if the number is positive, +0.0 or FloatCore::infinity()
  • +
  • -1.0 if the number is negative, -0.0 or FloatCore::neg_infinity()
  • +
  • FloatCore::nan() if the number is FloatCore::nan()
  • +
+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.signum() == y);
+}
+
+check(f32::INFINITY, 1.0);
+check(3.0f32, 1.0);
+check(0.0f32, 1.0);
+check(-0.0f64, -1.0);
+check(-3.0f64, -1.0);
+check(f64::MIN, -1.0);
+
Source

fn is_sign_positive(self) -> bool

Returns true if self is positive, including +0.0 and +FloatCore::infinity(), and FloatCore::nan().

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, p: bool) {
+    assert!(x.is_sign_positive() == p);
+}
+
+check(f32::INFINITY, true);
+check(f32::MAX, true);
+check(0.0f32, true);
+check(-0.0f64, false);
+check(f64::NEG_INFINITY, false);
+check(f64::MIN_POSITIVE, true);
+check(f64::NAN, true);
+check(-f64::NAN, false);
+
Source

fn is_sign_negative(self) -> bool

Returns true if self is negative, including -0.0 and +FloatCore::neg_infinity(), and -FloatCore::nan().

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, p: bool) {
+    assert!(x.is_sign_negative() == p);
+}
+
+check(f32::INFINITY, false);
+check(f32::MAX, false);
+check(0.0f32, false);
+check(-0.0f64, true);
+check(f64::NEG_INFINITY, true);
+check(f64::MIN_POSITIVE, false);
+check(f64::NAN, false);
+check(-f64::NAN, true);
+
Source

fn min(self, other: Self) -> Self

Returns the minimum of the two numbers.

+

If one of the arguments is NaN, then the other argument is returned.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T, min: T) {
+    assert!(x.min(y) == min);
+}
+
+check(1.0f32, 2.0, 1.0);
+check(f32::NAN, 2.0, 2.0);
+check(1.0f64, -2.0, -2.0);
+check(1.0f64, f64::NAN, 1.0);
+
Source

fn max(self, other: Self) -> Self

Returns the maximum of the two numbers.

+

If one of the arguments is NaN, then the other argument is returned.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T, max: T) {
+    assert!(x.max(y) == max);
+}
+
+check(1.0f32, 2.0, 2.0);
+check(1.0f32, f32::NAN, 1.0);
+check(-1.0f64, 2.0, 2.0);
+check(-1.0f64, f64::NAN, -1.0);
+
Source

fn clamp(self, min: Self, max: Self) -> Self

A value bounded by a minimum and a maximum

+

If input is less than min then this returns min. +If input is greater than max then this returns max. +Otherwise this returns input.

+

Panics in debug mode if !(min <= max).

+
§Examples
+
use num_traits::float::FloatCore;
+
+fn check<T: FloatCore>(val: T, min: T, max: T, expected: T) {
+    assert!(val.clamp(min, max) == expected);
+}
+
+
+check(1.0f32, 0.0, 2.0, 1.0);
+check(1.0f32, 2.0, 3.0, 2.0);
+check(3.0f32, 0.0, 2.0, 2.0);
+
+check(1.0f64, 0.0, 2.0, 1.0);
+check(1.0f64, 2.0, 3.0, 2.0);
+check(3.0f64, 0.0, 2.0, 2.0);
+
Source

fn recip(self) -> Self

Returns the reciprocal (multiplicative inverse) of the number.

+
§Examples
+
use num_traits::float::FloatCore;
+use std::{f32, f64};
+
+fn check<T: FloatCore>(x: T, y: T) {
+    assert!(x.recip() == y);
+    assert!(y.recip() == x);
+}
+
+check(f32::INFINITY, 0.0);
+check(2.0f32, 0.5);
+check(-0.25f64, -4.0);
+check(-0.0f64, f64::NEG_INFINITY);
+
Source

fn powi(self, exp: i32) -> Self

Raise a number to an integer power.

+

Using this function is generally faster than using powf

+
§Examples
+
use num_traits::float::FloatCore;
+
+fn check<T: FloatCore>(x: T, exp: i32, powi: T) {
+    assert!(x.powi(exp) == powi);
+}
+
+check(9.0f32, 2, 81.0);
+check(1.0f32, -2, 1.0);
+check(10.0f64, 20, 1e20);
+check(4.0f64, -2, 0.0625);
+check(-1.0f64, std::i32::MIN, 1.0);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl FloatCore for f32

Source§

fn infinity() -> Self

Source§

fn neg_infinity() -> Self

Source§

fn nan() -> Self

Source§

fn neg_zero() -> Self

Source§

fn min_value() -> Self

Source§

fn min_positive_value() -> Self

Source§

fn epsilon() -> Self

Source§

fn max_value() -> Self

Source§

fn integer_decode(self) -> (u64, i16, i8)

Source§

fn is_nan(self) -> bool

Source§

fn is_infinite(self) -> bool

Source§

fn is_finite(self) -> bool

Source§

fn is_normal(self) -> bool

Source§

fn is_subnormal(self) -> bool

Source§

fn clamp(self, min: Self, max: Self) -> Self

Source§

fn classify(self) -> FpCategory

Source§

fn is_sign_positive(self) -> bool

Source§

fn is_sign_negative(self) -> bool

Source§

fn min(self, other: Self) -> Self

Source§

fn max(self, other: Self) -> Self

Source§

fn recip(self) -> Self

Source§

fn to_degrees(self) -> Self

Source§

fn to_radians(self) -> Self

Source§

impl FloatCore for f64

Source§

fn infinity() -> Self

Source§

fn neg_infinity() -> Self

Source§

fn nan() -> Self

Source§

fn neg_zero() -> Self

Source§

fn min_value() -> Self

Source§

fn min_positive_value() -> Self

Source§

fn epsilon() -> Self

Source§

fn max_value() -> Self

Source§

fn integer_decode(self) -> (u64, i16, i8)

Source§

fn is_nan(self) -> bool

Source§

fn is_infinite(self) -> bool

Source§

fn is_finite(self) -> bool

Source§

fn is_normal(self) -> bool

Source§

fn is_subnormal(self) -> bool

Source§

fn clamp(self, min: Self, max: Self) -> Self

Source§

fn classify(self) -> FpCategory

Source§

fn is_sign_positive(self) -> bool

Source§

fn is_sign_negative(self) -> bool

Source§

fn min(self, other: Self) -> Self

Source§

fn max(self, other: Self) -> Self

Source§

fn recip(self) -> Self

Source§

fn to_degrees(self) -> Self

Source§

fn to_radians(self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/float/trait.TotalOrder.html b/num_traits/float/trait.TotalOrder.html new file mode 100644 index 0000000..7b9a6c6 --- /dev/null +++ b/num_traits/float/trait.TotalOrder.html @@ -0,0 +1,52 @@ +TotalOrder in num_traits::float - Rust
num_traits::float

Trait TotalOrder

Source
pub trait TotalOrder {
+    // Required method
+    fn total_cmp(&self, other: &Self) -> Ordering;
+}
Expand description

Trait for floating point numbers that provide an implementation +of the totalOrder predicate as defined in the IEEE 754 (2008 revision) +floating point standard.

+

Required Methods§

Source

fn total_cmp(&self, other: &Self) -> Ordering

Return the ordering between self and other.

+

Unlike the standard partial comparison between floating point numbers, +this comparison always produces an ordering in accordance to +the totalOrder predicate as defined in the IEEE 754 (2008 revision) +floating point standard. The values are ordered in the following sequence:

+
    +
  • negative quiet NaN
  • +
  • negative signaling NaN
  • +
  • negative infinity
  • +
  • negative numbers
  • +
  • negative subnormal numbers
  • +
  • negative zero
  • +
  • positive zero
  • +
  • positive subnormal numbers
  • +
  • positive numbers
  • +
  • positive infinity
  • +
  • positive signaling NaN
  • +
  • positive quiet NaN.
  • +
+

The ordering established by this function does not always agree with the +PartialOrd and PartialEq implementations. For example, +they consider negative and positive zero equal, while total_cmp +doesn’t.

+

The interpretation of the signaling NaN bit follows the definition in +the IEEE 754 standard, which may not match the interpretation by some of +the older, non-conformant (e.g. MIPS) hardware implementations.

+
§Examples
+
use num_traits::float::TotalOrder;
+use std::cmp::Ordering;
+use std::{f32, f64};
+
+fn check_eq<T: TotalOrder>(x: T, y: T) {
+    assert_eq!(x.total_cmp(&y), Ordering::Equal);
+}
+
+check_eq(f64::NAN, f64::NAN);
+check_eq(f32::NAN, f32::NAN);
+
+fn check_lt<T: TotalOrder>(x: T, y: T) {
+    assert_eq!(x.total_cmp(&y), Ordering::Less);
+}
+
+check_lt(-f64::NAN, f64::NAN);
+check_lt(f64::INFINITY, f64::NAN);
+check_lt(-0.0_f64, 0.0_f64);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl TotalOrder for f32

Source§

fn total_cmp(&self, other: &Self) -> Ordering

Source§

impl TotalOrder for f64

Source§

fn total_cmp(&self, other: &Self) -> Ordering

Implementors§

\ No newline at end of file diff --git a/num_traits/fn.clamp.html b/num_traits/fn.clamp.html new file mode 100644 index 0000000..3c4284d --- /dev/null +++ b/num_traits/fn.clamp.html @@ -0,0 +1,6 @@ +clamp in num_traits - Rust
num_traits

Function clamp

Source
pub fn clamp<T: PartialOrd>(input: T, min: T, max: T) -> T
Expand description

A value bounded by a minimum and a maximum

+

If input is less than min then this returns min. +If input is greater than max then this returns max. +Otherwise this returns input.

+

Panics in debug mode if !(min <= max).

+
\ No newline at end of file diff --git a/num_traits/fn.clamp_max.html b/num_traits/fn.clamp_max.html new file mode 100644 index 0000000..4458114 --- /dev/null +++ b/num_traits/fn.clamp_max.html @@ -0,0 +1,6 @@ +clamp_max in num_traits - Rust
num_traits

Function clamp_max

Source
pub fn clamp_max<T: PartialOrd>(input: T, max: T) -> T
Expand description

A value bounded by a maximum value

+

If input is greater than max then this returns max. +Otherwise this returns input. +clamp_max(std::f32::NAN, 1.0) preserves NAN different from f32::max(std::f32::NAN, 1.0).

+

Panics in debug mode if !(max == max). (This occurs if max is NAN.)

+
\ No newline at end of file diff --git a/num_traits/fn.clamp_min.html b/num_traits/fn.clamp_min.html new file mode 100644 index 0000000..c3709f8 --- /dev/null +++ b/num_traits/fn.clamp_min.html @@ -0,0 +1,6 @@ +clamp_min in num_traits - Rust
num_traits

Function clamp_min

Source
pub fn clamp_min<T: PartialOrd>(input: T, min: T) -> T
Expand description

A value bounded by a minimum value

+

If input is less than min then this returns min. +Otherwise this returns input. +clamp_min(std::f32::NAN, 1.0) preserves NAN different from f32::min(std::f32::NAN, 1.0).

+

Panics in debug mode if !(min == min). (This occurs if min is NAN.)

+
\ No newline at end of file diff --git a/num_traits/identities/fn.one.html b/num_traits/identities/fn.one.html new file mode 100644 index 0000000..a7d76bd --- /dev/null +++ b/num_traits/identities/fn.one.html @@ -0,0 +1,2 @@ +one in num_traits::identities - Rust
num_traits::identities

Function one

Source
pub fn one<T: One>() -> T
Expand description

Returns the multiplicative identity, 1.

+
\ No newline at end of file diff --git a/num_traits/identities/fn.zero.html b/num_traits/identities/fn.zero.html new file mode 100644 index 0000000..cbd96e6 --- /dev/null +++ b/num_traits/identities/fn.zero.html @@ -0,0 +1,2 @@ +zero in num_traits::identities - Rust
num_traits::identities

Function zero

Source
pub fn zero<T: Zero>() -> T
Expand description

Returns the additive identity, 0.

+
\ No newline at end of file diff --git a/num_traits/identities/index.html b/num_traits/identities/index.html new file mode 100644 index 0000000..524ffb4 --- /dev/null +++ b/num_traits/identities/index.html @@ -0,0 +1,3 @@ +num_traits::identities - Rust
num_traits

Module identities

Source

Traits§

  • Defines an associated constant representing the multiplicative identity +element for Self.
  • Defines an associated constant representing the additive identity element +for Self.
  • Defines a multiplicative identity element for Self.
  • Defines an additive identity element for Self.

Functions§

  • Returns the multiplicative identity, 1.
  • Returns the additive identity, 0.
\ No newline at end of file diff --git a/num_traits/identities/sidebar-items.js b/num_traits/identities/sidebar-items.js new file mode 100644 index 0000000..16fae5e --- /dev/null +++ b/num_traits/identities/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["one","zero"],"trait":["ConstOne","ConstZero","One","Zero"]}; \ No newline at end of file diff --git a/num_traits/identities/trait.ConstOne.html b/num_traits/identities/trait.ConstOne.html new file mode 100644 index 0000000..555c360 --- /dev/null +++ b/num_traits/identities/trait.ConstOne.html @@ -0,0 +1,7 @@ +ConstOne in num_traits::identities - Rust
num_traits::identities

Trait ConstOne

Source
pub trait ConstOne: One {
+    const ONE: Self;
+}
Expand description

Defines an associated constant representing the multiplicative identity +element for Self.

+

Required Associated Constants§

Source

const ONE: Self

The multiplicative identity element of Self, 1.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl ConstOne for f32

Source§

const ONE: Self = 1f32

Source§

impl ConstOne for f64

Source§

const ONE: Self = 1f64

Source§

impl ConstOne for i8

Source§

const ONE: Self = 1i8

Source§

impl ConstOne for i16

Source§

const ONE: Self = 1i16

Source§

impl ConstOne for i32

Source§

const ONE: Self = 1i32

Source§

impl ConstOne for i64

Source§

const ONE: Self = 1i64

Source§

impl ConstOne for i128

Source§

const ONE: Self = 1i128

Source§

impl ConstOne for isize

Source§

const ONE: Self = 1isize

Source§

impl ConstOne for u8

Source§

const ONE: Self = 1u8

Source§

impl ConstOne for u16

Source§

const ONE: Self = 1u16

Source§

impl ConstOne for u32

Source§

const ONE: Self = 1u32

Source§

impl ConstOne for u64

Source§

const ONE: Self = 1u64

Source§

impl ConstOne for u128

Source§

const ONE: Self = 1u128

Source§

impl ConstOne for usize

Source§

const ONE: Self = 1usize

Source§

impl<T: ConstOne> ConstOne for Wrapping<T>
where + Wrapping<T>: Mul<Output = Wrapping<T>>,

Source§

const ONE: Self = _

Implementors§

\ No newline at end of file diff --git a/num_traits/identities/trait.ConstZero.html b/num_traits/identities/trait.ConstZero.html new file mode 100644 index 0000000..af8fa6f --- /dev/null +++ b/num_traits/identities/trait.ConstZero.html @@ -0,0 +1,7 @@ +ConstZero in num_traits::identities - Rust
num_traits::identities

Trait ConstZero

Source
pub trait ConstZero: Zero {
+    const ZERO: Self;
+}
Expand description

Defines an associated constant representing the additive identity element +for Self.

+

Required Associated Constants§

Source

const ZERO: Self

The additive identity element of Self, 0.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl ConstZero for f32

Source§

const ZERO: Self = 0f32

Source§

impl ConstZero for f64

Source§

const ZERO: Self = 0f64

Source§

impl ConstZero for i8

Source§

const ZERO: Self = 0i8

Source§

impl ConstZero for i16

Source§

const ZERO: Self = 0i16

Source§

impl ConstZero for i32

Source§

const ZERO: Self = 0i32

Source§

impl ConstZero for i64

Source§

const ZERO: Self = 0i64

Source§

impl ConstZero for i128

Source§

const ZERO: Self = 0i128

Source§

impl ConstZero for isize

Source§

const ZERO: Self = 0isize

Source§

impl ConstZero for u8

Source§

const ZERO: Self = 0u8

Source§

impl ConstZero for u16

Source§

const ZERO: Self = 0u16

Source§

impl ConstZero for u32

Source§

const ZERO: Self = 0u32

Source§

impl ConstZero for u64

Source§

const ZERO: Self = 0u64

Source§

impl ConstZero for u128

Source§

const ZERO: Self = 0u128

Source§

impl ConstZero for usize

Source§

const ZERO: Self = 0usize

Source§

impl<T: ConstZero> ConstZero for Wrapping<T>
where + Wrapping<T>: Add<Output = Wrapping<T>>,

Source§

const ZERO: Self = _

Implementors§

\ No newline at end of file diff --git a/num_traits/identities/trait.One.html b/num_traits/identities/trait.One.html new file mode 100644 index 0000000..001481d --- /dev/null +++ b/num_traits/identities/trait.One.html @@ -0,0 +1,23 @@ +One in num_traits::identities - Rust
num_traits::identities

Trait One

Source
pub trait One: Sized + Mul<Self, Output = Self> {
+    // Required method
+    fn one() -> Self;
+
+    // Provided methods
+    fn set_one(&mut self) { ... }
+    fn is_one(&self) -> bool
+       where Self: PartialEq { ... }
+}
Expand description

Defines a multiplicative identity element for Self.

+

§Laws

a * 1 = a       ∀ a ∈ Self
+1 * a = a       ∀ a ∈ Self

Required Methods§

Source

fn one() -> Self

Returns the multiplicative identity element of Self, 1.

+
§Purity
+

This function should return the same result at all times regardless of +external mutable state, for example values stored in TLS or in +static muts.

+

Provided Methods§

Source

fn set_one(&mut self)

Sets self to the multiplicative identity element of Self, 1.

+
Source

fn is_one(&self) -> bool
where + Self: PartialEq,

Returns true if self is equal to the multiplicative identity.

+

For performance reasons, it’s best to implement this manually. +After a semver bump, this method will be required, and the +where Self: PartialEq bound will be removed.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl One for f32

Source§

fn one() -> f32

Source§

fn is_one(&self) -> bool

Source§

impl One for f64

Source§

fn one() -> f64

Source§

fn is_one(&self) -> bool

Source§

impl One for i8

Source§

fn one() -> i8

Source§

fn is_one(&self) -> bool

Source§

impl One for i16

Source§

fn one() -> i16

Source§

fn is_one(&self) -> bool

Source§

impl One for i32

Source§

fn one() -> i32

Source§

fn is_one(&self) -> bool

Source§

impl One for i64

Source§

fn one() -> i64

Source§

fn is_one(&self) -> bool

Source§

impl One for i128

Source§

fn one() -> i128

Source§

fn is_one(&self) -> bool

Source§

impl One for isize

Source§

fn one() -> isize

Source§

fn is_one(&self) -> bool

Source§

impl One for u8

Source§

fn one() -> u8

Source§

fn is_one(&self) -> bool

Source§

impl One for u16

Source§

fn one() -> u16

Source§

fn is_one(&self) -> bool

Source§

impl One for u32

Source§

fn one() -> u32

Source§

fn is_one(&self) -> bool

Source§

impl One for u64

Source§

fn one() -> u64

Source§

fn is_one(&self) -> bool

Source§

impl One for u128

Source§

fn one() -> u128

Source§

fn is_one(&self) -> bool

Source§

impl One for usize

Source§

fn one() -> usize

Source§

fn is_one(&self) -> bool

Source§

impl<T: One> One for Wrapping<T>
where + Wrapping<T>: Mul<Output = Wrapping<T>>,

Source§

fn set_one(&mut self)

Source§

fn one() -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/identities/trait.Zero.html b/num_traits/identities/trait.Zero.html new file mode 100644 index 0000000..d28bb4f --- /dev/null +++ b/num_traits/identities/trait.Zero.html @@ -0,0 +1,18 @@ +Zero in num_traits::identities - Rust
num_traits::identities

Trait Zero

Source
pub trait Zero: Sized + Add<Self, Output = Self> {
+    // Required methods
+    fn zero() -> Self;
+    fn is_zero(&self) -> bool;
+
+    // Provided method
+    fn set_zero(&mut self) { ... }
+}
Expand description

Defines an additive identity element for Self.

+

§Laws

a + 0 = a       ∀ a ∈ Self
+0 + a = a       ∀ a ∈ Self

Required Methods§

Source

fn zero() -> Self

Returns the additive identity element of Self, 0.

+
§Purity
+

This function should return the same result at all times regardless of +external mutable state, for example values stored in TLS or in +static muts.

+
Source

fn is_zero(&self) -> bool

Returns true if self is equal to the additive identity.

+

Provided Methods§

Source

fn set_zero(&mut self)

Sets self to the additive identity element of Self, 0.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Zero for f32

Source§

fn zero() -> f32

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for f64

Source§

fn zero() -> f64

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for i8

Source§

fn zero() -> i8

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for i16

Source§

fn zero() -> i16

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for i32

Source§

fn zero() -> i32

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for i64

Source§

fn zero() -> i64

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for i128

Source§

impl Zero for isize

Source§

impl Zero for u8

Source§

fn zero() -> u8

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for u16

Source§

fn zero() -> u16

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for u32

Source§

fn zero() -> u32

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for u64

Source§

fn zero() -> u64

Source§

fn is_zero(&self) -> bool

Source§

impl Zero for u128

Source§

impl Zero for usize

Source§

impl<T: Zero> Zero for Wrapping<T>
where + Wrapping<T>: Add<Output = Wrapping<T>>,

Source§

fn is_zero(&self) -> bool

Source§

fn set_zero(&mut self)

Source§

fn zero() -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/index.html b/num_traits/index.html new file mode 100644 index 0000000..6f0bac1 --- /dev/null +++ b/num_traits/index.html @@ -0,0 +1,8 @@ +num_traits - Rust

Crate num_traits

Source
Expand description

Numeric traits for generic mathematics

+

§Compatibility

+

The num-traits crate is tested for rustc 1.60 and greater.

+

Re-exports§

Modules§

Structs§

Enums§

Traits§

  • The base trait for numeric types, covering 0 and 1 values, +comparisons, basic numeric operations, and string conversion.
  • The trait for Num types which also implement assignment operators.
  • Generic trait for types implementing numeric assignment operators (like +=).
  • The trait for NumAssign types which also implement assignment operations +taking the second operand by reference.
  • Generic trait for types implementing basic numeric operations
  • The trait for Num types which also implement numeric operations taking +the second operand by reference.
  • The trait for Num references which implement numeric operations, taking the +second operand either by value or by reference.

Functions§

  • A value bounded by a minimum and a maximum
  • A value bounded by a maximum value
  • A value bounded by a minimum value
\ No newline at end of file diff --git a/num_traits/int/index.html b/num_traits/int/index.html new file mode 100644 index 0000000..fe2eec6 --- /dev/null +++ b/num_traits/int/index.html @@ -0,0 +1 @@ +num_traits::int - Rust
num_traits

Module int

Source

Traits§

  • Generic trait for primitive integers.
\ No newline at end of file diff --git a/num_traits/int/sidebar-items.js b/num_traits/int/sidebar-items.js new file mode 100644 index 0000000..f749a5b --- /dev/null +++ b/num_traits/int/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["PrimInt"]}; \ No newline at end of file diff --git a/num_traits/int/trait.PrimInt.html b/num_traits/int/trait.PrimInt.html new file mode 100644 index 0000000..dd2f9f9 --- /dev/null +++ b/num_traits/int/trait.PrimInt.html @@ -0,0 +1,240 @@ +PrimInt in num_traits::int - Rust
num_traits::int

Trait PrimInt

Source
pub trait PrimInt:
+    Sized
+    + Copy
+    + Num
+    + NumCast
+    + Bounded
+    + PartialOrd
+    + Ord
+    + Eq
+    + Not<Output = Self>
+    + BitAnd<Output = Self>
+    + BitOr<Output = Self>
+    + BitXor<Output = Self>
+    + Shl<usize, Output = Self>
+    + Shr<usize, Output = Self>
+    + CheckedAdd<Output = Self>
+    + CheckedSub<Output = Self>
+    + CheckedMul<Output = Self>
+    + CheckedDiv<Output = Self>
+    + Saturating {
+
Show 19 methods // Required methods + fn count_ones(self) -> u32; + fn count_zeros(self) -> u32; + fn leading_zeros(self) -> u32; + fn trailing_zeros(self) -> u32; + fn rotate_left(self, n: u32) -> Self; + fn rotate_right(self, n: u32) -> Self; + fn signed_shl(self, n: u32) -> Self; + fn signed_shr(self, n: u32) -> Self; + fn unsigned_shl(self, n: u32) -> Self; + fn unsigned_shr(self, n: u32) -> Self; + fn swap_bytes(self) -> Self; + fn from_be(x: Self) -> Self; + fn from_le(x: Self) -> Self; + fn to_be(self) -> Self; + fn to_le(self) -> Self; + fn pow(self, exp: u32) -> Self; + + // Provided methods + fn leading_ones(self) -> u32 { ... } + fn trailing_ones(self) -> u32 { ... } + fn reverse_bits(self) -> Self { ... } +
}
Expand description

Generic trait for primitive integers.

+

The PrimInt trait is an abstraction over the builtin primitive integer types (e.g., u8, +u32, isize, i128, …). It inherits the basic numeric traits and extends them with +bitwise operators and non-wrapping arithmetic.

+

The trait explicitly inherits Copy, Eq, Ord, and Sized. The intention is that all +types implementing this trait behave like primitive types that are passed by value by default +and behave like builtin integers. Furthermore, the types are expected to expose the integer +value in binary representation and support bitwise operators. The standard bitwise operations +(e.g., bitwise-and, bitwise-or, right-shift, left-shift) are inherited and the trait extends +these with introspective queries (e.g., PrimInt::count_ones(), PrimInt::leading_zeros()), +bitwise combinators (e.g., PrimInt::rotate_left()), and endianness converters (e.g., +PrimInt::to_be()).

+

All PrimInt types are expected to be fixed-width binary integers. The width can be queried +via T::zero().count_zeros(). The trait currently lacks a way to query the width at +compile-time.

+

While a default implementation for all builtin primitive integers is provided, the trait is in +no way restricted to these. Other integer types that fulfil the requirements are free to +implement the trait was well.

+

This trait and many of the method names originate in the unstable core::num::Int trait from +the rust standard library. The original trait was never stabilized and thus removed from the +standard library.

+

Required Methods§

Source

fn count_ones(self) -> u32

Returns the number of ones in the binary representation of self.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0b01001100u8;
+
+assert_eq!(n.count_ones(), 3);
+
Source

fn count_zeros(self) -> u32

Returns the number of zeros in the binary representation of self.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0b01001100u8;
+
+assert_eq!(n.count_zeros(), 5);
+
Source

fn leading_zeros(self) -> u32

Returns the number of leading zeros in the binary representation +of self.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0b0101000u16;
+
+assert_eq!(n.leading_zeros(), 10);
+
Source

fn trailing_zeros(self) -> u32

Returns the number of trailing zeros in the binary representation +of self.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0b0101000u16;
+
+assert_eq!(n.trailing_zeros(), 3);
+
Source

fn rotate_left(self, n: u32) -> Self

Shifts the bits to the left by a specified amount, n, wrapping +the truncated bits to the end of the resulting integer.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+let m = 0x3456789ABCDEF012u64;
+
+assert_eq!(n.rotate_left(12), m);
+
Source

fn rotate_right(self, n: u32) -> Self

Shifts the bits to the right by a specified amount, n, wrapping +the truncated bits to the beginning of the resulting integer.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+let m = 0xDEF0123456789ABCu64;
+
+assert_eq!(n.rotate_right(12), m);
+
Source

fn signed_shl(self, n: u32) -> Self

Shifts the bits to the left by a specified amount, n, filling +zeros in the least significant bits.

+

This is bitwise equivalent to signed Shl.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+let m = 0x3456789ABCDEF000u64;
+
+assert_eq!(n.signed_shl(12), m);
+
Source

fn signed_shr(self, n: u32) -> Self

Shifts the bits to the right by a specified amount, n, copying +the “sign bit” in the most significant bits even for unsigned types.

+

This is bitwise equivalent to signed Shr.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0xFEDCBA9876543210u64;
+let m = 0xFFFFEDCBA9876543u64;
+
+assert_eq!(n.signed_shr(12), m);
+
Source

fn unsigned_shl(self, n: u32) -> Self

Shifts the bits to the left by a specified amount, n, filling +zeros in the least significant bits.

+

This is bitwise equivalent to unsigned Shl.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFi64;
+let m = 0x3456789ABCDEF000i64;
+
+assert_eq!(n.unsigned_shl(12), m);
+
Source

fn unsigned_shr(self, n: u32) -> Self

Shifts the bits to the right by a specified amount, n, filling +zeros in the most significant bits.

+

This is bitwise equivalent to unsigned Shr.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = -8i8; // 0b11111000
+let m = 62i8; // 0b00111110
+
+assert_eq!(n.unsigned_shr(2), m);
+
Source

fn swap_bytes(self) -> Self

Reverses the byte order of the integer.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+let m = 0xEFCDAB8967452301u64;
+
+assert_eq!(n.swap_bytes(), m);
+
Source

fn from_be(x: Self) -> Self

Convert an integer from big endian to the target’s endianness.

+

On big endian this is a no-op. On little endian the bytes are swapped.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+
+if cfg!(target_endian = "big") {
+    assert_eq!(u64::from_be(n), n)
+} else {
+    assert_eq!(u64::from_be(n), n.swap_bytes())
+}
+
Source

fn from_le(x: Self) -> Self

Convert an integer from little endian to the target’s endianness.

+

On little endian this is a no-op. On big endian the bytes are swapped.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+
+if cfg!(target_endian = "little") {
+    assert_eq!(u64::from_le(n), n)
+} else {
+    assert_eq!(u64::from_le(n), n.swap_bytes())
+}
+
Source

fn to_be(self) -> Self

Convert self to big endian from the target’s endianness.

+

On big endian this is a no-op. On little endian the bytes are swapped.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+
+if cfg!(target_endian = "big") {
+    assert_eq!(n.to_be(), n)
+} else {
+    assert_eq!(n.to_be(), n.swap_bytes())
+}
+
Source

fn to_le(self) -> Self

Convert self to little endian from the target’s endianness.

+

On little endian this is a no-op. On big endian the bytes are swapped.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x0123456789ABCDEFu64;
+
+if cfg!(target_endian = "little") {
+    assert_eq!(n.to_le(), n)
+} else {
+    assert_eq!(n.to_le(), n.swap_bytes())
+}
+
Source

fn pow(self, exp: u32) -> Self

Raises self to the power of exp, using exponentiation by squaring.

+
§Examples
+
use num_traits::PrimInt;
+
+assert_eq!(2i32.pow(4), 16);
+

Provided Methods§

Source

fn leading_ones(self) -> u32

Returns the number of leading ones in the binary representation +of self.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0xF00Du16;
+
+assert_eq!(n.leading_ones(), 4);
+
Source

fn trailing_ones(self) -> u32

Returns the number of trailing ones in the binary representation +of self.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0xBEEFu16;
+
+assert_eq!(n.trailing_ones(), 4);
+
Source

fn reverse_bits(self) -> Self

Reverses the order of bits in the integer.

+

The least significant bit becomes the most significant bit, second least-significant bit +becomes second most-significant bit, etc.

+
§Examples
+
use num_traits::PrimInt;
+
+let n = 0x12345678u32;
+let m = 0x1e6a2c48u32;
+
+assert_eq!(n.reverse_bits(), m);
+assert_eq!(0u32.reverse_bits(), 0);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl PrimInt for i8

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for i16

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for i32

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for i64

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for i128

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for isize

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for u8

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for u16

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for u32

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for u64

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for u128

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Source§

impl PrimInt for usize

Source§

fn count_ones(self) -> u32

Source§

fn count_zeros(self) -> u32

Source§

fn leading_ones(self) -> u32

Source§

fn leading_zeros(self) -> u32

Source§

fn trailing_ones(self) -> u32

Source§

fn trailing_zeros(self) -> u32

Source§

fn rotate_left(self, n: u32) -> Self

Source§

fn rotate_right(self, n: u32) -> Self

Source§

fn signed_shl(self, n: u32) -> Self

Source§

fn signed_shr(self, n: u32) -> Self

Source§

fn unsigned_shl(self, n: u32) -> Self

Source§

fn unsigned_shr(self, n: u32) -> Self

Source§

fn swap_bytes(self) -> Self

Source§

fn reverse_bits(self) -> Self

Source§

fn from_be(x: Self) -> Self

Source§

fn from_le(x: Self) -> Self

Source§

fn to_be(self) -> Self

Source§

fn to_le(self) -> Self

Source§

fn pow(self, exp: u32) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/bytes/index.html b/num_traits/ops/bytes/index.html new file mode 100644 index 0000000..a1323d7 --- /dev/null +++ b/num_traits/ops/bytes/index.html @@ -0,0 +1 @@ +num_traits::ops::bytes - Rust
num_traits::ops

Module bytes

Source

Traits§

\ No newline at end of file diff --git a/num_traits/ops/bytes/sidebar-items.js b/num_traits/ops/bytes/sidebar-items.js new file mode 100644 index 0000000..2bf3378 --- /dev/null +++ b/num_traits/ops/bytes/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["FromBytes","NumBytes","ToBytes"]}; \ No newline at end of file diff --git a/num_traits/ops/bytes/trait.FromBytes.html b/num_traits/ops/bytes/trait.FromBytes.html new file mode 100644 index 0000000..7d86149 --- /dev/null +++ b/num_traits/ops/bytes/trait.FromBytes.html @@ -0,0 +1,36 @@ +FromBytes in num_traits::ops::bytes - Rust
num_traits::ops::bytes

Trait FromBytes

Source
pub trait FromBytes: Sized {
+    type Bytes: NumBytes + ?Sized;
+
+    // Required methods
+    fn from_be_bytes(bytes: &Self::Bytes) -> Self;
+    fn from_le_bytes(bytes: &Self::Bytes) -> Self;
+
+    // Provided method
+    fn from_ne_bytes(bytes: &Self::Bytes) -> Self { ... }
+}

Required Associated Types§

Required Methods§

Source

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Create a number from its representation as a byte array in big endian.

+
§Examples
+
use num_traits::FromBytes;
+
+let value: u32 = FromBytes::from_be_bytes(&[0x12, 0x34, 0x56, 0x78]);
+assert_eq!(value, 0x12345678);
+
Source

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Create a number from its representation as a byte array in little endian.

+
§Examples
+
use num_traits::FromBytes;
+
+let value: u32 = FromBytes::from_le_bytes(&[0x78, 0x56, 0x34, 0x12]);
+assert_eq!(value, 0x12345678);
+

Provided Methods§

Source

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Create a number from its memory representation as a byte array in native endianness.

+

As the target platform’s native endianness is used, +portable code likely wants to use from_be_bytes or from_le_bytes, as appropriate instead.

+
§Examples
+
use num_traits::FromBytes;
+
+#[cfg(target_endian = "big")]
+let bytes = [0x12, 0x34, 0x56, 0x78];
+
+#[cfg(target_endian = "little")]
+let bytes = [0x78, 0x56, 0x34, 0x12];
+
+let value: u32 = FromBytes::from_ne_bytes(&bytes);
+assert_eq!(value, 0x12345678)
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl FromBytes for f32

Source§

type Bytes = [u8; 4]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for f64

Source§

type Bytes = [u8; 8]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for i8

Source§

type Bytes = [u8; 1]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for i16

Source§

type Bytes = [u8; 2]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for i32

Source§

type Bytes = [u8; 4]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for i64

Source§

type Bytes = [u8; 8]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for i128

Source§

type Bytes = [u8; 16]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for isize

Source§

type Bytes = [u8; 8]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for u8

Source§

type Bytes = [u8; 1]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for u16

Source§

type Bytes = [u8; 2]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for u32

Source§

type Bytes = [u8; 4]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for u64

Source§

type Bytes = [u8; 8]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for u128

Source§

type Bytes = [u8; 16]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Source§

impl FromBytes for usize

Source§

type Bytes = [u8; 8]

Source§

fn from_be_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_le_bytes(bytes: &Self::Bytes) -> Self

Source§

fn from_ne_bytes(bytes: &Self::Bytes) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/bytes/trait.NumBytes.html b/num_traits/ops/bytes/trait.NumBytes.html new file mode 100644 index 0000000..91d9f27 --- /dev/null +++ b/num_traits/ops/bytes/trait.NumBytes.html @@ -0,0 +1,12 @@ +NumBytes in num_traits::ops::bytes - Rust
num_traits::ops::bytes

Trait NumBytes

Source
pub trait NumBytes:
+    Debug
+    + AsRef<[u8]>
+    + AsMut<[u8]>
+    + PartialEq
+    + Eq
+    + PartialOrd
+    + Ord
+    + Hash
+    + Borrow<[u8]>
+    + BorrowMut<[u8]> { }

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T> NumBytes for T
where + T: Debug + AsRef<[u8]> + AsMut<[u8]> + PartialEq + Eq + PartialOrd + Ord + Hash + Borrow<[u8]> + BorrowMut<[u8]> + ?Sized,

\ No newline at end of file diff --git a/num_traits/ops/bytes/trait.ToBytes.html b/num_traits/ops/bytes/trait.ToBytes.html new file mode 100644 index 0000000..dc18624 --- /dev/null +++ b/num_traits/ops/bytes/trait.ToBytes.html @@ -0,0 +1,36 @@ +ToBytes in num_traits::ops::bytes - Rust
num_traits::ops::bytes

Trait ToBytes

Source
pub trait ToBytes {
+    type Bytes: NumBytes;
+
+    // Required methods
+    fn to_be_bytes(&self) -> Self::Bytes;
+    fn to_le_bytes(&self) -> Self::Bytes;
+
+    // Provided method
+    fn to_ne_bytes(&self) -> Self::Bytes { ... }
+}

Required Associated Types§

Required Methods§

Source

fn to_be_bytes(&self) -> Self::Bytes

Return the memory representation of this number as a byte array in big-endian byte order.

+
§Examples
+
use num_traits::ToBytes;
+
+let bytes = ToBytes::to_be_bytes(&0x12345678u32);
+assert_eq!(bytes, [0x12, 0x34, 0x56, 0x78]);
+
Source

fn to_le_bytes(&self) -> Self::Bytes

Return the memory representation of this number as a byte array in little-endian byte order.

+
§Examples
+
use num_traits::ToBytes;
+
+let bytes = ToBytes::to_le_bytes(&0x12345678u32);
+assert_eq!(bytes, [0x78, 0x56, 0x34, 0x12]);
+

Provided Methods§

Source

fn to_ne_bytes(&self) -> Self::Bytes

Return the memory representation of this number as a byte array in native byte order.

+

As the target platform’s native endianness is used, +portable code should use to_be_bytes or to_le_bytes, as appropriate, instead.

+
§Examples
+
use num_traits::ToBytes;
+
+#[cfg(target_endian = "big")]
+let expected = [0x12, 0x34, 0x56, 0x78];
+
+#[cfg(target_endian = "little")]
+let expected = [0x78, 0x56, 0x34, 0x12];
+
+let bytes = ToBytes::to_ne_bytes(&0x12345678u32);
+assert_eq!(bytes, expected)
+

Implementations on Foreign Types§

Source§

impl ToBytes for f32

Source§

type Bytes = [u8; 4]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for f64

Source§

type Bytes = [u8; 8]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for i8

Source§

type Bytes = [u8; 1]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for i16

Source§

type Bytes = [u8; 2]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for i32

Source§

type Bytes = [u8; 4]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for i64

Source§

type Bytes = [u8; 8]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for i128

Source§

type Bytes = [u8; 16]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for isize

Source§

type Bytes = [u8; 8]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for u8

Source§

type Bytes = [u8; 1]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for u16

Source§

type Bytes = [u8; 2]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for u32

Source§

type Bytes = [u8; 4]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for u64

Source§

type Bytes = [u8; 8]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for u128

Source§

type Bytes = [u8; 16]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Source§

impl ToBytes for usize

Source§

type Bytes = [u8; 8]

Source§

fn to_be_bytes(&self) -> Self::Bytes

Source§

fn to_le_bytes(&self) -> Self::Bytes

Source§

fn to_ne_bytes(&self) -> Self::Bytes

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/index.html b/num_traits/ops/checked/index.html new file mode 100644 index 0000000..03a8337 --- /dev/null +++ b/num_traits/ops/checked/index.html @@ -0,0 +1,7 @@ +num_traits::ops::checked - Rust
num_traits::ops

Module checked

Source

Traits§

  • Performs addition that returns None instead of wrapping around on +overflow.
  • Performs division that returns None instead of panicking on division by zero and instead of +wrapping around on underflow and overflow.
  • Performs multiplication that returns None instead of wrapping around on underflow or +overflow.
  • Performs negation that returns None if the result can’t be represented.
  • Performs an integral remainder that returns None instead of panicking on division by zero and +instead of wrapping around on underflow and overflow.
  • Performs a left shift that returns None on shifts larger than +or equal to the type width.
  • Performs a right shift that returns None on shifts larger than +or equal to the type width.
  • Performs subtraction that returns None instead of wrapping around on underflow.
\ No newline at end of file diff --git a/num_traits/ops/checked/sidebar-items.js b/num_traits/ops/checked/sidebar-items.js new file mode 100644 index 0000000..21a9a64 --- /dev/null +++ b/num_traits/ops/checked/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["CheckedAdd","CheckedDiv","CheckedMul","CheckedNeg","CheckedRem","CheckedShl","CheckedShr","CheckedSub"]}; \ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedAdd.html b/num_traits/ops/checked/trait.CheckedAdd.html new file mode 100644 index 0000000..e178bdd --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedAdd.html @@ -0,0 +1,8 @@ +CheckedAdd in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedAdd

Source
pub trait CheckedAdd: Sized + Add<Self, Output = Self> {
+    // Required method
+    fn checked_add(&self, v: &Self) -> Option<Self>;
+}
Expand description

Performs addition that returns None instead of wrapping around on +overflow.

+

Required Methods§

Source

fn checked_add(&self, v: &Self) -> Option<Self>

Adds two numbers, checking for overflow. If overflow happens, None is +returned.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedAdd for i8

Source§

fn checked_add(&self, v: &i8) -> Option<i8>

Source§

impl CheckedAdd for i16

Source§

fn checked_add(&self, v: &i16) -> Option<i16>

Source§

impl CheckedAdd for i32

Source§

fn checked_add(&self, v: &i32) -> Option<i32>

Source§

impl CheckedAdd for i64

Source§

fn checked_add(&self, v: &i64) -> Option<i64>

Source§

impl CheckedAdd for i128

Source§

fn checked_add(&self, v: &i128) -> Option<i128>

Source§

impl CheckedAdd for isize

Source§

impl CheckedAdd for u8

Source§

fn checked_add(&self, v: &u8) -> Option<u8>

Source§

impl CheckedAdd for u16

Source§

fn checked_add(&self, v: &u16) -> Option<u16>

Source§

impl CheckedAdd for u32

Source§

fn checked_add(&self, v: &u32) -> Option<u32>

Source§

impl CheckedAdd for u64

Source§

fn checked_add(&self, v: &u64) -> Option<u64>

Source§

impl CheckedAdd for u128

Source§

fn checked_add(&self, v: &u128) -> Option<u128>

Source§

impl CheckedAdd for usize

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedDiv.html b/num_traits/ops/checked/trait.CheckedDiv.html new file mode 100644 index 0000000..d8efec2 --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedDiv.html @@ -0,0 +1,8 @@ +CheckedDiv in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedDiv

Source
pub trait CheckedDiv: Sized + Div<Self, Output = Self> {
+    // Required method
+    fn checked_div(&self, v: &Self) -> Option<Self>;
+}
Expand description

Performs division that returns None instead of panicking on division by zero and instead of +wrapping around on underflow and overflow.

+

Required Methods§

Source

fn checked_div(&self, v: &Self) -> Option<Self>

Divides two numbers, checking for underflow, overflow and division by +zero. If any of that happens, None is returned.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedDiv for i8

Source§

fn checked_div(&self, v: &i8) -> Option<i8>

Source§

impl CheckedDiv for i16

Source§

fn checked_div(&self, v: &i16) -> Option<i16>

Source§

impl CheckedDiv for i32

Source§

fn checked_div(&self, v: &i32) -> Option<i32>

Source§

impl CheckedDiv for i64

Source§

fn checked_div(&self, v: &i64) -> Option<i64>

Source§

impl CheckedDiv for i128

Source§

fn checked_div(&self, v: &i128) -> Option<i128>

Source§

impl CheckedDiv for isize

Source§

impl CheckedDiv for u8

Source§

fn checked_div(&self, v: &u8) -> Option<u8>

Source§

impl CheckedDiv for u16

Source§

fn checked_div(&self, v: &u16) -> Option<u16>

Source§

impl CheckedDiv for u32

Source§

fn checked_div(&self, v: &u32) -> Option<u32>

Source§

impl CheckedDiv for u64

Source§

fn checked_div(&self, v: &u64) -> Option<u64>

Source§

impl CheckedDiv for u128

Source§

fn checked_div(&self, v: &u128) -> Option<u128>

Source§

impl CheckedDiv for usize

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedMul.html b/num_traits/ops/checked/trait.CheckedMul.html new file mode 100644 index 0000000..18a4dee --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedMul.html @@ -0,0 +1,8 @@ +CheckedMul in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedMul

Source
pub trait CheckedMul: Sized + Mul<Self, Output = Self> {
+    // Required method
+    fn checked_mul(&self, v: &Self) -> Option<Self>;
+}
Expand description

Performs multiplication that returns None instead of wrapping around on underflow or +overflow.

+

Required Methods§

Source

fn checked_mul(&self, v: &Self) -> Option<Self>

Multiplies two numbers, checking for underflow or overflow. If underflow +or overflow happens, None is returned.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedMul for i8

Source§

fn checked_mul(&self, v: &i8) -> Option<i8>

Source§

impl CheckedMul for i16

Source§

fn checked_mul(&self, v: &i16) -> Option<i16>

Source§

impl CheckedMul for i32

Source§

fn checked_mul(&self, v: &i32) -> Option<i32>

Source§

impl CheckedMul for i64

Source§

fn checked_mul(&self, v: &i64) -> Option<i64>

Source§

impl CheckedMul for i128

Source§

fn checked_mul(&self, v: &i128) -> Option<i128>

Source§

impl CheckedMul for isize

Source§

impl CheckedMul for u8

Source§

fn checked_mul(&self, v: &u8) -> Option<u8>

Source§

impl CheckedMul for u16

Source§

fn checked_mul(&self, v: &u16) -> Option<u16>

Source§

impl CheckedMul for u32

Source§

fn checked_mul(&self, v: &u32) -> Option<u32>

Source§

impl CheckedMul for u64

Source§

fn checked_mul(&self, v: &u64) -> Option<u64>

Source§

impl CheckedMul for u128

Source§

fn checked_mul(&self, v: &u128) -> Option<u128>

Source§

impl CheckedMul for usize

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedNeg.html b/num_traits/ops/checked/trait.CheckedNeg.html new file mode 100644 index 0000000..8f042ec --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedNeg.html @@ -0,0 +1,17 @@ +CheckedNeg in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedNeg

Source
pub trait CheckedNeg: Sized {
+    // Required method
+    fn checked_neg(&self) -> Option<Self>;
+}
Expand description

Performs negation that returns None if the result can’t be represented.

+

Required Methods§

Source

fn checked_neg(&self) -> Option<Self>

Negates a number, returning None for results that can’t be represented, like signed MIN +values that can’t be positive, or non-zero unsigned values that can’t be negative.

+
§Examples
+
use num_traits::CheckedNeg;
+use std::i32::MIN;
+
+assert_eq!(CheckedNeg::checked_neg(&1_i32), Some(-1));
+assert_eq!(CheckedNeg::checked_neg(&-1_i32), Some(1));
+assert_eq!(CheckedNeg::checked_neg(&MIN), None);
+
+assert_eq!(CheckedNeg::checked_neg(&0_u32), Some(0));
+assert_eq!(CheckedNeg::checked_neg(&1_u32), None);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedNeg for i8

Source§

impl CheckedNeg for i16

Source§

impl CheckedNeg for i32

Source§

impl CheckedNeg for i64

Source§

impl CheckedNeg for i128

Source§

impl CheckedNeg for isize

Source§

impl CheckedNeg for u8

Source§

impl CheckedNeg for u16

Source§

impl CheckedNeg for u32

Source§

impl CheckedNeg for u64

Source§

impl CheckedNeg for u128

Source§

impl CheckedNeg for usize

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedRem.html b/num_traits/ops/checked/trait.CheckedRem.html new file mode 100644 index 0000000..fb78d35 --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedRem.html @@ -0,0 +1,21 @@ +CheckedRem in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedRem

Source
pub trait CheckedRem: Sized + Rem<Self, Output = Self> {
+    // Required method
+    fn checked_rem(&self, v: &Self) -> Option<Self>;
+}
Expand description

Performs an integral remainder that returns None instead of panicking on division by zero and +instead of wrapping around on underflow and overflow.

+

Required Methods§

Source

fn checked_rem(&self, v: &Self) -> Option<Self>

Finds the remainder of dividing two numbers, checking for underflow, overflow and division +by zero. If any of that happens, None is returned.

+
§Examples
+
use num_traits::CheckedRem;
+use std::i32::MIN;
+
+assert_eq!(CheckedRem::checked_rem(&10, &7), Some(3));
+assert_eq!(CheckedRem::checked_rem(&10, &-7), Some(3));
+assert_eq!(CheckedRem::checked_rem(&-10, &7), Some(-3));
+assert_eq!(CheckedRem::checked_rem(&-10, &-7), Some(-3));
+
+assert_eq!(CheckedRem::checked_rem(&10, &0), None);
+
+assert_eq!(CheckedRem::checked_rem(&MIN, &1), Some(0));
+assert_eq!(CheckedRem::checked_rem(&MIN, &-1), None);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedRem for i8

Source§

fn checked_rem(&self, v: &i8) -> Option<i8>

Source§

impl CheckedRem for i16

Source§

fn checked_rem(&self, v: &i16) -> Option<i16>

Source§

impl CheckedRem for i32

Source§

fn checked_rem(&self, v: &i32) -> Option<i32>

Source§

impl CheckedRem for i64

Source§

fn checked_rem(&self, v: &i64) -> Option<i64>

Source§

impl CheckedRem for i128

Source§

fn checked_rem(&self, v: &i128) -> Option<i128>

Source§

impl CheckedRem for isize

Source§

impl CheckedRem for u8

Source§

fn checked_rem(&self, v: &u8) -> Option<u8>

Source§

impl CheckedRem for u16

Source§

fn checked_rem(&self, v: &u16) -> Option<u16>

Source§

impl CheckedRem for u32

Source§

fn checked_rem(&self, v: &u32) -> Option<u32>

Source§

impl CheckedRem for u64

Source§

fn checked_rem(&self, v: &u64) -> Option<u64>

Source§

impl CheckedRem for u128

Source§

fn checked_rem(&self, v: &u128) -> Option<u128>

Source§

impl CheckedRem for usize

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedShl.html b/num_traits/ops/checked/trait.CheckedShl.html new file mode 100644 index 0000000..2238ef7 --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedShl.html @@ -0,0 +1,17 @@ +CheckedShl in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedShl

Source
pub trait CheckedShl: Sized + Shl<u32, Output = Self> {
+    // Required method
+    fn checked_shl(&self, rhs: u32) -> Option<Self>;
+}
Expand description

Performs a left shift that returns None on shifts larger than +or equal to the type width.

+

Required Methods§

Source

fn checked_shl(&self, rhs: u32) -> Option<Self>

Checked shift left. Computes self << rhs, returning None +if rhs is larger than or equal to the number of bits in self.

+ +
use num_traits::CheckedShl;
+
+let x: u16 = 0x0001;
+
+assert_eq!(CheckedShl::checked_shl(&x, 0),  Some(0x0001));
+assert_eq!(CheckedShl::checked_shl(&x, 1),  Some(0x0002));
+assert_eq!(CheckedShl::checked_shl(&x, 15), Some(0x8000));
+assert_eq!(CheckedShl::checked_shl(&x, 16), None);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedShl for i8

Source§

fn checked_shl(&self, rhs: u32) -> Option<i8>

Source§

impl CheckedShl for i16

Source§

fn checked_shl(&self, rhs: u32) -> Option<i16>

Source§

impl CheckedShl for i32

Source§

fn checked_shl(&self, rhs: u32) -> Option<i32>

Source§

impl CheckedShl for i64

Source§

fn checked_shl(&self, rhs: u32) -> Option<i64>

Source§

impl CheckedShl for i128

Source§

fn checked_shl(&self, rhs: u32) -> Option<i128>

Source§

impl CheckedShl for isize

Source§

fn checked_shl(&self, rhs: u32) -> Option<isize>

Source§

impl CheckedShl for u8

Source§

fn checked_shl(&self, rhs: u32) -> Option<u8>

Source§

impl CheckedShl for u16

Source§

fn checked_shl(&self, rhs: u32) -> Option<u16>

Source§

impl CheckedShl for u32

Source§

fn checked_shl(&self, rhs: u32) -> Option<u32>

Source§

impl CheckedShl for u64

Source§

fn checked_shl(&self, rhs: u32) -> Option<u64>

Source§

impl CheckedShl for u128

Source§

fn checked_shl(&self, rhs: u32) -> Option<u128>

Source§

impl CheckedShl for usize

Source§

fn checked_shl(&self, rhs: u32) -> Option<usize>

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedShr.html b/num_traits/ops/checked/trait.CheckedShr.html new file mode 100644 index 0000000..bf2ad4d --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedShr.html @@ -0,0 +1,17 @@ +CheckedShr in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedShr

Source
pub trait CheckedShr: Sized + Shr<u32, Output = Self> {
+    // Required method
+    fn checked_shr(&self, rhs: u32) -> Option<Self>;
+}
Expand description

Performs a right shift that returns None on shifts larger than +or equal to the type width.

+

Required Methods§

Source

fn checked_shr(&self, rhs: u32) -> Option<Self>

Checked shift right. Computes self >> rhs, returning None +if rhs is larger than or equal to the number of bits in self.

+ +
use num_traits::CheckedShr;
+
+let x: u16 = 0x8000;
+
+assert_eq!(CheckedShr::checked_shr(&x, 0),  Some(0x8000));
+assert_eq!(CheckedShr::checked_shr(&x, 1),  Some(0x4000));
+assert_eq!(CheckedShr::checked_shr(&x, 15), Some(0x0001));
+assert_eq!(CheckedShr::checked_shr(&x, 16), None);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedShr for i8

Source§

fn checked_shr(&self, rhs: u32) -> Option<i8>

Source§

impl CheckedShr for i16

Source§

fn checked_shr(&self, rhs: u32) -> Option<i16>

Source§

impl CheckedShr for i32

Source§

fn checked_shr(&self, rhs: u32) -> Option<i32>

Source§

impl CheckedShr for i64

Source§

fn checked_shr(&self, rhs: u32) -> Option<i64>

Source§

impl CheckedShr for i128

Source§

fn checked_shr(&self, rhs: u32) -> Option<i128>

Source§

impl CheckedShr for isize

Source§

fn checked_shr(&self, rhs: u32) -> Option<isize>

Source§

impl CheckedShr for u8

Source§

fn checked_shr(&self, rhs: u32) -> Option<u8>

Source§

impl CheckedShr for u16

Source§

fn checked_shr(&self, rhs: u32) -> Option<u16>

Source§

impl CheckedShr for u32

Source§

fn checked_shr(&self, rhs: u32) -> Option<u32>

Source§

impl CheckedShr for u64

Source§

fn checked_shr(&self, rhs: u32) -> Option<u64>

Source§

impl CheckedShr for u128

Source§

fn checked_shr(&self, rhs: u32) -> Option<u128>

Source§

impl CheckedShr for usize

Source§

fn checked_shr(&self, rhs: u32) -> Option<usize>

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/checked/trait.CheckedSub.html b/num_traits/ops/checked/trait.CheckedSub.html new file mode 100644 index 0000000..667b443 --- /dev/null +++ b/num_traits/ops/checked/trait.CheckedSub.html @@ -0,0 +1,7 @@ +CheckedSub in num_traits::ops::checked - Rust
num_traits::ops::checked

Trait CheckedSub

Source
pub trait CheckedSub: Sized + Sub<Self, Output = Self> {
+    // Required method
+    fn checked_sub(&self, v: &Self) -> Option<Self>;
+}
Expand description

Performs subtraction that returns None instead of wrapping around on underflow.

+

Required Methods§

Source

fn checked_sub(&self, v: &Self) -> Option<Self>

Subtracts two numbers, checking for underflow. If underflow happens, +None is returned.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedSub for i8

Source§

fn checked_sub(&self, v: &i8) -> Option<i8>

Source§

impl CheckedSub for i16

Source§

fn checked_sub(&self, v: &i16) -> Option<i16>

Source§

impl CheckedSub for i32

Source§

fn checked_sub(&self, v: &i32) -> Option<i32>

Source§

impl CheckedSub for i64

Source§

fn checked_sub(&self, v: &i64) -> Option<i64>

Source§

impl CheckedSub for i128

Source§

fn checked_sub(&self, v: &i128) -> Option<i128>

Source§

impl CheckedSub for isize

Source§

impl CheckedSub for u8

Source§

fn checked_sub(&self, v: &u8) -> Option<u8>

Source§

impl CheckedSub for u16

Source§

fn checked_sub(&self, v: &u16) -> Option<u16>

Source§

impl CheckedSub for u32

Source§

fn checked_sub(&self, v: &u32) -> Option<u32>

Source§

impl CheckedSub for u64

Source§

fn checked_sub(&self, v: &u64) -> Option<u64>

Source§

impl CheckedSub for u128

Source§

fn checked_sub(&self, v: &u128) -> Option<u128>

Source§

impl CheckedSub for usize

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/euclid/index.html b/num_traits/ops/euclid/index.html new file mode 100644 index 0000000..bcd29b8 --- /dev/null +++ b/num_traits/ops/euclid/index.html @@ -0,0 +1 @@ +num_traits::ops::euclid - Rust
num_traits::ops

Module euclid

Source

Traits§

\ No newline at end of file diff --git a/num_traits/ops/euclid/sidebar-items.js b/num_traits/ops/euclid/sidebar-items.js new file mode 100644 index 0000000..26abd80 --- /dev/null +++ b/num_traits/ops/euclid/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["CheckedEuclid","Euclid"]}; \ No newline at end of file diff --git a/num_traits/ops/euclid/trait.CheckedEuclid.html b/num_traits/ops/euclid/trait.CheckedEuclid.html new file mode 100644 index 0000000..dc5d157 --- /dev/null +++ b/num_traits/ops/euclid/trait.CheckedEuclid.html @@ -0,0 +1,23 @@ +CheckedEuclid in num_traits::ops::euclid - Rust
num_traits::ops::euclid

Trait CheckedEuclid

Source
pub trait CheckedEuclid: Euclid {
+    // Required methods
+    fn checked_div_euclid(&self, v: &Self) -> Option<Self>;
+    fn checked_rem_euclid(&self, v: &Self) -> Option<Self>;
+
+    // Provided method
+    fn checked_div_rem_euclid(&self, v: &Self) -> Option<(Self, Self)> { ... }
+}

Required Methods§

Source

fn checked_div_euclid(&self, v: &Self) -> Option<Self>

Performs euclid division that returns None instead of panicking on division by zero +and instead of wrapping around on underflow and overflow.

+
Source

fn checked_rem_euclid(&self, v: &Self) -> Option<Self>

Finds the euclid remainder of dividing two numbers, checking for underflow, overflow and +division by zero. If any of that happens, None is returned.

+

Provided Methods§

Source

fn checked_div_rem_euclid(&self, v: &Self) -> Option<(Self, Self)>

Returns both the quotient and remainder from checked Euclidean division.

+

By default, it internally calls both CheckedEuclid::checked_div_euclid and CheckedEuclid::checked_rem_euclid, +but it can be overridden in order to implement some optimization.

+
§Examples
+
let x = 5u8;
+let y = 3u8;
+
+let div = CheckedEuclid::checked_div_euclid(&x, &y);
+let rem = CheckedEuclid::checked_rem_euclid(&x, &y);
+
+assert_eq!(Some((div.unwrap(), rem.unwrap())), CheckedEuclid::checked_div_rem_euclid(&x, &y));
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl CheckedEuclid for i8

Source§

fn checked_div_euclid(&self, v: &i8) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &i8) -> Option<Self>

Source§

impl CheckedEuclid for i16

Source§

fn checked_div_euclid(&self, v: &i16) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &i16) -> Option<Self>

Source§

impl CheckedEuclid for i32

Source§

fn checked_div_euclid(&self, v: &i32) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &i32) -> Option<Self>

Source§

impl CheckedEuclid for i64

Source§

fn checked_div_euclid(&self, v: &i64) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &i64) -> Option<Self>

Source§

impl CheckedEuclid for i128

Source§

fn checked_div_euclid(&self, v: &i128) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &i128) -> Option<Self>

Source§

impl CheckedEuclid for isize

Source§

fn checked_div_euclid(&self, v: &isize) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &isize) -> Option<Self>

Source§

impl CheckedEuclid for u8

Source§

fn checked_div_euclid(&self, v: &u8) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &u8) -> Option<Self>

Source§

impl CheckedEuclid for u16

Source§

fn checked_div_euclid(&self, v: &u16) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &u16) -> Option<Self>

Source§

impl CheckedEuclid for u32

Source§

fn checked_div_euclid(&self, v: &u32) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &u32) -> Option<Self>

Source§

impl CheckedEuclid for u64

Source§

fn checked_div_euclid(&self, v: &u64) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &u64) -> Option<Self>

Source§

impl CheckedEuclid for u128

Source§

fn checked_div_euclid(&self, v: &u128) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &u128) -> Option<Self>

Source§

impl CheckedEuclid for usize

Source§

fn checked_div_euclid(&self, v: &usize) -> Option<Self>

Source§

fn checked_rem_euclid(&self, v: &usize) -> Option<Self>

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/euclid/trait.Euclid.html b/num_traits/ops/euclid/trait.Euclid.html new file mode 100644 index 0000000..1723241 --- /dev/null +++ b/num_traits/ops/euclid/trait.Euclid.html @@ -0,0 +1,54 @@ +Euclid in num_traits::ops::euclid - Rust
num_traits::ops::euclid

Trait Euclid

Source
pub trait Euclid:
+    Sized
+    + Div<Self, Output = Self>
+    + Rem<Self, Output = Self> {
+    // Required methods
+    fn div_euclid(&self, v: &Self) -> Self;
+    fn rem_euclid(&self, v: &Self) -> Self;
+
+    // Provided method
+    fn div_rem_euclid(&self, v: &Self) -> (Self, Self) { ... }
+}

Required Methods§

Source

fn div_euclid(&self, v: &Self) -> Self

Calculates Euclidean division, the matching method for rem_euclid.

+

This computes the integer n such that +self = n * v + self.rem_euclid(v). +In other words, the result is self / v rounded to the integer n +such that self >= n * v.

+
§Examples
+
use num_traits::Euclid;
+
+let a: i32 = 7;
+let b: i32 = 4;
+assert_eq!(Euclid::div_euclid(&a, &b), 1); // 7 > 4 * 1
+assert_eq!(Euclid::div_euclid(&-a, &b), -2); // -7 >= 4 * -2
+assert_eq!(Euclid::div_euclid(&a, &-b), -1); // 7 >= -4 * -1
+assert_eq!(Euclid::div_euclid(&-a, &-b), 2); // -7 >= -4 * 2
+
Source

fn rem_euclid(&self, v: &Self) -> Self

Calculates the least nonnegative remainder of self (mod v).

+

In particular, the return value r satisfies 0.0 <= r < v.abs() in +most cases. However, due to a floating point round-off error it can +result in r == v.abs(), violating the mathematical definition, if +self is much smaller than v.abs() in magnitude and self < 0.0. +This result is not an element of the function’s codomain, but it is the +closest floating point number in the real numbers and thus fulfills the +property self == self.div_euclid(v) * v + self.rem_euclid(v) +approximatively.

+
§Examples
+
use num_traits::Euclid;
+
+let a: i32 = 7;
+let b: i32 = 4;
+assert_eq!(Euclid::rem_euclid(&a, &b), 3);
+assert_eq!(Euclid::rem_euclid(&-a, &b), 1);
+assert_eq!(Euclid::rem_euclid(&a, &-b), 3);
+assert_eq!(Euclid::rem_euclid(&-a, &-b), 1);
+

Provided Methods§

Source

fn div_rem_euclid(&self, v: &Self) -> (Self, Self)

Returns both the quotient and remainder from Euclidean division.

+

By default, it internally calls both Euclid::div_euclid and Euclid::rem_euclid, +but it can be overridden in order to implement some optimization.

+
§Examples
+
let x = 5u8;
+let y = 3u8;
+
+let div = Euclid::div_euclid(&x, &y);
+let rem = Euclid::rem_euclid(&x, &y);
+
+assert_eq!((div, rem), Euclid::div_rem_euclid(&x, &y));
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Euclid for f32

Source§

fn div_euclid(&self, v: &f32) -> f32

Source§

fn rem_euclid(&self, v: &f32) -> f32

Source§

impl Euclid for f64

Source§

fn div_euclid(&self, v: &f64) -> f64

Source§

fn rem_euclid(&self, v: &f64) -> f64

Source§

impl Euclid for i8

Source§

fn div_euclid(&self, v: &i8) -> Self

Source§

fn rem_euclid(&self, v: &i8) -> Self

Source§

impl Euclid for i16

Source§

fn div_euclid(&self, v: &i16) -> Self

Source§

fn rem_euclid(&self, v: &i16) -> Self

Source§

impl Euclid for i32

Source§

fn div_euclid(&self, v: &i32) -> Self

Source§

fn rem_euclid(&self, v: &i32) -> Self

Source§

impl Euclid for i64

Source§

fn div_euclid(&self, v: &i64) -> Self

Source§

fn rem_euclid(&self, v: &i64) -> Self

Source§

impl Euclid for i128

Source§

fn div_euclid(&self, v: &i128) -> Self

Source§

fn rem_euclid(&self, v: &i128) -> Self

Source§

impl Euclid for isize

Source§

fn div_euclid(&self, v: &isize) -> Self

Source§

fn rem_euclid(&self, v: &isize) -> Self

Source§

impl Euclid for u8

Source§

fn div_euclid(&self, v: &u8) -> Self

Source§

fn rem_euclid(&self, v: &u8) -> Self

Source§

impl Euclid for u16

Source§

fn div_euclid(&self, v: &u16) -> Self

Source§

fn rem_euclid(&self, v: &u16) -> Self

Source§

impl Euclid for u32

Source§

fn div_euclid(&self, v: &u32) -> Self

Source§

fn rem_euclid(&self, v: &u32) -> Self

Source§

impl Euclid for u64

Source§

fn div_euclid(&self, v: &u64) -> Self

Source§

fn rem_euclid(&self, v: &u64) -> Self

Source§

impl Euclid for u128

Source§

fn div_euclid(&self, v: &u128) -> Self

Source§

fn rem_euclid(&self, v: &u128) -> Self

Source§

impl Euclid for usize

Source§

fn div_euclid(&self, v: &usize) -> Self

Source§

fn rem_euclid(&self, v: &usize) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/index.html b/num_traits/ops/index.html new file mode 100644 index 0000000..1f3c0cb --- /dev/null +++ b/num_traits/ops/index.html @@ -0,0 +1 @@ +num_traits::ops - Rust
num_traits

Module ops

Source

Modules§

\ No newline at end of file diff --git a/num_traits/ops/inv/index.html b/num_traits/ops/inv/index.html new file mode 100644 index 0000000..3980e93 --- /dev/null +++ b/num_traits/ops/inv/index.html @@ -0,0 +1 @@ +num_traits::ops::inv - Rust
num_traits::ops

Module inv

Source

Traits§

  • Unary operator for retrieving the multiplicative inverse, or reciprocal, of a value.
\ No newline at end of file diff --git a/num_traits/ops/inv/sidebar-items.js b/num_traits/ops/inv/sidebar-items.js new file mode 100644 index 0000000..499263e --- /dev/null +++ b/num_traits/ops/inv/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["Inv"]}; \ No newline at end of file diff --git a/num_traits/ops/inv/trait.Inv.html b/num_traits/ops/inv/trait.Inv.html new file mode 100644 index 0000000..5e38e29 --- /dev/null +++ b/num_traits/ops/inv/trait.Inv.html @@ -0,0 +1,15 @@ +Inv in num_traits::ops::inv - Rust
num_traits::ops::inv

Trait Inv

Source
pub trait Inv {
+    type Output;
+
+    // Required method
+    fn inv(self) -> Self::Output;
+}
Expand description

Unary operator for retrieving the multiplicative inverse, or reciprocal, of a value.

+

Required Associated Types§

Source

type Output

The result after applying the operator.

+

Required Methods§

Source

fn inv(self) -> Self::Output

Returns the multiplicative inverse of self.

+
§Examples
+
use std::f64::INFINITY;
+use num_traits::Inv;
+
+assert_eq!(7.0.inv() * 7.0, 1.0);
+assert_eq!((-0.0).inv(), -INFINITY);
+

Implementations on Foreign Types§

Source§

impl Inv for f32

Source§

type Output = f32

Source§

fn inv(self) -> f32

Source§

impl Inv for f64

Source§

type Output = f64

Source§

fn inv(self) -> f64

Source§

impl<'a> Inv for &'a f32

Source§

type Output = f32

Source§

fn inv(self) -> f32

Source§

impl<'a> Inv for &'a f64

Source§

type Output = f64

Source§

fn inv(self) -> f64

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/mul_add/index.html b/num_traits/ops/mul_add/index.html new file mode 100644 index 0000000..682e452 --- /dev/null +++ b/num_traits/ops/mul_add/index.html @@ -0,0 +1,2 @@ +num_traits::ops::mul_add - Rust
num_traits::ops

Module mul_add

Source

Traits§

  • Fused multiply-add. Computes (self * a) + b with only one rounding +error, yielding a more accurate result than an unfused multiply-add.
  • The fused multiply-add assignment operation *self = (*self * a) + b
\ No newline at end of file diff --git a/num_traits/ops/mul_add/sidebar-items.js b/num_traits/ops/mul_add/sidebar-items.js new file mode 100644 index 0000000..2ca7ba1 --- /dev/null +++ b/num_traits/ops/mul_add/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["MulAdd","MulAddAssign"]}; \ No newline at end of file diff --git a/num_traits/ops/mul_add/trait.MulAdd.html b/num_traits/ops/mul_add/trait.MulAdd.html new file mode 100644 index 0000000..372f9da --- /dev/null +++ b/num_traits/ops/mul_add/trait.MulAdd.html @@ -0,0 +1,24 @@ +MulAdd in num_traits::ops::mul_add - Rust
num_traits::ops::mul_add

Trait MulAdd

Source
pub trait MulAdd<A = Self, B = Self> {
+    type Output;
+
+    // Required method
+    fn mul_add(self, a: A, b: B) -> Self::Output;
+}
Expand description

Fused multiply-add. Computes (self * a) + b with only one rounding +error, yielding a more accurate result than an unfused multiply-add.

+

Using mul_add can be more performant than an unfused multiply-add if +the target architecture has a dedicated fma CPU instruction.

+

Note that A and B are Self by default, but this is not mandatory.

+

§Example

+
use std::f32;
+
+let m = 10.0_f32;
+let x = 4.0_f32;
+let b = 60.0_f32;
+
+// 100.0
+let abs_difference = (m.mul_add(x, b) - (m*x + b)).abs();
+
+assert!(abs_difference <= 100.0 * f32::EPSILON);
+

Required Associated Types§

Source

type Output

The resulting type after applying the fused multiply-add.

+

Required Methods§

Source

fn mul_add(self, a: A, b: B) -> Self::Output

Performs the fused multiply-add operation (self * a) + b

+

Implementations on Foreign Types§

Source§

impl MulAdd for i8

Source§

type Output = i8

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for i16

Source§

type Output = i16

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for i32

Source§

type Output = i32

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for i64

Source§

type Output = i64

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for i128

Source§

type Output = i128

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for isize

Source§

type Output = isize

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for u8

Source§

type Output = u8

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for u16

Source§

type Output = u16

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for u32

Source§

type Output = u32

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for u64

Source§

type Output = u64

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for u128

Source§

type Output = u128

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Source§

impl MulAdd for usize

Source§

type Output = usize

Source§

fn mul_add(self, a: Self, b: Self) -> Self::Output

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/mul_add/trait.MulAddAssign.html b/num_traits/ops/mul_add/trait.MulAddAssign.html new file mode 100644 index 0000000..038dba4 --- /dev/null +++ b/num_traits/ops/mul_add/trait.MulAddAssign.html @@ -0,0 +1,6 @@ +MulAddAssign in num_traits::ops::mul_add - Rust
num_traits::ops::mul_add

Trait MulAddAssign

Source
pub trait MulAddAssign<A = Self, B = Self> {
+    // Required method
+    fn mul_add_assign(&mut self, a: A, b: B);
+}
Expand description

The fused multiply-add assignment operation *self = (*self * a) + b

+

Required Methods§

Source

fn mul_add_assign(&mut self, a: A, b: B)

Performs the fused multiply-add assignment operation *self = (*self * a) + b

+

Implementations on Foreign Types§

Source§

impl MulAddAssign for i8

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for i16

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for i32

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for i64

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for i128

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for isize

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for u8

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for u16

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for u32

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for u64

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for u128

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Source§

impl MulAddAssign for usize

Source§

fn mul_add_assign(&mut self, a: Self, b: Self)

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/overflowing/index.html b/num_traits/ops/overflowing/index.html new file mode 100644 index 0000000..879b048 --- /dev/null +++ b/num_traits/ops/overflowing/index.html @@ -0,0 +1 @@ +num_traits::ops::overflowing - Rust
num_traits::ops

Module overflowing

Source

Traits§

\ No newline at end of file diff --git a/num_traits/ops/overflowing/sidebar-items.js b/num_traits/ops/overflowing/sidebar-items.js new file mode 100644 index 0000000..cea3841 --- /dev/null +++ b/num_traits/ops/overflowing/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["OverflowingAdd","OverflowingMul","OverflowingSub"]}; \ No newline at end of file diff --git a/num_traits/ops/overflowing/trait.OverflowingAdd.html b/num_traits/ops/overflowing/trait.OverflowingAdd.html new file mode 100644 index 0000000..4534977 --- /dev/null +++ b/num_traits/ops/overflowing/trait.OverflowingAdd.html @@ -0,0 +1,7 @@ +OverflowingAdd in num_traits::ops::overflowing - Rust
num_traits::ops::overflowing

Trait OverflowingAdd

Source
pub trait OverflowingAdd: Sized + Add<Self, Output = Self> {
+    // Required method
+    fn overflowing_add(&self, v: &Self) -> (Self, bool);
+}
Expand description

Performs addition with a flag for overflow.

+

Required Methods§

Source

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Returns a tuple of the sum along with a boolean indicating whether an arithmetic overflow would occur. +If an overflow would have occurred then the wrapped value is returned.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl OverflowingAdd for i8

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for i16

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for i32

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for i64

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for i128

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for isize

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for u8

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for u16

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for u32

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for u64

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for u128

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingAdd for usize

Source§

fn overflowing_add(&self, v: &Self) -> (Self, bool)

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/overflowing/trait.OverflowingMul.html b/num_traits/ops/overflowing/trait.OverflowingMul.html new file mode 100644 index 0000000..b90aed3 --- /dev/null +++ b/num_traits/ops/overflowing/trait.OverflowingMul.html @@ -0,0 +1,7 @@ +OverflowingMul in num_traits::ops::overflowing - Rust
num_traits::ops::overflowing

Trait OverflowingMul

Source
pub trait OverflowingMul: Sized + Mul<Self, Output = Self> {
+    // Required method
+    fn overflowing_mul(&self, v: &Self) -> (Self, bool);
+}
Expand description

Performs multiplication with a flag for overflow.

+

Required Methods§

Source

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Returns a tuple of the product along with a boolean indicating whether an arithmetic overflow would occur. +If an overflow would have occurred then the wrapped value is returned.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl OverflowingMul for i8

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for i16

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for i32

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for i64

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for i128

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for isize

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for u8

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for u16

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for u32

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for u64

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for u128

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingMul for usize

Source§

fn overflowing_mul(&self, v: &Self) -> (Self, bool)

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/overflowing/trait.OverflowingSub.html b/num_traits/ops/overflowing/trait.OverflowingSub.html new file mode 100644 index 0000000..d43675d --- /dev/null +++ b/num_traits/ops/overflowing/trait.OverflowingSub.html @@ -0,0 +1,7 @@ +OverflowingSub in num_traits::ops::overflowing - Rust
num_traits::ops::overflowing

Trait OverflowingSub

Source
pub trait OverflowingSub: Sized + Sub<Self, Output = Self> {
+    // Required method
+    fn overflowing_sub(&self, v: &Self) -> (Self, bool);
+}
Expand description

Performs substraction with a flag for overflow.

+

Required Methods§

Source

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Returns a tuple of the difference along with a boolean indicating whether an arithmetic overflow would occur. +If an overflow would have occurred then the wrapped value is returned.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl OverflowingSub for i8

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for i16

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for i32

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for i64

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for i128

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for isize

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for u8

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for u16

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for u32

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for u64

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for u128

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Source§

impl OverflowingSub for usize

Source§

fn overflowing_sub(&self, v: &Self) -> (Self, bool)

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/saturating/index.html b/num_traits/ops/saturating/index.html new file mode 100644 index 0000000..2444c8d --- /dev/null +++ b/num_traits/ops/saturating/index.html @@ -0,0 +1,2 @@ +num_traits::ops::saturating - Rust
num_traits::ops

Module saturating

Source

Traits§

  • Saturating math operations. Deprecated, use SaturatingAdd, SaturatingSub and +SaturatingMul instead.
  • Performs addition that saturates at the numeric bounds instead of overflowing.
  • Performs multiplication that saturates at the numeric bounds instead of overflowing.
  • Performs subtraction that saturates at the numeric bounds instead of overflowing.
\ No newline at end of file diff --git a/num_traits/ops/saturating/sidebar-items.js b/num_traits/ops/saturating/sidebar-items.js new file mode 100644 index 0000000..4f901f2 --- /dev/null +++ b/num_traits/ops/saturating/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["Saturating","SaturatingAdd","SaturatingMul","SaturatingSub"]}; \ No newline at end of file diff --git a/num_traits/ops/saturating/trait.Saturating.html b/num_traits/ops/saturating/trait.Saturating.html new file mode 100644 index 0000000..54395e4 --- /dev/null +++ b/num_traits/ops/saturating/trait.Saturating.html @@ -0,0 +1,11 @@ +Saturating in num_traits::ops::saturating - Rust
num_traits::ops::saturating

Trait Saturating

Source
pub trait Saturating {
+    // Required methods
+    fn saturating_add(self, v: Self) -> Self;
+    fn saturating_sub(self, v: Self) -> Self;
+}
Expand description

Saturating math operations. Deprecated, use SaturatingAdd, SaturatingSub and +SaturatingMul instead.

+

Required Methods§

Source

fn saturating_add(self, v: Self) -> Self

Saturating addition operator. +Returns a+b, saturating at the numeric bounds instead of overflowing.

+
Source

fn saturating_sub(self, v: Self) -> Self

Saturating subtraction operator. +Returns a-b, saturating at the numeric bounds instead of overflowing.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Saturating for i8

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for i16

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for i32

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for i64

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for i128

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for isize

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for u8

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for u16

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for u32

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for u64

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for u128

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Source§

impl Saturating for usize

Source§

fn saturating_add(self, v: Self) -> Self

Source§

fn saturating_sub(self, v: Self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/saturating/trait.SaturatingAdd.html b/num_traits/ops/saturating/trait.SaturatingAdd.html new file mode 100644 index 0000000..d5ac697 --- /dev/null +++ b/num_traits/ops/saturating/trait.SaturatingAdd.html @@ -0,0 +1,7 @@ +SaturatingAdd in num_traits::ops::saturating - Rust
num_traits::ops::saturating

Trait SaturatingAdd

Source
pub trait SaturatingAdd: Sized + Add<Self, Output = Self> {
+    // Required method
+    fn saturating_add(&self, v: &Self) -> Self;
+}
Expand description

Performs addition that saturates at the numeric bounds instead of overflowing.

+

Required Methods§

Source

fn saturating_add(&self, v: &Self) -> Self

Saturating addition. Computes self + other, saturating at the relevant high or low boundary of +the type.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl SaturatingAdd for i8

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for i16

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for i32

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for i64

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for i128

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for isize

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for u8

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for u16

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for u32

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for u64

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for u128

Source§

fn saturating_add(&self, v: &Self) -> Self

Source§

impl SaturatingAdd for usize

Source§

fn saturating_add(&self, v: &Self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/saturating/trait.SaturatingMul.html b/num_traits/ops/saturating/trait.SaturatingMul.html new file mode 100644 index 0000000..cc4ef92 --- /dev/null +++ b/num_traits/ops/saturating/trait.SaturatingMul.html @@ -0,0 +1,7 @@ +SaturatingMul in num_traits::ops::saturating - Rust
num_traits::ops::saturating

Trait SaturatingMul

Source
pub trait SaturatingMul: Sized + Mul<Self, Output = Self> {
+    // Required method
+    fn saturating_mul(&self, v: &Self) -> Self;
+}
Expand description

Performs multiplication that saturates at the numeric bounds instead of overflowing.

+

Required Methods§

Source

fn saturating_mul(&self, v: &Self) -> Self

Saturating multiplication. Computes self * other, saturating at the relevant high or low boundary of +the type.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl SaturatingMul for i8

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for i16

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for i32

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for i64

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for i128

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for isize

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for u8

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for u16

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for u32

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for u64

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for u128

Source§

fn saturating_mul(&self, v: &Self) -> Self

Source§

impl SaturatingMul for usize

Source§

fn saturating_mul(&self, v: &Self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/saturating/trait.SaturatingSub.html b/num_traits/ops/saturating/trait.SaturatingSub.html new file mode 100644 index 0000000..e23a77b --- /dev/null +++ b/num_traits/ops/saturating/trait.SaturatingSub.html @@ -0,0 +1,7 @@ +SaturatingSub in num_traits::ops::saturating - Rust
num_traits::ops::saturating

Trait SaturatingSub

Source
pub trait SaturatingSub: Sized + Sub<Self, Output = Self> {
+    // Required method
+    fn saturating_sub(&self, v: &Self) -> Self;
+}
Expand description

Performs subtraction that saturates at the numeric bounds instead of overflowing.

+

Required Methods§

Source

fn saturating_sub(&self, v: &Self) -> Self

Saturating subtraction. Computes self - other, saturating at the relevant high or low boundary of +the type.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl SaturatingSub for i8

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for i16

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for i32

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for i64

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for i128

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for isize

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for u8

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for u16

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for u32

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for u64

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for u128

Source§

fn saturating_sub(&self, v: &Self) -> Self

Source§

impl SaturatingSub for usize

Source§

fn saturating_sub(&self, v: &Self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/sidebar-items.js b/num_traits/ops/sidebar-items.js new file mode 100644 index 0000000..082c037 --- /dev/null +++ b/num_traits/ops/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"mod":["bytes","checked","euclid","inv","mul_add","overflowing","saturating","wrapping"]}; \ No newline at end of file diff --git a/num_traits/ops/wrapping/index.html b/num_traits/ops/wrapping/index.html new file mode 100644 index 0000000..2f97106 --- /dev/null +++ b/num_traits/ops/wrapping/index.html @@ -0,0 +1 @@ +num_traits::ops::wrapping - Rust
num_traits::ops

Module wrapping

Source

Traits§

  • Performs addition that wraps around on overflow.
  • Performs multiplication that wraps around on overflow.
  • Performs a negation that does not panic.
  • Performs a left shift that does not panic.
  • Performs a right shift that does not panic.
  • Performs subtraction that wraps around on overflow.
\ No newline at end of file diff --git a/num_traits/ops/wrapping/sidebar-items.js b/num_traits/ops/wrapping/sidebar-items.js new file mode 100644 index 0000000..69aa67f --- /dev/null +++ b/num_traits/ops/wrapping/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"trait":["WrappingAdd","WrappingMul","WrappingNeg","WrappingShl","WrappingShr","WrappingSub"]}; \ No newline at end of file diff --git a/num_traits/ops/wrapping/trait.WrappingAdd.html b/num_traits/ops/wrapping/trait.WrappingAdd.html new file mode 100644 index 0000000..76562d2 --- /dev/null +++ b/num_traits/ops/wrapping/trait.WrappingAdd.html @@ -0,0 +1,8 @@ +WrappingAdd in num_traits::ops::wrapping - Rust
num_traits::ops::wrapping

Trait WrappingAdd

Source
pub trait WrappingAdd: Sized + Add<Self, Output = Self> {
+    // Required method
+    fn wrapping_add(&self, v: &Self) -> Self;
+}
Expand description

Performs addition that wraps around on overflow.

+

Required Methods§

Source

fn wrapping_add(&self, v: &Self) -> Self

Wrapping (modular) addition. Computes self + other, wrapping around at the boundary of +the type.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl WrappingAdd for i8

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for i16

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for i32

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for i64

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for i128

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for isize

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for u8

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for u16

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for u32

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for u64

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for u128

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl WrappingAdd for usize

Source§

fn wrapping_add(&self, v: &Self) -> Self

Source§

impl<T: WrappingAdd> WrappingAdd for Wrapping<T>
where + Wrapping<T>: Add<Output = Wrapping<T>>,

Source§

fn wrapping_add(&self, v: &Self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/wrapping/trait.WrappingMul.html b/num_traits/ops/wrapping/trait.WrappingMul.html new file mode 100644 index 0000000..3b40df9 --- /dev/null +++ b/num_traits/ops/wrapping/trait.WrappingMul.html @@ -0,0 +1,8 @@ +WrappingMul in num_traits::ops::wrapping - Rust
num_traits::ops::wrapping

Trait WrappingMul

Source
pub trait WrappingMul: Sized + Mul<Self, Output = Self> {
+    // Required method
+    fn wrapping_mul(&self, v: &Self) -> Self;
+}
Expand description

Performs multiplication that wraps around on overflow.

+

Required Methods§

Source

fn wrapping_mul(&self, v: &Self) -> Self

Wrapping (modular) multiplication. Computes self * other, wrapping around at the boundary +of the type.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl WrappingMul for i8

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for i16

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for i32

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for i64

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for i128

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for isize

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for u8

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for u16

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for u32

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for u64

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for u128

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl WrappingMul for usize

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Source§

impl<T: WrappingMul> WrappingMul for Wrapping<T>
where + Wrapping<T>: Mul<Output = Wrapping<T>>,

Source§

fn wrapping_mul(&self, v: &Self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/wrapping/trait.WrappingNeg.html b/num_traits/ops/wrapping/trait.WrappingNeg.html new file mode 100644 index 0000000..9ec1176 --- /dev/null +++ b/num_traits/ops/wrapping/trait.WrappingNeg.html @@ -0,0 +1,20 @@ +WrappingNeg in num_traits::ops::wrapping - Rust
num_traits::ops::wrapping

Trait WrappingNeg

Source
pub trait WrappingNeg: Sized {
+    // Required method
+    fn wrapping_neg(&self) -> Self;
+}
Expand description

Performs a negation that does not panic.

+

Required Methods§

Source

fn wrapping_neg(&self) -> Self

Wrapping (modular) negation. Computes -self, +wrapping around at the boundary of the type.

+

Since unsigned types do not have negative equivalents +all applications of this function will wrap (except for -0). +For values smaller than the corresponding signed type’s maximum +the result is the same as casting the corresponding signed value. +Any larger values are equivalent to MAX + 1 - (val - MAX - 1) where +MAX is the corresponding signed type’s maximum.

+ +
use num_traits::WrappingNeg;
+
+assert_eq!(100i8.wrapping_neg(), -100);
+assert_eq!((-100i8).wrapping_neg(), 100);
+assert_eq!((-128i8).wrapping_neg(), -128); // wrapped!
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl WrappingNeg for i8

Source§

impl WrappingNeg for i16

Source§

impl WrappingNeg for i32

Source§

impl WrappingNeg for i64

Source§

impl WrappingNeg for i128

Source§

impl WrappingNeg for isize

Source§

impl WrappingNeg for u8

Source§

impl WrappingNeg for u16

Source§

impl WrappingNeg for u32

Source§

impl WrappingNeg for u64

Source§

impl WrappingNeg for u128

Source§

impl WrappingNeg for usize

Source§

impl<T: WrappingNeg> WrappingNeg for Wrapping<T>
where + Wrapping<T>: Neg<Output = Wrapping<T>>,

Source§

fn wrapping_neg(&self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/wrapping/trait.WrappingShl.html b/num_traits/ops/wrapping/trait.WrappingShl.html new file mode 100644 index 0000000..9dca683 --- /dev/null +++ b/num_traits/ops/wrapping/trait.WrappingShl.html @@ -0,0 +1,18 @@ +WrappingShl in num_traits::ops::wrapping - Rust
num_traits::ops::wrapping

Trait WrappingShl

Source
pub trait WrappingShl: Sized + Shl<usize, Output = Self> {
+    // Required method
+    fn wrapping_shl(&self, rhs: u32) -> Self;
+}
Expand description

Performs a left shift that does not panic.

+

Required Methods§

Source

fn wrapping_shl(&self, rhs: u32) -> Self

Panic-free bitwise shift-left; yields self << mask(rhs), +where mask removes any high order bits of rhs that would +cause the shift to exceed the bitwidth of the type.

+ +
use num_traits::WrappingShl;
+
+let x: u16 = 0x0001;
+
+assert_eq!(WrappingShl::wrapping_shl(&x, 0),  0x0001);
+assert_eq!(WrappingShl::wrapping_shl(&x, 1),  0x0002);
+assert_eq!(WrappingShl::wrapping_shl(&x, 15), 0x8000);
+assert_eq!(WrappingShl::wrapping_shl(&x, 16), 0x0001);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl WrappingShl for i8

Source§

fn wrapping_shl(&self, rhs: u32) -> i8

Source§

impl WrappingShl for i16

Source§

fn wrapping_shl(&self, rhs: u32) -> i16

Source§

impl WrappingShl for i32

Source§

fn wrapping_shl(&self, rhs: u32) -> i32

Source§

impl WrappingShl for i64

Source§

fn wrapping_shl(&self, rhs: u32) -> i64

Source§

impl WrappingShl for i128

Source§

fn wrapping_shl(&self, rhs: u32) -> i128

Source§

impl WrappingShl for isize

Source§

fn wrapping_shl(&self, rhs: u32) -> isize

Source§

impl WrappingShl for u8

Source§

fn wrapping_shl(&self, rhs: u32) -> u8

Source§

impl WrappingShl for u16

Source§

fn wrapping_shl(&self, rhs: u32) -> u16

Source§

impl WrappingShl for u32

Source§

fn wrapping_shl(&self, rhs: u32) -> u32

Source§

impl WrappingShl for u64

Source§

fn wrapping_shl(&self, rhs: u32) -> u64

Source§

impl WrappingShl for u128

Source§

fn wrapping_shl(&self, rhs: u32) -> u128

Source§

impl WrappingShl for usize

Source§

fn wrapping_shl(&self, rhs: u32) -> usize

Source§

impl<T: WrappingShl> WrappingShl for Wrapping<T>
where + Wrapping<T>: Shl<usize, Output = Wrapping<T>>,

Source§

fn wrapping_shl(&self, rhs: u32) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/wrapping/trait.WrappingShr.html b/num_traits/ops/wrapping/trait.WrappingShr.html new file mode 100644 index 0000000..8eeef19 --- /dev/null +++ b/num_traits/ops/wrapping/trait.WrappingShr.html @@ -0,0 +1,18 @@ +WrappingShr in num_traits::ops::wrapping - Rust
num_traits::ops::wrapping

Trait WrappingShr

Source
pub trait WrappingShr: Sized + Shr<usize, Output = Self> {
+    // Required method
+    fn wrapping_shr(&self, rhs: u32) -> Self;
+}
Expand description

Performs a right shift that does not panic.

+

Required Methods§

Source

fn wrapping_shr(&self, rhs: u32) -> Self

Panic-free bitwise shift-right; yields self >> mask(rhs), +where mask removes any high order bits of rhs that would +cause the shift to exceed the bitwidth of the type.

+ +
use num_traits::WrappingShr;
+
+let x: u16 = 0x8000;
+
+assert_eq!(WrappingShr::wrapping_shr(&x, 0),  0x8000);
+assert_eq!(WrappingShr::wrapping_shr(&x, 1),  0x4000);
+assert_eq!(WrappingShr::wrapping_shr(&x, 15), 0x0001);
+assert_eq!(WrappingShr::wrapping_shr(&x, 16), 0x8000);
+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl WrappingShr for i8

Source§

fn wrapping_shr(&self, rhs: u32) -> i8

Source§

impl WrappingShr for i16

Source§

fn wrapping_shr(&self, rhs: u32) -> i16

Source§

impl WrappingShr for i32

Source§

fn wrapping_shr(&self, rhs: u32) -> i32

Source§

impl WrappingShr for i64

Source§

fn wrapping_shr(&self, rhs: u32) -> i64

Source§

impl WrappingShr for i128

Source§

fn wrapping_shr(&self, rhs: u32) -> i128

Source§

impl WrappingShr for isize

Source§

fn wrapping_shr(&self, rhs: u32) -> isize

Source§

impl WrappingShr for u8

Source§

fn wrapping_shr(&self, rhs: u32) -> u8

Source§

impl WrappingShr for u16

Source§

fn wrapping_shr(&self, rhs: u32) -> u16

Source§

impl WrappingShr for u32

Source§

fn wrapping_shr(&self, rhs: u32) -> u32

Source§

impl WrappingShr for u64

Source§

fn wrapping_shr(&self, rhs: u32) -> u64

Source§

impl WrappingShr for u128

Source§

fn wrapping_shr(&self, rhs: u32) -> u128

Source§

impl WrappingShr for usize

Source§

fn wrapping_shr(&self, rhs: u32) -> usize

Source§

impl<T: WrappingShr> WrappingShr for Wrapping<T>
where + Wrapping<T>: Shr<usize, Output = Wrapping<T>>,

Source§

fn wrapping_shr(&self, rhs: u32) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/ops/wrapping/trait.WrappingSub.html b/num_traits/ops/wrapping/trait.WrappingSub.html new file mode 100644 index 0000000..d024f9d --- /dev/null +++ b/num_traits/ops/wrapping/trait.WrappingSub.html @@ -0,0 +1,8 @@ +WrappingSub in num_traits::ops::wrapping - Rust
num_traits::ops::wrapping

Trait WrappingSub

Source
pub trait WrappingSub: Sized + Sub<Self, Output = Self> {
+    // Required method
+    fn wrapping_sub(&self, v: &Self) -> Self;
+}
Expand description

Performs subtraction that wraps around on overflow.

+

Required Methods§

Source

fn wrapping_sub(&self, v: &Self) -> Self

Wrapping (modular) subtraction. Computes self - other, wrapping around at the boundary +of the type.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl WrappingSub for i8

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for i16

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for i32

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for i64

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for i128

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for isize

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for u8

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for u16

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for u32

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for u64

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for u128

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl WrappingSub for usize

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Source§

impl<T: WrappingSub> WrappingSub for Wrapping<T>
where + Wrapping<T>: Sub<Output = Wrapping<T>>,

Source§

fn wrapping_sub(&self, v: &Self) -> Self

Implementors§

\ No newline at end of file diff --git a/num_traits/pow/fn.checked_pow.html b/num_traits/pow/fn.checked_pow.html new file mode 100644 index 0000000..c6f4bfe --- /dev/null +++ b/num_traits/pow/fn.checked_pow.html @@ -0,0 +1,14 @@ +checked_pow in num_traits::pow - Rust
num_traits::pow

Function checked_pow

Source
pub fn checked_pow<T: Clone + One + CheckedMul>(
+    base: T,
+    exp: usize,
+) -> Option<T>
Expand description

Raises a value to the power of exp, returning None if an overflow occurred.

+

Note that 0⁰ (checked_pow(0, 0)) returns Some(1). Mathematically this is undefined.

+

Otherwise same as the pow function.

+

§Example

+
use num_traits::checked_pow;
+
+assert_eq!(checked_pow(2i8, 4), Some(16));
+assert_eq!(checked_pow(7i8, 8), None);
+assert_eq!(checked_pow(7u32, 8), Some(5_764_801));
+assert_eq!(checked_pow(0u32, 0), Some(1)); // Be aware if this case affect you
+
\ No newline at end of file diff --git a/num_traits/pow/fn.pow.html b/num_traits/pow/fn.pow.html new file mode 100644 index 0000000..a5aecb7 --- /dev/null +++ b/num_traits/pow/fn.pow.html @@ -0,0 +1,9 @@ +pow in num_traits::pow - Rust
num_traits::pow

Function pow

Source
pub fn pow<T: Clone + One + Mul<T, Output = T>>(base: T, exp: usize) -> T
Expand description

Raises a value to the power of exp, using exponentiation by squaring.

+

Note that 0⁰ (pow(0, 0)) returns 1. Mathematically this is undefined.

+

§Example

+
use num_traits::pow;
+
+assert_eq!(pow(2i8, 4), 16);
+assert_eq!(pow(6u8, 3), 216);
+assert_eq!(pow(0u8, 0), 1); // Be aware if this case affects you
+
\ No newline at end of file diff --git a/num_traits/pow/index.html b/num_traits/pow/index.html new file mode 100644 index 0000000..bd87172 --- /dev/null +++ b/num_traits/pow/index.html @@ -0,0 +1 @@ +num_traits::pow - Rust
num_traits

Module pow

Source

Traits§

  • Binary operator for raising a value to a power.

Functions§

  • Raises a value to the power of exp, returning None if an overflow occurred.
  • Raises a value to the power of exp, using exponentiation by squaring.
\ No newline at end of file diff --git a/num_traits/pow/sidebar-items.js b/num_traits/pow/sidebar-items.js new file mode 100644 index 0000000..19d6c13 --- /dev/null +++ b/num_traits/pow/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["checked_pow","pow"],"trait":["Pow"]}; \ No newline at end of file diff --git a/num_traits/pow/trait.Pow.html b/num_traits/pow/trait.Pow.html new file mode 100644 index 0000000..b588af2 --- /dev/null +++ b/num_traits/pow/trait.Pow.html @@ -0,0 +1,12 @@ +Pow in num_traits::pow - Rust
num_traits::pow

Trait Pow

Source
pub trait Pow<RHS> {
+    type Output;
+
+    // Required method
+    fn pow(self, rhs: RHS) -> Self::Output;
+}
Expand description

Binary operator for raising a value to a power.

+

Required Associated Types§

Source

type Output

The result after applying the operator.

+

Required Methods§

Source

fn pow(self, rhs: RHS) -> Self::Output

Returns self to the power rhs.

+
§Examples
+
use num_traits::Pow;
+assert_eq!(Pow::pow(10u32, 2u32), 100);
+

Implementations on Foreign Types§

Source§

impl Pow<u8> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: u8) -> i8

Source§

impl Pow<u8> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: u8) -> i16

Source§

impl Pow<u8> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: u8) -> i32

Source§

impl Pow<u8> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: u8) -> i64

Source§

impl Pow<u8> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: u8) -> i128

Source§

impl Pow<u8> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: u8) -> isize

Source§

impl Pow<u8> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: u8) -> u8

Source§

impl Pow<u8> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: u8) -> u16

Source§

impl Pow<u8> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: u8) -> u32

Source§

impl Pow<u8> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: u8) -> u64

Source§

impl Pow<u8> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: u8) -> u128

Source§

impl Pow<u8> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: u8) -> usize

Source§

impl Pow<u8> for Wrapping<i8>

Source§

type Output = Wrapping<i8>

Source§

fn pow(self, rhs: u8) -> Wrapping<i8>

Source§

impl Pow<u8> for Wrapping<i16>

Source§

impl Pow<u8> for Wrapping<i32>

Source§

impl Pow<u8> for Wrapping<i64>

Source§

impl Pow<u8> for Wrapping<i128>

Source§

impl Pow<u8> for Wrapping<isize>

Source§

impl Pow<u8> for Wrapping<u8>

Source§

type Output = Wrapping<u8>

Source§

fn pow(self, rhs: u8) -> Wrapping<u8>

Source§

impl Pow<u8> for Wrapping<u16>

Source§

impl Pow<u8> for Wrapping<u32>

Source§

impl Pow<u8> for Wrapping<u64>

Source§

impl Pow<u8> for Wrapping<u128>

Source§

impl Pow<u8> for Wrapping<usize>

Source§

impl Pow<u16> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: u16) -> i8

Source§

impl Pow<u16> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: u16) -> i16

Source§

impl Pow<u16> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: u16) -> i32

Source§

impl Pow<u16> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: u16) -> i64

Source§

impl Pow<u16> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: u16) -> i128

Source§

impl Pow<u16> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: u16) -> isize

Source§

impl Pow<u16> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: u16) -> u8

Source§

impl Pow<u16> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: u16) -> u16

Source§

impl Pow<u16> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: u16) -> u32

Source§

impl Pow<u16> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: u16) -> u64

Source§

impl Pow<u16> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: u16) -> u128

Source§

impl Pow<u16> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: u16) -> usize

Source§

impl Pow<u32> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: u32) -> i8

Source§

impl Pow<u32> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: u32) -> i16

Source§

impl Pow<u32> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: u32) -> i32

Source§

impl Pow<u32> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: u32) -> i64

Source§

impl Pow<u32> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: u32) -> i128

Source§

impl Pow<u32> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: u32) -> isize

Source§

impl Pow<u32> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: u32) -> u8

Source§

impl Pow<u32> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: u32) -> u16

Source§

impl Pow<u32> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: u32) -> u32

Source§

impl Pow<u32> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: u32) -> u64

Source§

impl Pow<u32> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: u32) -> u128

Source§

impl Pow<u32> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: u32) -> usize

Source§

impl Pow<usize> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: usize) -> i8

Source§

impl Pow<usize> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: usize) -> i16

Source§

impl Pow<usize> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: usize) -> i32

Source§

impl Pow<usize> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: usize) -> i64

Source§

impl Pow<usize> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: usize) -> i128

Source§

impl Pow<usize> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: usize) -> isize

Source§

impl Pow<usize> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: usize) -> u8

Source§

impl Pow<usize> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: usize) -> u16

Source§

impl Pow<usize> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: usize) -> u32

Source§

impl Pow<usize> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: usize) -> u64

Source§

impl Pow<usize> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: usize) -> u128

Source§

impl Pow<usize> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: usize) -> usize

Source§

impl Pow<usize> for Wrapping<i8>

Source§

impl Pow<usize> for Wrapping<i16>

Source§

impl Pow<usize> for Wrapping<i32>

Source§

impl Pow<usize> for Wrapping<i64>

Source§

impl Pow<usize> for Wrapping<i128>

Source§

impl Pow<usize> for Wrapping<isize>

Source§

impl Pow<usize> for Wrapping<u8>

Source§

impl Pow<usize> for Wrapping<u16>

Source§

impl Pow<usize> for Wrapping<u32>

Source§

impl Pow<usize> for Wrapping<u64>

Source§

impl Pow<usize> for Wrapping<u128>

Source§

impl Pow<usize> for Wrapping<usize>

Source§

impl<'a> Pow<&'a u8> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a u8) -> i8

Source§

impl<'a> Pow<&'a u8> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a u8) -> i16

Source§

impl<'a> Pow<&'a u8> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a u8) -> i32

Source§

impl<'a> Pow<&'a u8> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a u8) -> i64

Source§

impl<'a> Pow<&'a u8> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a u8) -> i128

Source§

impl<'a> Pow<&'a u8> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a u8) -> isize

Source§

impl<'a> Pow<&'a u8> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a u8) -> u8

Source§

impl<'a> Pow<&'a u8> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a u8) -> u16

Source§

impl<'a> Pow<&'a u8> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a u8) -> u32

Source§

impl<'a> Pow<&'a u8> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a u8) -> u64

Source§

impl<'a> Pow<&'a u8> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a u8) -> u128

Source§

impl<'a> Pow<&'a u8> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a u8) -> usize

Source§

impl<'a> Pow<&'a u8> for Wrapping<i8>

Source§

type Output = Wrapping<i8>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i8>

Source§

impl<'a> Pow<&'a u8> for Wrapping<i16>

Source§

type Output = Wrapping<i16>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i16>

Source§

impl<'a> Pow<&'a u8> for Wrapping<i32>

Source§

type Output = Wrapping<i32>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i32>

Source§

impl<'a> Pow<&'a u8> for Wrapping<i64>

Source§

type Output = Wrapping<i64>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i64>

Source§

impl<'a> Pow<&'a u8> for Wrapping<i128>

Source§

type Output = Wrapping<i128>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i128>

Source§

impl<'a> Pow<&'a u8> for Wrapping<isize>

Source§

type Output = Wrapping<isize>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<isize>

Source§

impl<'a> Pow<&'a u8> for Wrapping<u8>

Source§

type Output = Wrapping<u8>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u8>

Source§

impl<'a> Pow<&'a u8> for Wrapping<u16>

Source§

type Output = Wrapping<u16>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u16>

Source§

impl<'a> Pow<&'a u8> for Wrapping<u32>

Source§

type Output = Wrapping<u32>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u32>

Source§

impl<'a> Pow<&'a u8> for Wrapping<u64>

Source§

type Output = Wrapping<u64>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u64>

Source§

impl<'a> Pow<&'a u8> for Wrapping<u128>

Source§

type Output = Wrapping<u128>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u128>

Source§

impl<'a> Pow<&'a u8> for Wrapping<usize>

Source§

type Output = Wrapping<usize>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<usize>

Source§

impl<'a> Pow<&'a u16> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a u16) -> i8

Source§

impl<'a> Pow<&'a u16> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a u16) -> i16

Source§

impl<'a> Pow<&'a u16> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a u16) -> i32

Source§

impl<'a> Pow<&'a u16> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a u16) -> i64

Source§

impl<'a> Pow<&'a u16> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a u16) -> i128

Source§

impl<'a> Pow<&'a u16> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a u16) -> isize

Source§

impl<'a> Pow<&'a u16> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a u16) -> u8

Source§

impl<'a> Pow<&'a u16> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a u16) -> u16

Source§

impl<'a> Pow<&'a u16> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a u16) -> u32

Source§

impl<'a> Pow<&'a u16> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a u16) -> u64

Source§

impl<'a> Pow<&'a u16> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a u16) -> u128

Source§

impl<'a> Pow<&'a u16> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a u16) -> usize

Source§

impl<'a> Pow<&'a u32> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a u32) -> i8

Source§

impl<'a> Pow<&'a u32> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a u32) -> i16

Source§

impl<'a> Pow<&'a u32> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a u32) -> i32

Source§

impl<'a> Pow<&'a u32> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a u32) -> i64

Source§

impl<'a> Pow<&'a u32> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a u32) -> i128

Source§

impl<'a> Pow<&'a u32> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a u32) -> isize

Source§

impl<'a> Pow<&'a u32> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a u32) -> u8

Source§

impl<'a> Pow<&'a u32> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a u32) -> u16

Source§

impl<'a> Pow<&'a u32> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a u32) -> u32

Source§

impl<'a> Pow<&'a u32> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a u32) -> u64

Source§

impl<'a> Pow<&'a u32> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a u32) -> u128

Source§

impl<'a> Pow<&'a u32> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a u32) -> usize

Source§

impl<'a> Pow<&'a usize> for i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a usize) -> i8

Source§

impl<'a> Pow<&'a usize> for i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a usize) -> i16

Source§

impl<'a> Pow<&'a usize> for i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a usize) -> i32

Source§

impl<'a> Pow<&'a usize> for i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a usize) -> i64

Source§

impl<'a> Pow<&'a usize> for i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a usize) -> i128

Source§

impl<'a> Pow<&'a usize> for isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a usize) -> isize

Source§

impl<'a> Pow<&'a usize> for u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a usize) -> u8

Source§

impl<'a> Pow<&'a usize> for u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a usize) -> u16

Source§

impl<'a> Pow<&'a usize> for u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a usize) -> u32

Source§

impl<'a> Pow<&'a usize> for u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a usize) -> u64

Source§

impl<'a> Pow<&'a usize> for u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a usize) -> u128

Source§

impl<'a> Pow<&'a usize> for usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a usize) -> usize

Source§

impl<'a> Pow<&'a usize> for Wrapping<i8>

Source§

type Output = Wrapping<i8>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i8>

Source§

impl<'a> Pow<&'a usize> for Wrapping<i16>

Source§

type Output = Wrapping<i16>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i16>

Source§

impl<'a> Pow<&'a usize> for Wrapping<i32>

Source§

type Output = Wrapping<i32>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i32>

Source§

impl<'a> Pow<&'a usize> for Wrapping<i64>

Source§

type Output = Wrapping<i64>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i64>

Source§

impl<'a> Pow<&'a usize> for Wrapping<i128>

Source§

type Output = Wrapping<i128>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i128>

Source§

impl<'a> Pow<&'a usize> for Wrapping<isize>

Source§

impl<'a> Pow<&'a usize> for Wrapping<u8>

Source§

type Output = Wrapping<u8>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u8>

Source§

impl<'a> Pow<&'a usize> for Wrapping<u16>

Source§

type Output = Wrapping<u16>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u16>

Source§

impl<'a> Pow<&'a usize> for Wrapping<u32>

Source§

type Output = Wrapping<u32>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u32>

Source§

impl<'a> Pow<&'a usize> for Wrapping<u64>

Source§

type Output = Wrapping<u64>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u64>

Source§

impl<'a> Pow<&'a usize> for Wrapping<u128>

Source§

type Output = Wrapping<u128>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u128>

Source§

impl<'a> Pow<&'a usize> for Wrapping<usize>

Source§

impl<'a> Pow<u8> for &'a i8

Source§

type Output = i8

Source§

fn pow(self, rhs: u8) -> i8

Source§

impl<'a> Pow<u8> for &'a i16

Source§

type Output = i16

Source§

fn pow(self, rhs: u8) -> i16

Source§

impl<'a> Pow<u8> for &'a i32

Source§

type Output = i32

Source§

fn pow(self, rhs: u8) -> i32

Source§

impl<'a> Pow<u8> for &'a i64

Source§

type Output = i64

Source§

fn pow(self, rhs: u8) -> i64

Source§

impl<'a> Pow<u8> for &'a i128

Source§

type Output = i128

Source§

fn pow(self, rhs: u8) -> i128

Source§

impl<'a> Pow<u8> for &'a isize

Source§

type Output = isize

Source§

fn pow(self, rhs: u8) -> isize

Source§

impl<'a> Pow<u8> for &'a u8

Source§

type Output = u8

Source§

fn pow(self, rhs: u8) -> u8

Source§

impl<'a> Pow<u8> for &'a u16

Source§

type Output = u16

Source§

fn pow(self, rhs: u8) -> u16

Source§

impl<'a> Pow<u8> for &'a u32

Source§

type Output = u32

Source§

fn pow(self, rhs: u8) -> u32

Source§

impl<'a> Pow<u8> for &'a u64

Source§

type Output = u64

Source§

fn pow(self, rhs: u8) -> u64

Source§

impl<'a> Pow<u8> for &'a u128

Source§

type Output = u128

Source§

fn pow(self, rhs: u8) -> u128

Source§

impl<'a> Pow<u8> for &'a usize

Source§

type Output = usize

Source§

fn pow(self, rhs: u8) -> usize

Source§

impl<'a> Pow<u8> for &'a Wrapping<i8>

Source§

type Output = Wrapping<i8>

Source§

fn pow(self, rhs: u8) -> Wrapping<i8>

Source§

impl<'a> Pow<u8> for &'a Wrapping<i16>

Source§

impl<'a> Pow<u8> for &'a Wrapping<i32>

Source§

impl<'a> Pow<u8> for &'a Wrapping<i64>

Source§

impl<'a> Pow<u8> for &'a Wrapping<i128>

Source§

impl<'a> Pow<u8> for &'a Wrapping<isize>

Source§

impl<'a> Pow<u8> for &'a Wrapping<u8>

Source§

type Output = Wrapping<u8>

Source§

fn pow(self, rhs: u8) -> Wrapping<u8>

Source§

impl<'a> Pow<u8> for &'a Wrapping<u16>

Source§

impl<'a> Pow<u8> for &'a Wrapping<u32>

Source§

impl<'a> Pow<u8> for &'a Wrapping<u64>

Source§

impl<'a> Pow<u8> for &'a Wrapping<u128>

Source§

impl<'a> Pow<u8> for &'a Wrapping<usize>

Source§

impl<'a> Pow<u16> for &'a i8

Source§

type Output = i8

Source§

fn pow(self, rhs: u16) -> i8

Source§

impl<'a> Pow<u16> for &'a i16

Source§

type Output = i16

Source§

fn pow(self, rhs: u16) -> i16

Source§

impl<'a> Pow<u16> for &'a i32

Source§

type Output = i32

Source§

fn pow(self, rhs: u16) -> i32

Source§

impl<'a> Pow<u16> for &'a i64

Source§

type Output = i64

Source§

fn pow(self, rhs: u16) -> i64

Source§

impl<'a> Pow<u16> for &'a i128

Source§

type Output = i128

Source§

fn pow(self, rhs: u16) -> i128

Source§

impl<'a> Pow<u16> for &'a isize

Source§

type Output = isize

Source§

fn pow(self, rhs: u16) -> isize

Source§

impl<'a> Pow<u16> for &'a u8

Source§

type Output = u8

Source§

fn pow(self, rhs: u16) -> u8

Source§

impl<'a> Pow<u16> for &'a u16

Source§

type Output = u16

Source§

fn pow(self, rhs: u16) -> u16

Source§

impl<'a> Pow<u16> for &'a u32

Source§

type Output = u32

Source§

fn pow(self, rhs: u16) -> u32

Source§

impl<'a> Pow<u16> for &'a u64

Source§

type Output = u64

Source§

fn pow(self, rhs: u16) -> u64

Source§

impl<'a> Pow<u16> for &'a u128

Source§

type Output = u128

Source§

fn pow(self, rhs: u16) -> u128

Source§

impl<'a> Pow<u16> for &'a usize

Source§

type Output = usize

Source§

fn pow(self, rhs: u16) -> usize

Source§

impl<'a> Pow<u32> for &'a i8

Source§

type Output = i8

Source§

fn pow(self, rhs: u32) -> i8

Source§

impl<'a> Pow<u32> for &'a i16

Source§

type Output = i16

Source§

fn pow(self, rhs: u32) -> i16

Source§

impl<'a> Pow<u32> for &'a i32

Source§

type Output = i32

Source§

fn pow(self, rhs: u32) -> i32

Source§

impl<'a> Pow<u32> for &'a i64

Source§

type Output = i64

Source§

fn pow(self, rhs: u32) -> i64

Source§

impl<'a> Pow<u32> for &'a i128

Source§

type Output = i128

Source§

fn pow(self, rhs: u32) -> i128

Source§

impl<'a> Pow<u32> for &'a isize

Source§

type Output = isize

Source§

fn pow(self, rhs: u32) -> isize

Source§

impl<'a> Pow<u32> for &'a u8

Source§

type Output = u8

Source§

fn pow(self, rhs: u32) -> u8

Source§

impl<'a> Pow<u32> for &'a u16

Source§

type Output = u16

Source§

fn pow(self, rhs: u32) -> u16

Source§

impl<'a> Pow<u32> for &'a u32

Source§

type Output = u32

Source§

fn pow(self, rhs: u32) -> u32

Source§

impl<'a> Pow<u32> for &'a u64

Source§

type Output = u64

Source§

fn pow(self, rhs: u32) -> u64

Source§

impl<'a> Pow<u32> for &'a u128

Source§

type Output = u128

Source§

fn pow(self, rhs: u32) -> u128

Source§

impl<'a> Pow<u32> for &'a usize

Source§

type Output = usize

Source§

fn pow(self, rhs: u32) -> usize

Source§

impl<'a> Pow<usize> for &'a i8

Source§

type Output = i8

Source§

fn pow(self, rhs: usize) -> i8

Source§

impl<'a> Pow<usize> for &'a i16

Source§

type Output = i16

Source§

fn pow(self, rhs: usize) -> i16

Source§

impl<'a> Pow<usize> for &'a i32

Source§

type Output = i32

Source§

fn pow(self, rhs: usize) -> i32

Source§

impl<'a> Pow<usize> for &'a i64

Source§

type Output = i64

Source§

fn pow(self, rhs: usize) -> i64

Source§

impl<'a> Pow<usize> for &'a i128

Source§

type Output = i128

Source§

fn pow(self, rhs: usize) -> i128

Source§

impl<'a> Pow<usize> for &'a isize

Source§

type Output = isize

Source§

fn pow(self, rhs: usize) -> isize

Source§

impl<'a> Pow<usize> for &'a u8

Source§

type Output = u8

Source§

fn pow(self, rhs: usize) -> u8

Source§

impl<'a> Pow<usize> for &'a u16

Source§

type Output = u16

Source§

fn pow(self, rhs: usize) -> u16

Source§

impl<'a> Pow<usize> for &'a u32

Source§

type Output = u32

Source§

fn pow(self, rhs: usize) -> u32

Source§

impl<'a> Pow<usize> for &'a u64

Source§

type Output = u64

Source§

fn pow(self, rhs: usize) -> u64

Source§

impl<'a> Pow<usize> for &'a u128

Source§

type Output = u128

Source§

fn pow(self, rhs: usize) -> u128

Source§

impl<'a> Pow<usize> for &'a usize

Source§

type Output = usize

Source§

fn pow(self, rhs: usize) -> usize

Source§

impl<'a> Pow<usize> for &'a Wrapping<i8>

Source§

impl<'a> Pow<usize> for &'a Wrapping<i16>

Source§

impl<'a> Pow<usize> for &'a Wrapping<i32>

Source§

impl<'a> Pow<usize> for &'a Wrapping<i64>

Source§

impl<'a> Pow<usize> for &'a Wrapping<i128>

Source§

impl<'a> Pow<usize> for &'a Wrapping<isize>

Source§

impl<'a> Pow<usize> for &'a Wrapping<u8>

Source§

impl<'a> Pow<usize> for &'a Wrapping<u16>

Source§

impl<'a> Pow<usize> for &'a Wrapping<u32>

Source§

impl<'a> Pow<usize> for &'a Wrapping<u64>

Source§

impl<'a> Pow<usize> for &'a Wrapping<u128>

Source§

impl<'a> Pow<usize> for &'a Wrapping<usize>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a u8) -> i8

Source§

impl<'a, 'b> Pow<&'a u8> for &'b i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a u8) -> i16

Source§

impl<'a, 'b> Pow<&'a u8> for &'b i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a u8) -> i32

Source§

impl<'a, 'b> Pow<&'a u8> for &'b i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a u8) -> i64

Source§

impl<'a, 'b> Pow<&'a u8> for &'b i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a u8) -> i128

Source§

impl<'a, 'b> Pow<&'a u8> for &'b isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a u8) -> isize

Source§

impl<'a, 'b> Pow<&'a u8> for &'b u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a u8) -> u8

Source§

impl<'a, 'b> Pow<&'a u8> for &'b u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a u8) -> u16

Source§

impl<'a, 'b> Pow<&'a u8> for &'b u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a u8) -> u32

Source§

impl<'a, 'b> Pow<&'a u8> for &'b u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a u8) -> u64

Source§

impl<'a, 'b> Pow<&'a u8> for &'b u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a u8) -> u128

Source§

impl<'a, 'b> Pow<&'a u8> for &'b usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a u8) -> usize

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<i8>

Source§

type Output = Wrapping<i8>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i8>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<i16>

Source§

type Output = Wrapping<i16>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i16>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<i32>

Source§

type Output = Wrapping<i32>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i32>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<i64>

Source§

type Output = Wrapping<i64>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i64>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<i128>

Source§

type Output = Wrapping<i128>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<i128>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<isize>

Source§

type Output = Wrapping<isize>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<isize>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<u8>

Source§

type Output = Wrapping<u8>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u8>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<u16>

Source§

type Output = Wrapping<u16>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u16>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<u32>

Source§

type Output = Wrapping<u32>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u32>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<u64>

Source§

type Output = Wrapping<u64>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u64>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<u128>

Source§

type Output = Wrapping<u128>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<u128>

Source§

impl<'a, 'b> Pow<&'a u8> for &'b Wrapping<usize>

Source§

type Output = Wrapping<usize>

Source§

fn pow(self, rhs: &'a u8) -> Wrapping<usize>

Source§

impl<'a, 'b> Pow<&'a u16> for &'b i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a u16) -> i8

Source§

impl<'a, 'b> Pow<&'a u16> for &'b i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a u16) -> i16

Source§

impl<'a, 'b> Pow<&'a u16> for &'b i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a u16) -> i32

Source§

impl<'a, 'b> Pow<&'a u16> for &'b i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a u16) -> i64

Source§

impl<'a, 'b> Pow<&'a u16> for &'b i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a u16) -> i128

Source§

impl<'a, 'b> Pow<&'a u16> for &'b isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a u16) -> isize

Source§

impl<'a, 'b> Pow<&'a u16> for &'b u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a u16) -> u8

Source§

impl<'a, 'b> Pow<&'a u16> for &'b u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a u16) -> u16

Source§

impl<'a, 'b> Pow<&'a u16> for &'b u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a u16) -> u32

Source§

impl<'a, 'b> Pow<&'a u16> for &'b u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a u16) -> u64

Source§

impl<'a, 'b> Pow<&'a u16> for &'b u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a u16) -> u128

Source§

impl<'a, 'b> Pow<&'a u16> for &'b usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a u16) -> usize

Source§

impl<'a, 'b> Pow<&'a u32> for &'b i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a u32) -> i8

Source§

impl<'a, 'b> Pow<&'a u32> for &'b i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a u32) -> i16

Source§

impl<'a, 'b> Pow<&'a u32> for &'b i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a u32) -> i32

Source§

impl<'a, 'b> Pow<&'a u32> for &'b i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a u32) -> i64

Source§

impl<'a, 'b> Pow<&'a u32> for &'b i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a u32) -> i128

Source§

impl<'a, 'b> Pow<&'a u32> for &'b isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a u32) -> isize

Source§

impl<'a, 'b> Pow<&'a u32> for &'b u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a u32) -> u8

Source§

impl<'a, 'b> Pow<&'a u32> for &'b u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a u32) -> u16

Source§

impl<'a, 'b> Pow<&'a u32> for &'b u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a u32) -> u32

Source§

impl<'a, 'b> Pow<&'a u32> for &'b u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a u32) -> u64

Source§

impl<'a, 'b> Pow<&'a u32> for &'b u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a u32) -> u128

Source§

impl<'a, 'b> Pow<&'a u32> for &'b usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a u32) -> usize

Source§

impl<'a, 'b> Pow<&'a usize> for &'b i8

Source§

type Output = i8

Source§

fn pow(self, rhs: &'a usize) -> i8

Source§

impl<'a, 'b> Pow<&'a usize> for &'b i16

Source§

type Output = i16

Source§

fn pow(self, rhs: &'a usize) -> i16

Source§

impl<'a, 'b> Pow<&'a usize> for &'b i32

Source§

type Output = i32

Source§

fn pow(self, rhs: &'a usize) -> i32

Source§

impl<'a, 'b> Pow<&'a usize> for &'b i64

Source§

type Output = i64

Source§

fn pow(self, rhs: &'a usize) -> i64

Source§

impl<'a, 'b> Pow<&'a usize> for &'b i128

Source§

type Output = i128

Source§

fn pow(self, rhs: &'a usize) -> i128

Source§

impl<'a, 'b> Pow<&'a usize> for &'b isize

Source§

type Output = isize

Source§

fn pow(self, rhs: &'a usize) -> isize

Source§

impl<'a, 'b> Pow<&'a usize> for &'b u8

Source§

type Output = u8

Source§

fn pow(self, rhs: &'a usize) -> u8

Source§

impl<'a, 'b> Pow<&'a usize> for &'b u16

Source§

type Output = u16

Source§

fn pow(self, rhs: &'a usize) -> u16

Source§

impl<'a, 'b> Pow<&'a usize> for &'b u32

Source§

type Output = u32

Source§

fn pow(self, rhs: &'a usize) -> u32

Source§

impl<'a, 'b> Pow<&'a usize> for &'b u64

Source§

type Output = u64

Source§

fn pow(self, rhs: &'a usize) -> u64

Source§

impl<'a, 'b> Pow<&'a usize> for &'b u128

Source§

type Output = u128

Source§

fn pow(self, rhs: &'a usize) -> u128

Source§

impl<'a, 'b> Pow<&'a usize> for &'b usize

Source§

type Output = usize

Source§

fn pow(self, rhs: &'a usize) -> usize

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<i8>

Source§

type Output = Wrapping<i8>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i8>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<i16>

Source§

type Output = Wrapping<i16>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i16>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<i32>

Source§

type Output = Wrapping<i32>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i32>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<i64>

Source§

type Output = Wrapping<i64>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i64>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<i128>

Source§

type Output = Wrapping<i128>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<i128>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<isize>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<u8>

Source§

type Output = Wrapping<u8>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u8>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<u16>

Source§

type Output = Wrapping<u16>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u16>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<u32>

Source§

type Output = Wrapping<u32>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u32>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<u64>

Source§

type Output = Wrapping<u64>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u64>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<u128>

Source§

type Output = Wrapping<u128>

Source§

fn pow(self, rhs: &'a usize) -> Wrapping<u128>

Source§

impl<'a, 'b> Pow<&'a usize> for &'b Wrapping<usize>

Implementors§

\ No newline at end of file diff --git a/num_traits/sidebar-items.js b/num_traits/sidebar-items.js new file mode 100644 index 0000000..b454f59 --- /dev/null +++ b/num_traits/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["FloatErrorKind"],"fn":["clamp","clamp_max","clamp_min"],"mod":["bounds","cast","float","identities","int","ops","pow","sign"],"struct":["ParseFloatError"],"trait":["Num","NumAssign","NumAssignOps","NumAssignRef","NumOps","NumRef","RefNum"]}; \ No newline at end of file diff --git a/num_traits/sign/fn.abs.html b/num_traits/sign/fn.abs.html new file mode 100644 index 0000000..c3a270a --- /dev/null +++ b/num_traits/sign/fn.abs.html @@ -0,0 +1,4 @@ +abs in num_traits::sign - Rust
num_traits::sign

Function abs

Source
pub fn abs<T: Signed>(value: T) -> T
Expand description

Computes the absolute value.

+

For f32 and f64, NaN will be returned if the number is NaN

+

For signed integers, ::MIN will be returned if the number is ::MIN.

+
\ No newline at end of file diff --git a/num_traits/sign/fn.abs_sub.html b/num_traits/sign/fn.abs_sub.html new file mode 100644 index 0000000..a1d55f3 --- /dev/null +++ b/num_traits/sign/fn.abs_sub.html @@ -0,0 +1,4 @@ +abs_sub in num_traits::sign - Rust
num_traits::sign

Function abs_sub

Source
pub fn abs_sub<T: Signed>(x: T, y: T) -> T
Expand description

The positive difference of two numbers.

+

Returns zero if x is less than or equal to y, otherwise the difference +between x and y is returned.

+
\ No newline at end of file diff --git a/num_traits/sign/fn.signum.html b/num_traits/sign/fn.signum.html new file mode 100644 index 0000000..589ef58 --- /dev/null +++ b/num_traits/sign/fn.signum.html @@ -0,0 +1,14 @@ +signum in num_traits::sign - Rust
num_traits::sign

Function signum

Source
pub fn signum<T: Signed>(value: T) -> T
Expand description

Returns the sign of the number.

+

For f32 and f64:

+
    +
  • 1.0 if the number is positive, +0.0 or INFINITY
  • +
  • -1.0 if the number is negative, -0.0 or NEG_INFINITY
  • +
  • NaN if the number is NaN
  • +
+

For signed integers:

+
    +
  • 0 if the number is zero
  • +
  • 1 if the number is positive
  • +
  • -1 if the number is negative
  • +
+
\ No newline at end of file diff --git a/num_traits/sign/index.html b/num_traits/sign/index.html new file mode 100644 index 0000000..f2aaad3 --- /dev/null +++ b/num_traits/sign/index.html @@ -0,0 +1 @@ +num_traits::sign - Rust
num_traits

Module sign

Source

Traits§

  • Useful functions for signed numbers (i.e. numbers that can be negative).
  • A trait for values which cannot be negative

Functions§

  • Computes the absolute value.
  • The positive difference of two numbers.
  • Returns the sign of the number.
\ No newline at end of file diff --git a/num_traits/sign/sidebar-items.js b/num_traits/sign/sidebar-items.js new file mode 100644 index 0000000..049b32e --- /dev/null +++ b/num_traits/sign/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["abs","abs_sub","signum"],"trait":["Signed","Unsigned"]}; \ No newline at end of file diff --git a/num_traits/sign/trait.Signed.html b/num_traits/sign/trait.Signed.html new file mode 100644 index 0000000..aa4b464 --- /dev/null +++ b/num_traits/sign/trait.Signed.html @@ -0,0 +1,58 @@ +Signed in num_traits::sign - Rust
num_traits::sign

Trait Signed

Source
pub trait Signed:
+    Sized
+    + Num
+    + Neg<Output = Self> {
+    // Required methods
+    fn abs(&self) -> Self;
+    fn abs_sub(&self, other: &Self) -> Self;
+    fn signum(&self) -> Self;
+    fn is_positive(&self) -> bool;
+    fn is_negative(&self) -> bool;
+}
Expand description

Useful functions for signed numbers (i.e. numbers that can be negative).

+

Required Methods§

Source

fn abs(&self) -> Self

Computes the absolute value.

+

For f32 and f64, NaN will be returned if the number is NaN.

+

For signed integers, ::MIN will be returned if the number is ::MIN.

+
Source

fn abs_sub(&self, other: &Self) -> Self

The positive difference of two numbers.

+

Returns zero if the number is less than or equal to other, otherwise the difference +between self and other is returned.

+
Source

fn signum(&self) -> Self

Returns the sign of the number.

+

For f32 and f64:

+
    +
  • 1.0 if the number is positive, +0.0 or INFINITY
  • +
  • -1.0 if the number is negative, -0.0 or NEG_INFINITY
  • +
  • NaN if the number is NaN
  • +
+

For signed integers:

+
    +
  • 0 if the number is zero
  • +
  • 1 if the number is positive
  • +
  • -1 if the number is negative
  • +
+
Source

fn is_positive(&self) -> bool

Returns true if the number is positive and false if the number is zero or negative.

+
Source

fn is_negative(&self) -> bool

Returns true if the number is negative and false if the number is zero or positive.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Signed for f32

Source§

fn abs(&self) -> f32

Computes the absolute value. Returns NAN if the number is NAN.

+
Source§

fn abs_sub(&self, other: &f32) -> f32

The positive difference of two numbers. Returns 0.0 if the number is +less than or equal to other, otherwise the difference betweenself +and other is returned.

+
Source§

fn signum(&self) -> f32

§Returns
+
    +
  • 1.0 if the number is positive, +0.0 or INFINITY
  • +
  • -1.0 if the number is negative, -0.0 or NEG_INFINITY
  • +
  • NAN if the number is NaN
  • +
+
Source§

fn is_positive(&self) -> bool

Returns true if the number is positive, including +0.0 and INFINITY

+
Source§

fn is_negative(&self) -> bool

Returns true if the number is negative, including -0.0 and NEG_INFINITY

+
Source§

impl Signed for f64

Source§

fn abs(&self) -> f64

Computes the absolute value. Returns NAN if the number is NAN.

+
Source§

fn abs_sub(&self, other: &f64) -> f64

The positive difference of two numbers. Returns 0.0 if the number is +less than or equal to other, otherwise the difference betweenself +and other is returned.

+
Source§

fn signum(&self) -> f64

§Returns
+
    +
  • 1.0 if the number is positive, +0.0 or INFINITY
  • +
  • -1.0 if the number is negative, -0.0 or NEG_INFINITY
  • +
  • NAN if the number is NaN
  • +
+
Source§

fn is_positive(&self) -> bool

Returns true if the number is positive, including +0.0 and INFINITY

+
Source§

fn is_negative(&self) -> bool

Returns true if the number is negative, including -0.0 and NEG_INFINITY

+
Source§

impl Signed for i8

Source§

fn abs(&self) -> i8

Source§

fn abs_sub(&self, other: &i8) -> i8

Source§

fn signum(&self) -> i8

Source§

fn is_positive(&self) -> bool

Source§

fn is_negative(&self) -> bool

Source§

impl Signed for i16

Source§

fn abs(&self) -> i16

Source§

fn abs_sub(&self, other: &i16) -> i16

Source§

fn signum(&self) -> i16

Source§

fn is_positive(&self) -> bool

Source§

fn is_negative(&self) -> bool

Source§

impl Signed for i32

Source§

fn abs(&self) -> i32

Source§

fn abs_sub(&self, other: &i32) -> i32

Source§

fn signum(&self) -> i32

Source§

fn is_positive(&self) -> bool

Source§

fn is_negative(&self) -> bool

Source§

impl Signed for i64

Source§

fn abs(&self) -> i64

Source§

fn abs_sub(&self, other: &i64) -> i64

Source§

fn signum(&self) -> i64

Source§

fn is_positive(&self) -> bool

Source§

fn is_negative(&self) -> bool

Source§

impl Signed for i128

Source§

fn abs(&self) -> i128

Source§

fn abs_sub(&self, other: &i128) -> i128

Source§

fn signum(&self) -> i128

Source§

fn is_positive(&self) -> bool

Source§

fn is_negative(&self) -> bool

Source§

impl Signed for isize

Source§

fn abs(&self) -> isize

Source§

fn abs_sub(&self, other: &isize) -> isize

Source§

fn signum(&self) -> isize

Source§

fn is_positive(&self) -> bool

Source§

fn is_negative(&self) -> bool

Source§

impl<T: Signed> Signed for Wrapping<T>
where + Wrapping<T>: Num + Neg<Output = Wrapping<T>>,

Source§

fn abs(&self) -> Self

Source§

fn abs_sub(&self, other: &Self) -> Self

Source§

fn signum(&self) -> Self

Source§

fn is_positive(&self) -> bool

Source§

fn is_negative(&self) -> bool

Implementors§

\ No newline at end of file diff --git a/num_traits/sign/trait.Unsigned.html b/num_traits/sign/trait.Unsigned.html new file mode 100644 index 0000000..daef760 --- /dev/null +++ b/num_traits/sign/trait.Unsigned.html @@ -0,0 +1,3 @@ +Unsigned in num_traits::sign - Rust
num_traits::sign

Trait Unsigned

Source
pub trait Unsigned: Num { }
Expand description

A trait for values which cannot be negative

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Unsigned for u8

Source§

impl Unsigned for u16

Source§

impl Unsigned for u32

Source§

impl Unsigned for u64

Source§

impl Unsigned for u128

Source§

impl Unsigned for usize

Source§

impl<T: Unsigned> Unsigned for Wrapping<T>
where + Wrapping<T>: Num,

Implementors§

\ No newline at end of file diff --git a/num_traits/struct.ParseFloatError.html b/num_traits/struct.ParseFloatError.html new file mode 100644 index 0000000..2324385 --- /dev/null +++ b/num_traits/struct.ParseFloatError.html @@ -0,0 +1,13 @@ +ParseFloatError in num_traits - Rust
num_traits

Struct ParseFloatError

Source
pub struct ParseFloatError {
+    pub kind: FloatErrorKind,
+}

Fields§

§kind: FloatErrorKind

Trait Implementations§

Source§

impl Debug for ParseFloatError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ParseFloatError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/num_traits/trait.Num.html b/num_traits/trait.Num.html new file mode 100644 index 0000000..fb4b49b --- /dev/null +++ b/num_traits/trait.Num.html @@ -0,0 +1,34 @@ +Num in num_traits - Rust
num_traits

Trait Num

Source
pub trait Num:
+    PartialEq
+    + Zero
+    + One
+    + NumOps {
+    type FromStrRadixErr;
+
+    // Required method
+    fn from_str_radix(
+        str: &str,
+        radix: u32,
+    ) -> Result<Self, Self::FromStrRadixErr>;
+}
Expand description

The base trait for numeric types, covering 0 and 1 values, +comparisons, basic numeric operations, and string conversion.

+

Required Associated Types§

Required Methods§

Source

fn from_str_radix(str: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr>

Convert from a string and radix (typically 2..=36).

+
§Examples
+
use num_traits::Num;
+
+let result = <i32 as Num>::from_str_radix("27", 10);
+assert_eq!(result, Ok(27));
+
+let result = <i32 as Num>::from_str_radix("foo", 10);
+assert!(result.is_err());
+
§Supported radices
+

The exact range of supported radices is at the discretion of each type implementation. For +primitive integers, this is implemented by the inherent from_str_radix methods in the +standard library, which panic if the radix is not in the range from 2 to 36. The +implementation in this crate for primitive floats is similar.

+

For third-party types, it is suggested that implementations should follow suit and at least +accept 2..=36 without panicking, but an Err may be returned for any unsupported radix. +It’s possible that a type might not even support the common radix 10, nor any, if string +parsing doesn’t make sense for that type.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Num for f32

Source§

impl Num for f64

Source§

impl Num for i8

Source§

impl Num for i16

Source§

impl Num for i32

Source§

impl Num for i64

Source§

impl Num for i128

Source§

impl Num for isize

Source§

impl Num for u8

Source§

impl Num for u16

Source§

impl Num for u32

Source§

impl Num for u64

Source§

impl Num for u128

Source§

impl Num for usize

Source§

impl<T: Num> Num for Wrapping<T>
where + Wrapping<T>: NumOps,

Implementors§

\ No newline at end of file diff --git a/num_traits/trait.NumAssign.html b/num_traits/trait.NumAssign.html new file mode 100644 index 0000000..a0a7238 --- /dev/null +++ b/num_traits/trait.NumAssign.html @@ -0,0 +1,4 @@ +NumAssign in num_traits - Rust
num_traits

Trait NumAssign

Source
pub trait NumAssign: Num + NumAssignOps { }
Expand description

The trait for Num types which also implement assignment operators.

+

This is automatically implemented for types which implement the operators.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T> NumAssign for T
where + T: Num + NumAssignOps,

\ No newline at end of file diff --git a/num_traits/trait.NumAssignOps.html b/num_traits/trait.NumAssignOps.html new file mode 100644 index 0000000..069de52 --- /dev/null +++ b/num_traits/trait.NumAssignOps.html @@ -0,0 +1,9 @@ +NumAssignOps in num_traits - Rust
num_traits

Trait NumAssignOps

Source
pub trait NumAssignOps<Rhs = Self>:
+    AddAssign<Rhs>
+    + SubAssign<Rhs>
+    + MulAssign<Rhs>
+    + DivAssign<Rhs>
+    + RemAssign<Rhs> { }
Expand description

Generic trait for types implementing numeric assignment operators (like +=).

+

This is automatically implemented for types which implement the operators.

+

Implementors§

Source§

impl<T, Rhs> NumAssignOps<Rhs> for T
where + T: AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>,

\ No newline at end of file diff --git a/num_traits/trait.NumAssignRef.html b/num_traits/trait.NumAssignRef.html new file mode 100644 index 0000000..27a0661 --- /dev/null +++ b/num_traits/trait.NumAssignRef.html @@ -0,0 +1,5 @@ +NumAssignRef in num_traits - Rust
num_traits

Trait NumAssignRef

Source
pub trait NumAssignRef: NumAssign + for<'r> NumAssignOps<&'r Self> { }
Expand description

The trait for NumAssign types which also implement assignment operations +taking the second operand by reference.

+

This is automatically implemented for types which implement the operators.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T> NumAssignRef for T
where + T: NumAssign + for<'r> NumAssignOps<&'r T>,

\ No newline at end of file diff --git a/num_traits/trait.NumOps.html b/num_traits/trait.NumOps.html new file mode 100644 index 0000000..4e7310b --- /dev/null +++ b/num_traits/trait.NumOps.html @@ -0,0 +1,9 @@ +NumOps in num_traits - Rust
num_traits

Trait NumOps

Source
pub trait NumOps<Rhs = Self, Output = Self>:
+    Add<Rhs, Output = Output>
+    + Sub<Rhs, Output = Output>
+    + Mul<Rhs, Output = Output>
+    + Div<Rhs, Output = Output>
+    + Rem<Rhs, Output = Output> { }
Expand description

Generic trait for types implementing basic numeric operations

+

This is automatically implemented for types which implement the operators.

+

Implementors§

Source§

impl<T, Rhs, Output> NumOps<Rhs, Output> for T
where + T: Add<Rhs, Output = Output> + Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Rem<Rhs, Output = Output>,

\ No newline at end of file diff --git a/num_traits/trait.NumRef.html b/num_traits/trait.NumRef.html new file mode 100644 index 0000000..32c6932 --- /dev/null +++ b/num_traits/trait.NumRef.html @@ -0,0 +1,5 @@ +NumRef in num_traits - Rust
num_traits

Trait NumRef

Source
pub trait NumRef: Num + for<'r> NumOps<&'r Self> { }
Expand description

The trait for Num types which also implement numeric operations taking +the second operand by reference.

+

This is automatically implemented for types which implement the operators.

+

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T> NumRef for T
where + T: Num + for<'r> NumOps<&'r T>,

\ No newline at end of file diff --git a/num_traits/trait.RefNum.html b/num_traits/trait.RefNum.html new file mode 100644 index 0000000..23c35b3 --- /dev/null +++ b/num_traits/trait.RefNum.html @@ -0,0 +1,7 @@ +RefNum in num_traits - Rust
num_traits

Trait RefNum

Source
pub trait RefNum<Base>: NumOps<Base, Base> + for<'r> NumOps<&'r Base, Base> { }
Expand description

The trait for Num references which implement numeric operations, taking the +second operand either by value or by reference.

+

This is automatically implemented for all types which implement the operators. It covers +every type implementing the operations though, regardless of it being a reference or +related to Num.

+

Implementors§

Source§

impl<T, Base> RefNum<Base> for T
where + T: NumOps<Base, Base> + for<'r> NumOps<&'r Base, Base>,

\ No newline at end of file diff --git a/rbitset/all.html b/rbitset/all.html new file mode 100644 index 0000000..4d39b2a --- /dev/null +++ b/rbitset/all.html @@ -0,0 +1 @@ +List of all items in this crate

List of all items

Structs

Enums

Type Aliases

\ No newline at end of file diff --git a/rbitset/enum.BitSetError.html b/rbitset/enum.BitSetError.html new file mode 100644 index 0000000..850bd8d --- /dev/null +++ b/rbitset/enum.BitSetError.html @@ -0,0 +1,25 @@ +BitSetError in rbitset - Rust
rbitset

Enum BitSetError

Source
#[non_exhaustive]
pub enum BitSetError { + BiggerThanCapacity, +}
Expand description

Possible errors on the BitSet operations.

+

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

BiggerThanCapacity

Happens when trying to insert or remove a value bigger than the capacity of the bitset.

+

Trait Implementations§

Source§

impl Clone for BitSetError

Source§

fn clone(&self) -> BitSetError

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for BitSetError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for BitSetError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for BitSetError

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for BitSetError

Source§

fn cmp(&self, other: &BitSetError) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where + Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for BitSetError

Source§

fn eq(&self, other: &BitSetError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl PartialOrd for BitSetError

Source§

fn partial_cmp(&self, other: &BitSetError) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the +<= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > +operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by +the >= operator. Read more
Source§

impl Copy for BitSetError

Source§

impl Eq for BitSetError

Source§

impl StructuralPartialEq for BitSetError

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/index.html b/rbitset/index.html new file mode 100644 index 0000000..0459dba --- /dev/null +++ b/rbitset/index.html @@ -0,0 +1 @@ +rbitset - Rust

Crate rbitset

Source

Structs§

  • The bit set itself.
  • A lazy iterator producing elements in the difference of BitSets.
  • A draining iterator over the items of a BitSet.
  • A lazy iterator producing elements in the intersection of BitSets.
  • An owning iterator over the items of a BitSet.
  • An iterator over the items of a BitSet.
  • A lazy iterator producing elements in the symmetric difference of BitSets.
  • A lazy iterator producing elements in the union of BitSets.

Enums§

Type Aliases§

  • A bit set able to hold up to 8 elements.
  • A bit set able to hold up to 16 elements.
  • A bit set able to hold up to 32 elements.
  • A bit set able to hold up to 64 elements.
  • A bit set able to hold up to 128 elements.
  • A bit set able to hold up to 256 elements.
  • A bit set able to hold up to 512 elements.
  • A bit set able to hold up to 1024 elements.
\ No newline at end of file diff --git a/rbitset/sidebar-items.js b/rbitset/sidebar-items.js new file mode 100644 index 0000000..4eb5b33 --- /dev/null +++ b/rbitset/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"enum":["BitSetError"],"struct":["BitSet","Difference","Drain","Intersection","IntoIter","Iter","SymmetricDifference","Union"],"type":["BitSet1024","BitSet128","BitSet16","BitSet256","BitSet32","BitSet512","BitSet64","BitSet8"]}; \ No newline at end of file diff --git a/rbitset/struct.BitSet.html b/rbitset/struct.BitSet.html new file mode 100644 index 0000000..e76e8d6 --- /dev/null +++ b/rbitset/struct.BitSet.html @@ -0,0 +1,466 @@ +BitSet in rbitset - Rust
rbitset

Struct BitSet

Source
pub struct BitSet<T, const N: usize> { /* private fields */ }
Expand description

The bit set itself.

+

This wrapper is #![repr(transparent)] and guaranteed to have the same memory +representation as the inner bit array

+

§Panics

+

All non-try functions taking a bit parameter panics if the bit is bigger +than the capacity of the set. For non-panicking versions, use try_.

+

Implementations§

Source§

impl<const N: usize> BitSet<i8, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<i16, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<i32, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<i64, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<i128, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<isize, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<u8, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<u16, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<u32, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<u64, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<u128, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<const N: usize> BitSet<usize, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u8, 1>::new();
+
Source§

impl<T: PrimInt + Default, const N: usize> BitSet<T, N>

Source

pub fn with_default() -> Self

Create an empty instance with default value.

+

This function is the same as new but without the constness.

+
§Examples
+
use rbitset::BitSet;
+
+let set = BitSet::<u32, 7>::new();
+
Source

pub fn clear(&mut self)

Clears the set, disabling all bits, removing all elements.

+

Probably faster than what fill(.., false) would be.

+
§Examples
+
use rbitset::BitSet8;
+
+let mut set = BitSet8::new();
+set.insert(1);
+assert!(!set.is_empty());
+set.clear();
+assert!(set.is_empty());
+
Source§

impl<T, const N: usize> BitSet<T, N>

Source

pub fn into_inner(self) -> [T; N]

Return the inner integer array.

+
§Examples
+
use rbitset::BitSet8;
+
+let set = BitSet8::from_iter([1u8, 2, 3]);
+assert_eq!(set.into_inner(), [0b00001110]);
+
Source

pub const fn capacity() -> usize

Returns the capacity of the set, in other words how many bits it can hold.

+

This function may very well overflow if the size or length is too big, but if you’re making +that big allocations you probably got bigger things to worry about.

+
§Examples
+
use rbitset::BitSet;
+
+let capacity = BitSet::<u32, 3>::capacity();
+assert_eq!(capacity, 32 * 3);
+
Source§

impl<T: PrimInt, const N: usize> BitSet<T, N>

Source

pub fn from_ref(inner: &mut [T; N]) -> &mut Self

Transmutes a reference to a borrowed bit array to a borrowed BitSet with the same lifetime.

+
§Examples
+
use rbitset::BitSet;
+
+let mut raw = [0b00001110, 0u8];
+let set = BitSet::from_ref(&mut raw);
+assert!(set.contains(1));
+assert!(set.contains(2));
+assert!(set.contains(3));
+
Source

pub fn try_append<U, const M: usize>( + &mut self, + other: &mut BitSet<U, M>, +) -> Result<(), BitSetError>
where + U: PrimInt,

Tries to move all elements from other into self, leaving other empty.

+
§Examples
+
use rbitset::BitSet16;
+
+let mut a = BitSet16::new();
+a.insert(1);
+a.insert(2);
+a.insert(3);
+
+let mut b = BitSet16::new();
+b.insert(3);
+b.insert(4);
+b.insert(5);
+
+a.try_append(&mut b).expect("An error occurred");
+
+assert_eq!(a.len(), 5);
+assert_eq!(b.len(), 0);
+
+assert!(a.contains(1));
+assert!(a.contains(2));
+assert!(a.contains(3));
+assert!(a.contains(4));
+assert!(a.contains(5));
+
Source

pub fn try_insert(&mut self, bit: usize) -> Result<bool, BitSetError>

Tries to add a value to the set.

+

If the set did not have this value present, true is returned.

+

If the set did have this value present, false is returned.

+
§Examples
+
use rbitset::{BitSet16, BitSetError};
+
+let mut set = BitSet16::new();
+
+assert_eq!(set.try_insert(2), Ok(true));
+assert_eq!(set.try_insert(2), Ok(false));
+assert_eq!(set.try_insert(16), Err(BitSetError::BiggerThanCapacity));
+
Source

pub unsafe fn insert_unchecked(&mut self, bit: usize) -> bool

Inserts a value to the set without making any checks.

+

If the set did not have this value present, true is returned.

+

If the set did have this value present, false is returned.

+
§Safety
+

Behavior is undefined if any of the following conditions are violated:

+
    +
  • The bit value is bigger than the capacity of the bitset
  • +
+
Source

pub fn try_remove(&mut self, bit: usize) -> Result<bool, BitSetError>

Removes a value from the set. Returns whether the value was present in the set.

+

If the bit is already disabled this is a no-op.

+
§Examples
+
use rbitset::BitSet8;
+
+let mut set = BitSet8::new();
+
+set.insert(2);
+assert_eq!(set.remove(2), true);
+assert_eq!(set.remove(2), false);
+
Source

pub unsafe fn remove_unchecked(&mut self, bit: usize) -> bool

Removes a value from the set without any checking. Returns whether the value was present in +the set.

+

If the bit is already disabled this is a no-op.

+
§Safety
+

Behavior is undefined if any of the following conditions are violated:

+
    +
  • The bit value is bigger than the capacity of the bitset
  • +
+
Source

pub fn append<U, const M: usize>(&mut self, other: &mut BitSet<U, M>)
where + U: PrimInt,

Move all elements from other into self, leaving other empty.

+
§Panics
+

This function may panic if other contains activated bits bigger than what self capacity.

+
§Examples
+
use rbitset::BitSet16;
+
+let mut a = BitSet16::new();
+a.insert(1);
+a.insert(2);
+a.insert(3);
+
+let mut b = BitSet16::new();
+b.insert(3);
+b.insert(4);
+b.insert(5);
+
+a.append(&mut b);
+
+assert_eq!(a.len(), 5);
+assert_eq!(b.len(), 0);
+
+assert!(a.contains(1));
+assert!(a.contains(2));
+assert!(a.contains(3));
+assert!(a.contains(4));
+assert!(a.contains(5));
+
Source

pub fn insert(&mut self, bit: usize) -> bool

Adds a value to the set.

+

If the set did not have this value present, true is returned.

+

If the set did have this value present, false is returned.

+
§Panics
+

This function may panic if bit value trying to be inserted is bigger than the +capacity of the BitSet. Check try_insert +for a non-panicking version

+
§Examples
+
use rbitset::BitSet16;
+
+let mut set = BitSet16::new();
+
+assert_eq!(set.insert(2), true);
+assert_eq!(set.insert(2), false);
+assert_eq!(set.len(), 1);
+
Source

pub fn remove(&mut self, bit: usize) -> bool

Removes a value from the set. Returns whether the value was present in the set.

+

If the bit is already disabled this is a no-op.

+
§Panics
+

This function may panic if bit value trying to be removed is bigger than the +capacity of the BitSet. Check try_remove +for a non-panicking version

+
§Examples
+
use rbitset::BitSet8;
+
+let mut set = BitSet8::new();
+
+set.insert(2);
+assert_eq!(set.remove(2), true);
+assert_eq!(set.remove(2), false);
+
Source

pub fn retain<F>(&mut self, f: F)
where + F: FnMut(usize) -> bool,

Retains only the elements specified by the predicate.

+

In other words, remove all elements e for which f(&e) returns false. +The elements are visited in ascending order.

+
§Examples
+
use rbitset::BitSet16;
+
+let mut set = BitSet16::from_iter([1u8, 2, 3, 4, 5, 6]);
+// Keep only the even numbers.
+set.retain(|k| k % 2 == 0);
+let res = BitSet16::from_iter([2u8, 4, 6]);
+assert_eq!(set, res);
+
Source

pub fn contains(&self, bit: usize) -> bool

Returns true if the specified bit is enabled, in other words, if the set contains a +value.

+
§Examples
+
use rbitset::BitSet8;
+
+let set = BitSet8::from_iter([1u8, 2, 3]);
+assert_eq!(set.contains(1), true);
+assert_eq!(set.contains(4), false);
+
Source

pub fn try_contains(&self, bit: usize) -> Result<bool, BitSetError>

Returns true if the specified bit is enabled, in other words, if the set contains a +value.

+
§Examples
+
use rbitset::BitSet8;
+
+let set = BitSet8::from_iter([1u8, 2, 3]);
+assert_eq!(set.try_contains(1), Ok(true));
+assert_eq!(set.try_contains(4), Ok(false));
+
Source

pub fn len(&self) -> usize

Returns the number of elements in the set.

+
§Examples
+
use rbitset::BitSet16;
+
+let mut set = BitSet16::new();
+assert_eq!(set.len(), 0);
+set.insert(1);
+assert_eq!(set.len(), 1);
+
Source

pub fn is_empty(&self) -> bool

Returns true if the set contains no elements.

+
§Examples
+
use rbitset::BitSet16;
+
+let mut set = BitSet16::new();
+assert!(set.is_empty());
+set.insert(1);
+assert!(!set.is_empty());
+
Source

pub fn is_disjoint<U: PrimInt, const M: usize>( + &self, + other: &BitSet<U, M>, +) -> bool

Returns true if self has no elements in common with other. This is equivalent to +checking for an empty intersection.

+
§Examples
+
use rbitset::BitSet128;
+
+let a = BitSet128::from_iter([1u8, 2, 3]);
+let mut b = BitSet128::new();
+
+assert!(a.is_disjoint(&b));
+b.insert(4);
+assert!(a.is_disjoint(&b));
+b.insert(1);
+assert!(!a.is_disjoint(&b));
+
Source

pub fn is_subset<U: PrimInt, const M: usize>( + &self, + other: &BitSet<U, M>, +) -> bool

Returns true if the set is a subset of another, i.e., other contains at least all the +values in self.

+
§Examples
+
use rbitset::BitSet8;
+
+let sup = BitSet8::from_iter([1u8, 2, 3]);
+let mut set = BitSet8::new();
+
+assert!(set.is_subset(&sup));
+set.insert(2);
+assert!(set.is_subset(&sup));
+set.insert(4);
+assert!(!set.is_subset(&sup));
+
Source

pub fn is_superset<U: PrimInt, const M: usize>( + &self, + other: &BitSet<U, M>, +) -> bool

Returns true if the set is a superset of another, i.e., self contains at least all the +values in other.

+
§Examples
+
use rbitset::BitSet8;
+
+let sub = BitSet8::from_iter([1u8, 2]);
+let mut set = BitSet8::new();
+
+assert!(!set.is_superset(&sub));
+
+set.insert(0);
+set.insert(1);
+assert!(!set.is_superset(&sub));
+
+set.insert(2);
+assert!(set.is_superset(&sub));
+
Source

pub fn count_ones(&self) -> u32

Returns the total number of enabled bits.

+
§Examples
+
use rbitset::BitSet8;
+
+let set = BitSet8::from_iter([1u8, 2, 3]);
+assert_eq!(set.count_ones(), 3);
+
Source

pub fn count_zeros(&self) -> u32

Returns the total number of disabled bits.

+
§Examples
+
use rbitset::BitSet8;
+
+let set = BitSet8::from_iter([1u8, 2, 3]);
+assert_eq!(set.count_zeros(), 5);
+
Source

pub fn drain(&mut self) -> Drain<'_, T, N>

Clears the set, returning all elements as an iterator. Keeps the allocated memory for reuse.

+

If the returned iterator is dropped before being fully consumed, it drops the remaining +elements. The returned iterator keeps a mutable borrow on the vector to optimize its +implementation.

+
§Examples
+
use rbitset::BitSet8;
+
+let mut set = BitSet8::from_iter([1u8, 2, 3]);
+assert!(!set.is_empty());
+
+for i in set.drain() {
+    println!("{i}");
+}
+
+assert!(set.is_empty());
+
Source

pub fn difference<'a, U: PrimInt, const M: usize>( + &'a self, + other: &'a BitSet<U, M>, +) -> Difference<'a, T, U, N, M>

Visits the values representing the difference, i.e., the values that are in self but not +in other.

+
§Examples
+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+// Can be seen as `a - b`.
+for x in a.difference(&b) {
+    println!("{x}"); // Print 1
+}
+
+let diff: BitSet8 = a.difference(&b).collect();
+let res = BitSet8::from_iter([1u8]);
+assert_eq!(diff, res);
+
+// Note that difference is not symmetric,
+// and `b - a` means something else:
+let diff: BitSet8 = b.difference(&a).collect();
+let res = BitSet8::from_iter([4u8]);
+assert_eq!(diff, res);
+
Source

pub fn intersection<'a, U: PrimInt, const M: usize>( + &'a self, + other: &'a BitSet<U, M>, +) -> Intersection<'a, T, U, N, M>

Visits the values representing the intersection, i.e., the values that are both in self +and other.

+
§Examples
+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+for x in a.intersection(&b) {
+    println!("{x}");
+}
+
+let intersection: BitSet8 = a.intersection(&b).collect();
+let test = BitSet8::from_iter([2u8, 3]);
+assert_eq!(intersection, test);
+
Source

pub fn symmetric_difference<'a, U: PrimInt, const M: usize>( + &'a self, + other: &'a BitSet<U, M>, +) -> SymmetricDifference<'a, T, U, N, M>

Visits the values representing the symmetric difference, i.e., the values that are in self +or in other but not in both.

+
§Examples
+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+for x in a.symmetric_difference(&b) {
+    println!("{x}");
+}
+
+let diff1: BitSet8 = a.symmetric_difference(&b).collect();
+let diff2: BitSet8 = b.symmetric_difference(&a).collect();
+
+assert_eq!(diff1, diff2);
+let res = BitSet8::from_iter([1u8, 4]);
+assert_eq!(diff1, res);
+
Source

pub fn union<'a, U: PrimInt, const M: usize>( + &'a self, + other: &'a BitSet<U, M>, +) -> Union<'a, T, U, N, M>

Visits the values representing the union, i.e., all the values in self or other, without +duplicates.

+
§Examples
+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+for x in a.union(&b) {
+    println!("{x}");
+}
+
+let union: BitSet8 = a.union(&b).collect();
+let res = BitSet8::from_iter([1u8, 2, 3, 4]);
+assert_eq!(union, res);
+
Source

pub fn iter(&self) -> Iter<'_, T, N>

An iterator visiting all elements in the set.

+
§Examples
+
use rbitset::BitSet8;
+
+let mut set = BitSet8::new();
+set.insert(1);
+set.insert(2);
+
+for x in set.iter() {
+    println!("{x}");
+}
+
Source§

impl<T: Default + PrimInt, const N: usize> BitSet<T, N>

Source

pub fn fill<R: RangeBounds<usize>>(&mut self, range: R, on: bool)

Set all bits in a range. fill(.., false) is effectively the same as clear().

+
§Panics
+

Panics if the start or end bounds are more than the capacity.

+

Trait Implementations§

Source§

impl<T, const N: usize> Binary for BitSet<T, N>
where + T: Copy + Binary,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Clone, const N: usize> Clone for BitSet<T, N>

Source§

fn clone(&self) -> BitSet<T, N>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T, const N: usize> Debug for BitSet<T, N>
where + T: PrimInt,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: PrimInt + Default, const N: usize> Default for BitSet<T, N>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<T: PrimInt, U: Into<usize>, const N: usize> Extend<U> for BitSet<T, N>

Source§

fn extend<I: IntoIterator<Item = U>>(&mut self, iter: I)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<T: PrimInt, const N: usize> From<[T; N]> for BitSet<T, N>

Source§

fn from(inner: [T; N]) -> Self

Converts to this type from the input type.
Source§

impl<T: PrimInt + Default, U: Into<usize>, const N: usize> FromIterator<U> for BitSet<T, N>

Source§

fn from_iter<I>(iter: I) -> Self
where + I: IntoIterator<Item = U>,

Creates a value from an iterator. Read more
Source§

impl<'a, T: PrimInt, const N: usize> IntoIterator for &'a BitSet<T, N>

Source§

type IntoIter = Iter<'a, T, N>

Which kind of iterator are we turning this into?
Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<T: PrimInt, const N: usize> IntoIterator for BitSet<T, N>

Source§

type IntoIter = IntoIter<T, N>

Which kind of iterator are we turning this into?
Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<T: PrimInt, const N: usize> Not for BitSet<T, N>

Source§

type Output = BitSet<T, N>

The resulting type after applying the ! operator.
Source§

fn not(self) -> Self::Output

Performs the unary ! operation. Read more
Source§

impl<T: PartialEq, const N: usize> PartialEq for BitSet<T, N>

Source§

fn eq(&self, other: &BitSet<T, N>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, +and should not be overridden without very good reason.
Source§

impl<T: Copy, const N: usize> Copy for BitSet<T, N>

Source§

impl<T: Eq, const N: usize> Eq for BitSet<T, N>

Source§

impl<T, const N: usize> StructuralPartialEq for BitSet<T, N>

Auto Trait Implementations§

§

impl<T, const N: usize> Freeze for BitSet<T, N>
where + T: Freeze,

§

impl<T, const N: usize> RefUnwindSafe for BitSet<T, N>
where + T: RefUnwindSafe,

§

impl<T, const N: usize> Send for BitSet<T, N>
where + T: Send,

§

impl<T, const N: usize> Sync for BitSet<T, N>
where + T: Sync,

§

impl<T, const N: usize> Unpin for BitSet<T, N>
where + T: Unpin,

§

impl<T, const N: usize> UnwindSafe for BitSet<T, N>
where + T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/struct.Difference.html b/rbitset/struct.Difference.html new file mode 100644 index 0000000..d4bfb79 --- /dev/null +++ b/rbitset/struct.Difference.html @@ -0,0 +1,235 @@ +Difference in rbitset - Rust
rbitset

Struct Difference

Source
pub struct Difference<'a, T: PrimInt + 'a, U: PrimInt + 'a, const N: usize, const M: usize> { /* private fields */ }
Expand description

A lazy iterator producing elements in the difference of BitSets.

+

This struct is created by the difference method on BitSet. See its documentation for +more.

+

§Examples

+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+let mut difference = a.difference(&b);
+

Trait Implementations§

Source§

impl<'a, T: Clone + PrimInt + 'a, U: Clone + PrimInt + 'a, const N: usize, const M: usize> Clone for Difference<'a, T, U, N, M>

Source§

fn clone(&self) -> Difference<'a, T, U, N, M>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T, U, const N: usize, const M: usize> Debug for Difference<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, T, U, const N: usize, const M: usize> Iterator for Difference<'a, T, U, N, M>
where + T: PrimInt + 'a, + U: PrimInt + 'a,

Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
Source§

fn next_chunk<const N: usize>( + &mut self, +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn count(self) -> usize
where + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where + Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where + Self: Sized, + Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where + Self: Sized, + Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( + &mut self, +) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where + Self: Sized, + Self::Item: Try, + <Self::Item as Try>::Residual: Residual<B>, + B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
Source§

fn try_reduce<R>( + &mut self, + f: impl FnMut(Self::Item, Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where + Self: Sized, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
Source§

fn try_find<R>( + &mut self, + f: impl FnMut(&Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where + Self: Sized, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
1.0.0 · Source§

fn cycle(self) -> Cycle<Self>
where + Self: Sized + Clone,

Repeats an iterator endlessly. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

Lexicographically compares the elements of this Iterator with those +of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where + Self: Sized, + Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more
Source§

impl<T, U, const N: usize, const M: usize> FusedIterator for Difference<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Auto Trait Implementations§

§

impl<'a, T, U, const N: usize, const M: usize> Freeze for Difference<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for Difference<'a, T, U, N, M>
where + U: RefUnwindSafe, + T: RefUnwindSafe,

§

impl<'a, T, U, const N: usize, const M: usize> Send for Difference<'a, T, U, N, M>
where + U: Sync, + T: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Sync for Difference<'a, T, U, N, M>
where + U: Sync, + T: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Unpin for Difference<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for Difference<'a, T, U, N, M>
where + U: RefUnwindSafe, + T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<I> IntoIterator for I
where + I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/struct.Drain.html b/rbitset/struct.Drain.html new file mode 100644 index 0000000..66565d5 --- /dev/null +++ b/rbitset/struct.Drain.html @@ -0,0 +1,220 @@ +Drain in rbitset - Rust
rbitset

Struct Drain

Source
pub struct Drain<'a, T: PrimInt + 'a, const N: usize> { /* private fields */ }
Expand description

A draining iterator over the items of a BitSet.

+

This struct is created by the drain method on BitSet. See its documentation for more.

+

§Examples

+
use rbitset::BitSet8;
+
+let mut a = BitSet8::from_iter([1u8, 2, 3]);
+
+let mut drain = a.drain();
+

Trait Implementations§

Source§

impl<T: PrimInt, const N: usize> Debug for Drain<'_, T, N>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: PrimInt, const N: usize> ExactSizeIterator for Drain<'_, T, N>

Source§

fn len(&self) -> usize

Returns the exact remaining length of the iterator. Read more
Source§

fn is_empty(&self) -> bool

🔬This is a nightly-only experimental API. (exact_size_is_empty)
Returns true if the iterator is empty. Read more
Source§

impl<T: PrimInt, const N: usize> Iterator for Drain<'_, T, N>

Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
Source§

fn next_chunk<const N: usize>( + &mut self, +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn count(self) -> usize
where + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where + Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where + Self: Sized, + Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where + Self: Sized, + Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( + &mut self, +) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where + Self: Sized, + Self::Item: Try, + <Self::Item as Try>::Residual: Residual<B>, + B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
Source§

fn try_reduce<R>( + &mut self, + f: impl FnMut(Self::Item, Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where + Self: Sized, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
Source§

fn try_find<R>( + &mut self, + f: impl FnMut(&Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where + Self: Sized, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

Lexicographically compares the elements of this Iterator with those +of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where + Self: Sized, + Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more
Source§

impl<T: PrimInt, const N: usize> FusedIterator for Drain<'_, T, N>

Auto Trait Implementations§

§

impl<'a, T, const N: usize> Freeze for Drain<'a, T, N>

§

impl<'a, T, const N: usize> RefUnwindSafe for Drain<'a, T, N>
where + T: RefUnwindSafe,

§

impl<'a, T, const N: usize> Send for Drain<'a, T, N>
where + T: Send,

§

impl<'a, T, const N: usize> Sync for Drain<'a, T, N>
where + T: Sync,

§

impl<'a, T, const N: usize> Unpin for Drain<'a, T, N>

§

impl<'a, T, const N: usize> !UnwindSafe for Drain<'a, T, N>

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<I> IntoIterator for I
where + I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/struct.Intersection.html b/rbitset/struct.Intersection.html new file mode 100644 index 0000000..119a9b2 --- /dev/null +++ b/rbitset/struct.Intersection.html @@ -0,0 +1,239 @@ +Intersection in rbitset - Rust
rbitset

Struct Intersection

Source
pub struct Intersection<'a, T, U, const N: usize, const M: usize>
where + T: PrimInt + 'a, + U: PrimInt + 'a,
{ /* private fields */ }
Expand description

A lazy iterator producing elements in the intersection of BitSets.

+

This struct is created by the intersection method on BitSet. See its documentation for +more.

+

§Examples

+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+let mut intersection = a.intersection(&b);
+

Trait Implementations§

Source§

impl<'a, T, U, const N: usize, const M: usize> Clone for Intersection<'a, T, U, N, M>
where + T: PrimInt + 'a + Clone, + U: PrimInt + 'a + Clone,

Source§

fn clone(&self) -> Intersection<'a, T, U, N, M>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T, U, const N: usize, const M: usize> Debug for Intersection<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, T, U, const N: usize, const M: usize> Iterator for Intersection<'a, T, U, N, M>
where + T: PrimInt + 'a, + U: PrimInt + 'a,

Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
Source§

fn next_chunk<const N: usize>( + &mut self, +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn count(self) -> usize
where + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where + Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where + Self: Sized, + Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where + Self: Sized, + Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( + &mut self, +) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where + Self: Sized, + Self::Item: Try, + <Self::Item as Try>::Residual: Residual<B>, + B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
Source§

fn try_reduce<R>( + &mut self, + f: impl FnMut(Self::Item, Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where + Self: Sized, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
Source§

fn try_find<R>( + &mut self, + f: impl FnMut(&Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where + Self: Sized, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
1.0.0 · Source§

fn cycle(self) -> Cycle<Self>
where + Self: Sized + Clone,

Repeats an iterator endlessly. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

Lexicographically compares the elements of this Iterator with those +of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where + Self: Sized, + Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more
Source§

impl<T, U, const N: usize, const M: usize> FusedIterator for Intersection<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Auto Trait Implementations§

§

impl<'a, T, U, const N: usize, const M: usize> Freeze for Intersection<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for Intersection<'a, T, U, N, M>
where + U: RefUnwindSafe, + T: RefUnwindSafe,

§

impl<'a, T, U, const N: usize, const M: usize> Send for Intersection<'a, T, U, N, M>
where + U: Sync, + T: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Sync for Intersection<'a, T, U, N, M>
where + U: Sync, + T: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Unpin for Intersection<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for Intersection<'a, T, U, N, M>
where + U: RefUnwindSafe, + T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<I> IntoIterator for I
where + I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/struct.IntoIter.html b/rbitset/struct.IntoIter.html new file mode 100644 index 0000000..4489ac6 --- /dev/null +++ b/rbitset/struct.IntoIter.html @@ -0,0 +1,244 @@ +IntoIter in rbitset - Rust
rbitset

Struct IntoIter

Source
pub struct IntoIter<T, const N: usize>(/* private fields */);
Expand description

An owning iterator over the items of a BitSet.

+

This struct is created by the into_iter method on BitSet (provided by the +IntoIterator trait). See its documentation for more.

+

§Examples

+
use rbitset::BitSet16;
+
+let a = BitSet16::from_iter([1u8, 2, 3]);
+
+let mut iter = a.into_iter();
+

Trait Implementations§

Source§

impl<T: Clone, const N: usize> Clone for IntoIter<T, N>

Source§

fn clone(&self) -> IntoIter<T, N>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: PrimInt, const N: usize> Debug for IntoIter<T, N>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: PrimInt, const N: usize> DoubleEndedIterator for IntoIter<T, N>

Source§

fn next_back(&mut self) -> Option<Self::Item>

Removes and returns an element from the end of the iterator. Read more
Source§

fn advance_back_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator from the back by n elements. Read more
1.37.0 · Source§

fn nth_back(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element from the end of the iterator. Read more
1.27.0 · Source§

fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

This is the reverse version of Iterator::try_fold(): it takes +elements starting from the back of the iterator. Read more
1.27.0 · Source§

fn rfold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

An iterator method that reduces the iterator’s elements to a single, +final value, starting from the back. Read more
1.27.0 · Source§

fn rfind<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator from the back that satisfies a predicate. Read more
Source§

impl<T: PrimInt, const N: usize> ExactSizeIterator for IntoIter<T, N>

1.0.0 · Source§

fn len(&self) -> usize

Returns the exact remaining length of the iterator. Read more
Source§

fn is_empty(&self) -> bool

🔬This is a nightly-only experimental API. (exact_size_is_empty)
Returns true if the iterator is empty. Read more
Source§

impl<T: PrimInt, const N: usize> Iterator for IntoIter<T, N>

Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
Source§

fn next_chunk<const N: usize>( + &mut self, +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn count(self) -> usize
where + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where + Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where + Self: Sized, + Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where + Self: Sized, + Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( + &mut self, +) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where + Self: Sized, + Self::Item: Try, + <Self::Item as Try>::Residual: Residual<B>, + B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn partition_in_place<'a, T, P>(self, predicate: P) -> usize
where + T: 'a, + Self: Sized + DoubleEndedIterator<Item = &'a mut T>, + P: FnMut(&T) -> bool,

🔬This is a nightly-only experimental API. (iter_partition_in_place)
Reorders the elements of this iterator in-place according to the given predicate, +such that all those that return true precede all those that return false. +Returns the number of true elements found. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
Source§

fn try_reduce<R>( + &mut self, + f: impl FnMut(Self::Item, Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where + Self: Sized, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
Source§

fn try_find<R>( + &mut self, + f: impl FnMut(&Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where + Self: Sized, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn rposition<P>(&mut self, predicate: P) -> Option<usize>
where + P: FnMut(Self::Item) -> bool, + Self: Sized + ExactSizeIterator + DoubleEndedIterator,

Searches for an element in an iterator from the right, returning its +index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · Source§

fn rev(self) -> Rev<Self>
where + Self: Sized + DoubleEndedIterator,

Reverses an iterator’s direction. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
1.0.0 · Source§

fn cycle(self) -> Cycle<Self>
where + Self: Sized + Clone,

Repeats an iterator endlessly. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

Lexicographically compares the elements of this Iterator with those +of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where + Self: Sized, + Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more
Source§

impl<T: PrimInt, const N: usize> FusedIterator for IntoIter<T, N>

Auto Trait Implementations§

§

impl<T, const N: usize> Freeze for IntoIter<T, N>
where + T: Freeze,

§

impl<T, const N: usize> RefUnwindSafe for IntoIter<T, N>
where + T: RefUnwindSafe,

§

impl<T, const N: usize> Send for IntoIter<T, N>
where + T: Send,

§

impl<T, const N: usize> Sync for IntoIter<T, N>
where + T: Sync,

§

impl<T, const N: usize> Unpin for IntoIter<T, N>
where + T: Unpin,

§

impl<T, const N: usize> UnwindSafe for IntoIter<T, N>
where + T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<I> IntoIterator for I
where + I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/struct.Iter.html b/rbitset/struct.Iter.html new file mode 100644 index 0000000..e40add0 --- /dev/null +++ b/rbitset/struct.Iter.html @@ -0,0 +1,243 @@ +Iter in rbitset - Rust
rbitset

Struct Iter

Source
pub struct Iter<'a, T, const N: usize> { /* private fields */ }
Expand description

An iterator over the items of a BitSet.

+

This struct is created by the iter method on BitSet. See its documentation for more.

+

§Examples

+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+
+let mut iter = a.iter();
+

Trait Implementations§

Source§

impl<'a, T: Clone, const N: usize> Clone for Iter<'a, T, N>

Source§

fn clone(&self) -> Iter<'a, T, N>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: PrimInt, const N: usize> Debug for Iter<'_, T, N>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: PrimInt, const N: usize> DoubleEndedIterator for Iter<'_, T, N>

Source§

fn next_back(&mut self) -> Option<Self::Item>

Removes and returns an element from the end of the iterator. Read more
Source§

fn advance_back_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator from the back by n elements. Read more
1.37.0 · Source§

fn nth_back(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element from the end of the iterator. Read more
1.27.0 · Source§

fn try_rfold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

This is the reverse version of Iterator::try_fold(): it takes +elements starting from the back of the iterator. Read more
1.27.0 · Source§

fn rfold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

An iterator method that reduces the iterator’s elements to a single, +final value, starting from the back. Read more
1.27.0 · Source§

fn rfind<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator from the back that satisfies a predicate. Read more
Source§

impl<T: PrimInt, const N: usize> ExactSizeIterator for Iter<'_, T, N>

1.0.0 · Source§

fn len(&self) -> usize

Returns the exact remaining length of the iterator. Read more
Source§

fn is_empty(&self) -> bool

🔬This is a nightly-only experimental API. (exact_size_is_empty)
Returns true if the iterator is empty. Read more
Source§

impl<T: PrimInt, const N: usize> Iterator for Iter<'_, T, N>

Source§

fn next(&mut self) -> Option<Self::Item>

Iterator implementation for BitSet, guaranteed to remove and +return the items in ascending order

+
Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
Source§

fn next_chunk<const N: usize>( + &mut self, +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn count(self) -> usize
where + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where + Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where + Self: Sized, + Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where + Self: Sized, + Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( + &mut self, +) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where + Self: Sized, + Self::Item: Try, + <Self::Item as Try>::Residual: Residual<B>, + B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn partition_in_place<'a, T, P>(self, predicate: P) -> usize
where + T: 'a, + Self: Sized + DoubleEndedIterator<Item = &'a mut T>, + P: FnMut(&T) -> bool,

🔬This is a nightly-only experimental API. (iter_partition_in_place)
Reorders the elements of this iterator in-place according to the given predicate, +such that all those that return true precede all those that return false. +Returns the number of true elements found. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
Source§

fn try_reduce<R>( + &mut self, + f: impl FnMut(Self::Item, Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where + Self: Sized, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
Source§

fn try_find<R>( + &mut self, + f: impl FnMut(&Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where + Self: Sized, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn rposition<P>(&mut self, predicate: P) -> Option<usize>
where + P: FnMut(Self::Item) -> bool, + Self: Sized + ExactSizeIterator + DoubleEndedIterator,

Searches for an element in an iterator from the right, returning its +index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · Source§

fn rev(self) -> Rev<Self>
where + Self: Sized + DoubleEndedIterator,

Reverses an iterator’s direction. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
1.0.0 · Source§

fn cycle(self) -> Cycle<Self>
where + Self: Sized + Clone,

Repeats an iterator endlessly. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

Lexicographically compares the elements of this Iterator with those +of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where + Self: Sized, + Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more
Source§

impl<T: PrimInt, const N: usize> FusedIterator for Iter<'_, T, N>

Auto Trait Implementations§

§

impl<'a, T, const N: usize> Freeze for Iter<'a, T, N>

§

impl<'a, T, const N: usize> RefUnwindSafe for Iter<'a, T, N>
where + T: RefUnwindSafe,

§

impl<'a, T, const N: usize> Send for Iter<'a, T, N>
where + T: Sync,

§

impl<'a, T, const N: usize> Sync for Iter<'a, T, N>
where + T: Sync,

§

impl<'a, T, const N: usize> Unpin for Iter<'a, T, N>

§

impl<'a, T, const N: usize> UnwindSafe for Iter<'a, T, N>
where + T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<I> IntoIterator for I
where + I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/struct.SymmetricDifference.html b/rbitset/struct.SymmetricDifference.html new file mode 100644 index 0000000..37fa279 --- /dev/null +++ b/rbitset/struct.SymmetricDifference.html @@ -0,0 +1,239 @@ +SymmetricDifference in rbitset - Rust
rbitset

Struct SymmetricDifference

Source
pub struct SymmetricDifference<'a, T, U, const N: usize, const M: usize>
where + T: PrimInt + 'a, + U: PrimInt + 'a,
{ /* private fields */ }
Expand description

A lazy iterator producing elements in the symmetric difference of BitSets.

+

This struct is created by the symmetric_difference method on BitSet. See its +documentation for more.

+

§Examples

+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+let mut intersection = a.symmetric_difference(&b);
+

Trait Implementations§

Source§

impl<'a, T, U, const N: usize, const M: usize> Clone for SymmetricDifference<'a, T, U, N, M>
where + T: PrimInt + 'a + Clone, + U: PrimInt + 'a + Clone,

Source§

fn clone(&self) -> SymmetricDifference<'a, T, U, N, M>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T, U, const N: usize, const M: usize> Debug for SymmetricDifference<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, T, U, const N: usize, const M: usize> Iterator for SymmetricDifference<'a, T, U, N, M>
where + T: PrimInt + 'a, + U: PrimInt + 'a,

Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
Source§

fn next_chunk<const N: usize>( + &mut self, +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn count(self) -> usize
where + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where + Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where + Self: Sized, + Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where + Self: Sized, + Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( + &mut self, +) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where + Self: Sized, + Self::Item: Try, + <Self::Item as Try>::Residual: Residual<B>, + B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
Source§

fn try_reduce<R>( + &mut self, + f: impl FnMut(Self::Item, Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where + Self: Sized, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
Source§

fn try_find<R>( + &mut self, + f: impl FnMut(&Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where + Self: Sized, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
1.0.0 · Source§

fn cycle(self) -> Cycle<Self>
where + Self: Sized + Clone,

Repeats an iterator endlessly. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

Lexicographically compares the elements of this Iterator with those +of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where + Self: Sized, + Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more
Source§

impl<T, U, const N: usize, const M: usize> FusedIterator for SymmetricDifference<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Auto Trait Implementations§

§

impl<'a, T, U, const N: usize, const M: usize> Freeze for SymmetricDifference<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for SymmetricDifference<'a, T, U, N, M>
where + U: RefUnwindSafe, + T: RefUnwindSafe,

§

impl<'a, T, U, const N: usize, const M: usize> Send for SymmetricDifference<'a, T, U, N, M>
where + U: Sync, + T: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Sync for SymmetricDifference<'a, T, U, N, M>
where + U: Sync, + T: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Unpin for SymmetricDifference<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for SymmetricDifference<'a, T, U, N, M>
where + U: RefUnwindSafe, + T: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<I> IntoIterator for I
where + I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/struct.Union.html b/rbitset/struct.Union.html new file mode 100644 index 0000000..0801701 --- /dev/null +++ b/rbitset/struct.Union.html @@ -0,0 +1,234 @@ +Union in rbitset - Rust
rbitset

Struct Union

Source
pub struct Union<'a, T: PrimInt + 'a, U: PrimInt + 'a, const N: usize, const M: usize> { /* private fields */ }
Expand description

A lazy iterator producing elements in the union of BitSets.

+

This struct is created by the union method on BitSet. See its documentation for more.

+

§Examples

+
use rbitset::BitSet8;
+
+let a = BitSet8::from_iter([1u8, 2, 3]);
+let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+let mut union_iter = a.union(&b);
+

Trait Implementations§

Source§

impl<'a, T: Clone + PrimInt + 'a, U: Clone + PrimInt + 'a, const N: usize, const M: usize> Clone for Union<'a, T, U, N, M>

Source§

fn clone(&self) -> Union<'a, T, U, N, M>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T, U, const N: usize, const M: usize> Debug for Union<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, T, U, const N: usize, const M: usize> Iterator for Union<'a, T, U, N, M>
where + T: PrimInt + 'a, + U: PrimInt + 'a,

Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn next(&mut self) -> Option<Self::Item>

Advances the iterator and returns the next value. Read more
Source§

fn size_hint(&self) -> (usize, Option<usize>)

Returns the bounds on the remaining length of the iterator. Read more
Source§

fn next_chunk<const N: usize>( + &mut self, +) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_next_chunk)
Advances the iterator and returns an array containing the next N values. Read more
1.0.0 · Source§

fn count(self) -> usize
where + Self: Sized,

Consumes the iterator, counting the number of iterations and returning it. Read more
1.0.0 · Source§

fn last(self) -> Option<Self::Item>
where + Self: Sized,

Consumes the iterator, returning the last element. Read more
Source§

fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>

🔬This is a nightly-only experimental API. (iter_advance_by)
Advances the iterator by n elements. Read more
1.0.0 · Source§

fn nth(&mut self, n: usize) -> Option<Self::Item>

Returns the nth element of the iterator. Read more
1.28.0 · Source§

fn step_by(self, step: usize) -> StepBy<Self>
where + Self: Sized,

Creates an iterator starting at the same point, but stepping by +the given amount at each iteration. Read more
1.0.0 · Source§

fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator<Item = Self::Item>,

Takes two iterators and creates a new iterator over both in sequence. Read more
1.0.0 · Source§

fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>
where + Self: Sized, + U: IntoIterator,

‘Zips up’ two iterators into a single iterator of pairs. Read more
Source§

fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
where + Self: Sized, + Self::Item: Clone,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places a copy of separator between adjacent +items of the original iterator. Read more
Source§

fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
where + Self: Sized, + G: FnMut() -> Self::Item,

🔬This is a nightly-only experimental API. (iter_intersperse)
Creates a new iterator which places an item generated by separator +between adjacent items of the original iterator. Read more
1.0.0 · Source§

fn map<B, F>(self, f: F) -> Map<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> B,

Takes a closure and creates an iterator which calls that closure on each +element. Read more
1.21.0 · Source§

fn for_each<F>(self, f: F)
where + Self: Sized, + F: FnMut(Self::Item),

Calls a closure on each element of an iterator. Read more
1.0.0 · Source§

fn filter<P>(self, predicate: P) -> Filter<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator which uses a closure to determine if an element +should be yielded. Read more
1.0.0 · Source§

fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both filters and maps. Read more
1.0.0 · Source§

fn enumerate(self) -> Enumerate<Self>
where + Self: Sized,

Creates an iterator which gives the current iteration count as well as +the next value. Read more
1.0.0 · Source§

fn peekable(self) -> Peekable<Self>
where + Self: Sized,

Creates an iterator which can use the peek and peek_mut methods +to look at the next element of the iterator without consuming it. See +their documentation for more information. Read more
1.0.0 · Source§

fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that skips elements based on a predicate. Read more
1.0.0 · Source§

fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Creates an iterator that yields elements based on a predicate. Read more
1.57.0 · Source§

fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
where + Self: Sized, + P: FnMut(Self::Item) -> Option<B>,

Creates an iterator that both yields elements based on a predicate and maps. Read more
1.0.0 · Source§

fn skip(self, n: usize) -> Skip<Self>
where + Self: Sized,

Creates an iterator that skips the first n elements. Read more
1.0.0 · Source§

fn take(self, n: usize) -> Take<Self>
where + Self: Sized,

Creates an iterator that yields the first n elements, or fewer +if the underlying iterator ends sooner. Read more
1.0.0 · Source§

fn scan<St, B, F>(self, initial_state: St, f: F) -> Scan<Self, St, F>
where + Self: Sized, + F: FnMut(&mut St, Self::Item) -> Option<B>,

An iterator adapter which, like fold, holds internal state, but +unlike fold, produces a new iterator. Read more
1.0.0 · Source§

fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
where + Self: Sized, + U: IntoIterator, + F: FnMut(Self::Item) -> U,

Creates an iterator that works like map, but flattens nested structure. Read more
1.29.0 · Source§

fn flatten(self) -> Flatten<Self>
where + Self: Sized, + Self::Item: IntoIterator,

Creates an iterator that flattens nested structure. Read more
Source§

fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
where + Self: Sized, + F: FnMut(&[Self::Item; N]) -> R,

🔬This is a nightly-only experimental API. (iter_map_windows)
Calls the given function f for each contiguous window of size N over +self and returns an iterator over the outputs of f. Like slice::windows(), +the windows during mapping overlap as well. Read more
1.0.0 · Source§

fn fuse(self) -> Fuse<Self>
where + Self: Sized,

Creates an iterator which ends after the first None. Read more
1.0.0 · Source§

fn inspect<F>(self, f: F) -> Inspect<Self, F>
where + Self: Sized, + F: FnMut(&Self::Item),

Does something with each element of an iterator, passing the value on. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where + Self: Sized,

Borrows an iterator, rather than consuming it. Read more
1.0.0 · Source§

fn collect<B>(self) -> B
where + B: FromIterator<Self::Item>, + Self: Sized,

Transforms an iterator into a collection. Read more
Source§

fn try_collect<B>( + &mut self, +) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
where + Self: Sized, + Self::Item: Try, + <Self::Item as Try>::Residual: Residual<B>, + B: FromIterator<<Self::Item as Try>::Output>,

🔬This is a nightly-only experimental API. (iterator_try_collect)
Fallibly transforms an iterator into a collection, short circuiting if +a failure is encountered. Read more
Source§

fn collect_into<E>(self, collection: &mut E) -> &mut E
where + E: Extend<Self::Item>, + Self: Sized,

🔬This is a nightly-only experimental API. (iter_collect_into)
Collects all the items from an iterator into a collection. Read more
1.0.0 · Source§

fn partition<B, F>(self, f: F) -> (B, B)
where + Self: Sized, + B: Default + Extend<Self::Item>, + F: FnMut(&Self::Item) -> bool,

Consumes an iterator, creating two collections from it. Read more
Source§

fn is_partitioned<P>(self, predicate: P) -> bool
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_is_partitioned)
Checks if the elements of this iterator are partitioned according to the given predicate, +such that all those that return true precede all those that return false. Read more
1.27.0 · Source§

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where + Self: Sized, + F: FnMut(B, Self::Item) -> R, + R: Try<Output = B>,

An iterator method that applies a function as long as it returns +successfully, producing a single, final value. Read more
1.27.0 · Source§

fn try_for_each<F, R>(&mut self, f: F) -> R
where + Self: Sized, + F: FnMut(Self::Item) -> R, + R: Try<Output = ()>,

An iterator method that applies a fallible function to each item in the +iterator, stopping at the first error and returning that error. Read more
1.0.0 · Source§

fn fold<B, F>(self, init: B, f: F) -> B
where + Self: Sized, + F: FnMut(B, Self::Item) -> B,

Folds every element into an accumulator by applying an operation, +returning the final result. Read more
1.51.0 · Source§

fn reduce<F>(self, f: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(Self::Item, Self::Item) -> Self::Item,

Reduces the elements to a single one, by repeatedly applying a reducing +operation. Read more
Source§

fn try_reduce<R>( + &mut self, + f: impl FnMut(Self::Item, Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
where + Self: Sized, + R: Try<Output = Self::Item>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (iterator_try_reduce)
Reduces the elements to a single one by repeatedly applying a reducing operation. If the +closure returns a failure, the failure is propagated back to the caller immediately. Read more
1.0.0 · Source§

fn all<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if every element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn any<F>(&mut self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> bool,

Tests if any element of the iterator matches a predicate. Read more
1.0.0 · Source§

fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
where + Self: Sized, + P: FnMut(&Self::Item) -> bool,

Searches for an element of an iterator that satisfies a predicate. Read more
1.30.0 · Source§

fn find_map<B, F>(&mut self, f: F) -> Option<B>
where + Self: Sized, + F: FnMut(Self::Item) -> Option<B>,

Applies function to the elements of iterator and returns +the first non-none result. Read more
Source§

fn try_find<R>( + &mut self, + f: impl FnMut(&Self::Item) -> R, +) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
where + Self: Sized, + R: Try<Output = bool>, + <R as Try>::Residual: Residual<Option<Self::Item>>,

🔬This is a nightly-only experimental API. (try_find)
Applies function to the elements of iterator and returns +the first true result or the first error. Read more
1.0.0 · Source§

fn position<P>(&mut self, predicate: P) -> Option<usize>
where + Self: Sized, + P: FnMut(Self::Item) -> bool,

Searches for an element in an iterator, returning its index. Read more
1.0.0 · Source§

fn max(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the maximum element of an iterator. Read more
1.0.0 · Source§

fn min(self) -> Option<Self::Item>
where + Self: Sized, + Self::Item: Ord,

Returns the minimum element of an iterator. Read more
1.6.0 · Source§

fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the maximum value from the +specified function. Read more
1.15.0 · Source§

fn max_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the maximum value with respect to the +specified comparison function. Read more
1.6.0 · Source§

fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
where + B: Ord, + Self: Sized, + F: FnMut(&Self::Item) -> B,

Returns the element that gives the minimum value from the +specified function. Read more
1.15.0 · Source§

fn min_by<F>(self, compare: F) -> Option<Self::Item>
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> Ordering,

Returns the element that gives the minimum value with respect to the +specified comparison function. Read more
1.0.0 · Source§

fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
where + FromA: Default + Extend<A>, + FromB: Default + Extend<B>, + Self: Sized + Iterator<Item = (A, B)>,

Converts an iterator of pairs into a pair of containers. Read more
1.36.0 · Source§

fn copied<'a, T>(self) -> Copied<Self>
where + T: 'a + Copy, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which copies all of its elements. Read more
1.0.0 · Source§

fn cloned<'a, T>(self) -> Cloned<Self>
where + T: 'a + Clone, + Self: Sized + Iterator<Item = &'a T>,

Creates an iterator which clones all of its elements. Read more
1.0.0 · Source§

fn cycle(self) -> Cycle<Self>
where + Self: Sized + Clone,

Repeats an iterator endlessly. Read more
Source§

fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>
where + Self: Sized,

🔬This is a nightly-only experimental API. (iter_array_chunks)
Returns an iterator over N elements of the iterator at a time. Read more
1.11.0 · Source§

fn sum<S>(self) -> S
where + Self: Sized, + S: Sum<Self::Item>,

Sums the elements of an iterator. Read more
1.11.0 · Source§

fn product<P>(self) -> P
where + Self: Sized, + P: Product<Self::Item>,

Iterates over the entire iterator, multiplying all the elements Read more
1.5.0 · Source§

fn cmp<I>(self, other: I) -> Ordering
where + I: IntoIterator<Item = Self::Item>, + Self::Item: Ord, + Self: Sized,

Lexicographically compares the elements of this Iterator with those +of another. Read more
Source§

fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Ordering,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn partial_cmp<I>(self, other: I) -> Option<Ordering>
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Lexicographically compares the PartialOrd elements of +this Iterator with those of another. The comparison works like short-circuit +evaluation, returning a result without comparing the remaining elements. +As soon as an order can be determined, the evaluation stops and a result is returned. Read more
Source§

fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,

🔬This is a nightly-only experimental API. (iter_order_by)
Lexicographically compares the elements of this Iterator with those +of another with respect to the specified comparison function. Read more
1.5.0 · Source§

fn eq<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are equal to those of +another. Read more
Source§

fn eq_by<I, F>(self, other: I, eq: F) -> bool
where + Self: Sized, + I: IntoIterator, + F: FnMut(Self::Item, <I as IntoIterator>::Item) -> bool,

🔬This is a nightly-only experimental API. (iter_order_by)
Determines if the elements of this Iterator are equal to those of +another with respect to the specified equality function. Read more
1.5.0 · Source§

fn ne<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialEq<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are not equal to those of +another. Read more
1.5.0 · Source§

fn lt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less than those of another. Read more
1.5.0 · Source§

fn le<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +less or equal to those of another. Read more
1.5.0 · Source§

fn gt<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than those of another. Read more
1.5.0 · Source§

fn ge<I>(self, other: I) -> bool
where + I: IntoIterator, + Self::Item: PartialOrd<<I as IntoIterator>::Item>, + Self: Sized,

Determines if the elements of this Iterator are lexicographically +greater than or equal to those of another. Read more
1.82.0 · Source§

fn is_sorted(self) -> bool
where + Self: Sized, + Self::Item: PartialOrd,

Checks if the elements of this iterator are sorted. Read more
1.82.0 · Source§

fn is_sorted_by<F>(self, compare: F) -> bool
where + Self: Sized, + F: FnMut(&Self::Item, &Self::Item) -> bool,

Checks if the elements of this iterator are sorted using the given comparator function. Read more
1.82.0 · Source§

fn is_sorted_by_key<F, K>(self, f: F) -> bool
where + Self: Sized, + F: FnMut(Self::Item) -> K, + K: PartialOrd,

Checks if the elements of this iterator are sorted using the given key extraction +function. Read more
Source§

impl<T, U, const N: usize, const M: usize> FusedIterator for Union<'_, T, U, N, M>
where + T: PrimInt, + U: PrimInt,

Auto Trait Implementations§

§

impl<'a, T, U, const N: usize, const M: usize> Freeze for Union<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for Union<'a, T, U, N, M>
where + T: RefUnwindSafe, + U: RefUnwindSafe,

§

impl<'a, T, U, const N: usize, const M: usize> Send for Union<'a, T, U, N, M>
where + T: Sync, + U: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Sync for Union<'a, T, U, N, M>
where + T: Sync, + U: Sync,

§

impl<'a, T, U, const N: usize, const M: usize> Unpin for Union<'a, T, U, N, M>

§

impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for Union<'a, T, U, N, M>
where + T: RefUnwindSafe, + U: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where + T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where + T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where + T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

+
Source§

impl<T, U> Into<U> for T
where + U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
Source§

impl<I> IntoIterator for I
where + I: Iterator,

Source§

type Item = <I as Iterator>::Item

The type of the elements being iterated over.
Source§

type IntoIter = I

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> I

Creates an iterator from a value. Read more
Source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/rbitset/type.BitSet1024.html b/rbitset/type.BitSet1024.html new file mode 100644 index 0000000..62a7061 --- /dev/null +++ b/rbitset/type.BitSet1024.html @@ -0,0 +1,2 @@ +BitSet1024 in rbitset - Rust
rbitset

Type Alias BitSet1024

Source
pub type BitSet1024 = BitSet<u64, 16>;
Expand description

A bit set able to hold up to 1024 elements.

+

Aliased Type§

struct BitSet1024 { /* private fields */ }
\ No newline at end of file diff --git a/rbitset/type.BitSet128.html b/rbitset/type.BitSet128.html new file mode 100644 index 0000000..85755a5 --- /dev/null +++ b/rbitset/type.BitSet128.html @@ -0,0 +1,2 @@ +BitSet128 in rbitset - Rust
rbitset

Type Alias BitSet128

Source
pub type BitSet128 = BitSet<u64, 2>;
Expand description

A bit set able to hold up to 128 elements.

+

Aliased Type§

struct BitSet128 { /* private fields */ }
\ No newline at end of file diff --git a/rbitset/type.BitSet16.html b/rbitset/type.BitSet16.html new file mode 100644 index 0000000..99e8076 --- /dev/null +++ b/rbitset/type.BitSet16.html @@ -0,0 +1,2 @@ +BitSet16 in rbitset - Rust
rbitset

Type Alias BitSet16

Source
pub type BitSet16 = BitSet<u16, 1>;
Expand description

A bit set able to hold up to 16 elements.

+

Aliased Type§

struct BitSet16 { /* private fields */ }
\ No newline at end of file diff --git a/rbitset/type.BitSet256.html b/rbitset/type.BitSet256.html new file mode 100644 index 0000000..37e8cde --- /dev/null +++ b/rbitset/type.BitSet256.html @@ -0,0 +1,2 @@ +BitSet256 in rbitset - Rust
rbitset

Type Alias BitSet256

Source
pub type BitSet256 = BitSet<u64, 4>;
Expand description

A bit set able to hold up to 256 elements.

+

Aliased Type§

struct BitSet256 { /* private fields */ }
\ No newline at end of file diff --git a/rbitset/type.BitSet32.html b/rbitset/type.BitSet32.html new file mode 100644 index 0000000..d510c01 --- /dev/null +++ b/rbitset/type.BitSet32.html @@ -0,0 +1,2 @@ +BitSet32 in rbitset - Rust
rbitset

Type Alias BitSet32

Source
pub type BitSet32 = BitSet<u32, 1>;
Expand description

A bit set able to hold up to 32 elements.

+

Aliased Type§

struct BitSet32 { /* private fields */ }
\ No newline at end of file diff --git a/rbitset/type.BitSet512.html b/rbitset/type.BitSet512.html new file mode 100644 index 0000000..4460a24 --- /dev/null +++ b/rbitset/type.BitSet512.html @@ -0,0 +1,2 @@ +BitSet512 in rbitset - Rust
rbitset

Type Alias BitSet512

Source
pub type BitSet512 = BitSet<u64, 8>;
Expand description

A bit set able to hold up to 512 elements.

+

Aliased Type§

struct BitSet512 { /* private fields */ }
\ No newline at end of file diff --git a/rbitset/type.BitSet64.html b/rbitset/type.BitSet64.html new file mode 100644 index 0000000..3d151e6 --- /dev/null +++ b/rbitset/type.BitSet64.html @@ -0,0 +1,2 @@ +BitSet64 in rbitset - Rust
rbitset

Type Alias BitSet64

Source
pub type BitSet64 = BitSet<u64, 1>;
Expand description

A bit set able to hold up to 64 elements.

+

Aliased Type§

struct BitSet64 { /* private fields */ }
\ No newline at end of file diff --git a/rbitset/type.BitSet8.html b/rbitset/type.BitSet8.html new file mode 100644 index 0000000..fa73803 --- /dev/null +++ b/rbitset/type.BitSet8.html @@ -0,0 +1,2 @@ +BitSet8 in rbitset - Rust
rbitset

Type Alias BitSet8

Source
pub type BitSet8 = BitSet<u8, 1>;
Expand description

A bit set able to hold up to 8 elements.

+

Aliased Type§

struct BitSet8 { /* private fields */ }
\ No newline at end of file diff --git a/search-index.js b/search-index.js new file mode 100644 index 0000000..3b6e404 --- /dev/null +++ b/search-index.js @@ -0,0 +1,4 @@ +var searchIndex = new Map(JSON.parse('[["num_traits",{"t":"EEEEEEEEEEEEEPEEGEEREPEEKKKKEKKEFEEKEEEEEEEEEEEEEEEEENNNNCCEEHHHCNNNNNMCCNNOECCECENNNNNNEKKKMMMMKKKKMHMNNNNNMNNNNNMNNNNNNNMNNNNNMNNMMMMMMMMMMKKMMNMNMMMNKNNNMMNNMMNNNNNNNNMNMMMMMNNNNMMMNKKTKTKNMHMNNHMKMMMMNMMNMMMMMMMNMMMCCCCCCCCRRKKKMMNMMNKKKKKKKKMMMMMMMMKKMNMMNMKRMKKRMMKKKMMMKKKKMMMMMKKKKKKMMMMMMRKHHMKKHMHMMMHM","n":["AsPrimitive","Bounded","CheckedAdd","CheckedDiv","CheckedEuclid","CheckedMul","CheckedNeg","CheckedRem","CheckedShl","CheckedShr","CheckedSub","ConstOne","ConstZero","Empty","Euclid","FloatConst","FloatErrorKind","FromBytes","FromPrimitive","FromStrRadixErr","Inv","Invalid","MulAdd","MulAddAssign","Num","NumAssign","NumAssignOps","NumAssignRef","NumCast","NumOps","NumRef","One","ParseFloatError","Pow","PrimInt","RefNum","Saturating","SaturatingAdd","SaturatingMul","SaturatingSub","Signed","ToBytes","ToPrimitive","Unsigned","WrappingAdd","WrappingMul","WrappingNeg","WrappingShl","WrappingShr","WrappingSub","Zero","abs","abs_sub","borrow","","borrow_mut","","bounds","cast","","checked_pow","clamp","clamp_max","clamp_min","float","fmt","","","from","","from_str_radix","identities","int","into","","kind","one","ops","pow","","sign","signum","try_from","","try_into","","type_id","","zero","Bounded","LowerBounded","UpperBounded","max_value","","min_value","","AsPrimitive","FromPrimitive","NumCast","ToPrimitive","as_","cast","from","from_f32","from_f64","from_i128","from_i16","from_i32","from_i64","from_i8","from_isize","from_u128","from_u16","from_u32","from_u64","from_u8","from_usize","to_f32","to_f64","to_i128","to_i16","to_i32","to_i64","to_i8","to_isize","to_u128","to_u16","to_u32","to_u64","to_u8","to_usize","E","FRAC_1_PI","FRAC_1_SQRT_2","FRAC_2_PI","FRAC_2_SQRT_PI","FRAC_PI_2","FRAC_PI_3","FRAC_PI_4","FRAC_PI_6","FRAC_PI_8","FloatConst","FloatCore","LN_10","LN_2","LOG10_2","LOG10_E","LOG2_10","LOG2_E","PI","SQRT_2","TAU","TotalOrder","abs","ceil","clamp","classify","epsilon","floor","fract","infinity","integer_decode","is_finite","is_infinite","is_nan","is_normal","is_sign_negative","is_sign_positive","is_subnormal","max","max_value","min","min_positive_value","min_value","nan","neg_infinity","neg_zero","powi","recip","round","signum","to_degrees","to_radians","total_cmp","trunc","ConstOne","ConstZero","ONE","One","ZERO","Zero","is_one","is_zero","one","","set_one","set_zero","zero","","PrimInt","count_ones","count_zeros","from_be","from_le","leading_ones","leading_zeros","pow","reverse_bits","rotate_left","rotate_right","signed_shl","signed_shr","swap_bytes","to_be","to_le","trailing_ones","trailing_zeros","unsigned_shl","unsigned_shr","bytes","checked","euclid","inv","mul_add","overflowing","saturating","wrapping","Bytes","","FromBytes","NumBytes","ToBytes","from_be_bytes","from_le_bytes","from_ne_bytes","to_be_bytes","to_le_bytes","to_ne_bytes","CheckedAdd","CheckedDiv","CheckedMul","CheckedNeg","CheckedRem","CheckedShl","CheckedShr","CheckedSub","checked_add","checked_div","checked_mul","checked_neg","checked_rem","checked_shl","checked_shr","checked_sub","CheckedEuclid","Euclid","checked_div_euclid","checked_div_rem_euclid","checked_rem_euclid","div_euclid","div_rem_euclid","rem_euclid","Inv","Output","inv","MulAdd","MulAddAssign","Output","mul_add","mul_add_assign","OverflowingAdd","OverflowingMul","OverflowingSub","overflowing_add","overflowing_mul","overflowing_sub","Saturating","SaturatingAdd","SaturatingMul","SaturatingSub","saturating_add","","saturating_mul","saturating_sub","","WrappingAdd","WrappingMul","WrappingNeg","WrappingShl","WrappingShr","WrappingSub","wrapping_add","wrapping_mul","wrapping_neg","wrapping_shl","wrapping_shr","wrapping_sub","Output","Pow","checked_pow","pow","","Signed","Unsigned","abs","","abs_sub","","is_negative","is_positive","signum",""],"q":[[0,"num_traits"],[89,"num_traits::bounds"],[96,"num_traits::cast"],[131,"num_traits::float"],[185,"num_traits::identities"],[199,"num_traits::int"],[219,"num_traits::ops"],[227,"num_traits::ops::bytes"],[238,"num_traits::ops::checked"],[254,"num_traits::ops::euclid"],[262,"num_traits::ops::inv"],[265,"num_traits::ops::mul_add"],[270,"num_traits::ops::overflowing"],[276,"num_traits::ops::saturating"],[285,"num_traits::ops::wrapping"],[297,"num_traits::pow"],[302,"num_traits::sign"],[312,"core::cmp"],[313,"core::fmt"],[314,"core::result"],[315,"core::any"],[316,"core::marker"],[317,"core::option"],[318,"core::num"],[319,"core::clone"],[320,"core::ops::arith"]],"i":"`````````````h`````Af`1```````````````````````````````1n20````````200201``200``````202020````AlAn1B`````Bb`BhBn0000000000000Bj0000000000000Dh000000000``000000000`Dj00000000000000000000000000000Eb1``Jf`Jh`EfEh`110`0`El000000000000000000````````FfF````000111````````FhFjFlFnG`GbGdGf``Gh00Gj00`Gn0``H`0Hb```HdHfHh````HjHlHn2I```````IbIdIfIhIjIlJb```0```Jd`000`0","f":"`````````````````````````````````````````````````````{b{{b{c}}}{}}0{{{b{d}}}{{b{dc}}}{}}0````{{ccc}cf}{{cc}cf}0`{{{b{h}}{b{dj}}}l}{{{b{n}}{b{dj}}}l}0{cc{}}0{{{b{A`}}Ab}{{Ah{{Af{}{{Ad{c}}}}c}}}{}}``{{}c{}}0```````{c{{Ah{e}}}{}{}}0{{}{{Ah{c}}}{}}0{bAj}0````{{}Al}{{}An}1{{}B`}````{BbcBd}{c{{Bf{e}}}BhBh}{c{{Bf{Bh}}}Bj}{Bl{{Bf{Bn}}}}{C`{{Bf{Bn}}}}{Cb{{Bf{Bn}}}}{Cd{{Bf{Bn}}}}{Cf{{Bf{Bn}}}}{Ch{{Bf{Bn}}}}{Cj{{Bf{Bn}}}}{Cl{{Bf{Bn}}}}{Cn{{Bf{Bn}}}}{D`{{Bf{Bn}}}}{Ab{{Bf{Bn}}}}{Db{{Bf{Bn}}}}{Dd{{Bf{Bn}}}}{Df{{Bf{Bn}}}}{{{b{Bj}}}{{Bf{Bl}}}}{{{b{Bj}}}{{Bf{C`}}}}{{{b{Bj}}}{{Bf{Cb}}}}{{{b{Bj}}}{{Bf{Cd}}}}{{{b{Bj}}}{{Bf{Cf}}}}{{{b{Bj}}}{{Bf{Ch}}}}{{{b{Bj}}}{{Bf{Cj}}}}{{{b{Bj}}}{{Bf{Cl}}}}{{{b{Bj}}}{{Bf{Cn}}}}{{{b{Bj}}}{{Bf{D`}}}}{{{b{Bj}}}{{Bf{Ab}}}}{{{b{Bj}}}{{Bf{Db}}}}{{{b{Bj}}}{{Bf{Dd}}}}{{{b{Bj}}}{{Bf{Df}}}}{{}Dh}000000000``000000000`{DjDj}0{{DjDjDj}Dj}{DjDl}{{}Dj}330{Dj{{Dn{DbCdCj}}}}{DjE`}000000{{DjDj}Dj}3033333{{DjCf}Dj}77777{{{b{Eb}}{b{Eb}}}Ed}8``````{{{b{Ef}}}E`}{{{b{Eh}}}E`}{{}cEf}{{}Ef}{{{b{dEf}}}Ej}{{{b{dEh}}}Ej}{{}cEh}{{}Eh}`{ElAb}0{ElEl}011{{ElAb}El}100001112200`````````````{{{b{c}}}{{F`{}{{En{c}}}}}{FbFd}}00{{{b{{Ff{}{{En{c}}}}}}}cFb}00````````{{{b{Fh}}{b{Fh}}}{{Bf{Fh}}}}{{{b{Fj}}{b{Fj}}}{{Bf{Fj}}}}{{{b{Fl}}{b{Fl}}}{{Bf{Fl}}}}{{{b{Fn}}}{{Bf{Fn}}}}{{{b{G`}}{b{G`}}}{{Bf{G`}}}}{{{b{Gb}}Ab}{{Bf{Gb}}}}{{{b{Gd}}Ab}{{Bf{Gd}}}}{{{b{Gf}}{b{Gf}}}{{Bf{Gf}}}}``{{{b{Gh}}{b{Gh}}}{{Bf{Gh}}}}{{{b{Gh}}{b{Gh}}}{{Bf{{Dn{GhGh}}}}}}1{{{b{Gj}}{b{Gj}}}Gj}{{{b{Gj}}{b{Gj}}}{{Dn{GjGj}}}}1``{{{Gn{}{{Gl{c}}}}}c{}}```{{{H`{}{{Gl{c}}}}eg}c{}{}{}}{{{b{dHb}}ce}Ej{}{}}```{{{b{Hd}}{b{Hd}}}{{Dn{HdE`}}}}{{{b{Hf}}{b{Hf}}}{{Dn{HfE`}}}}{{{b{Hh}}{b{Hh}}}{{Dn{HhE`}}}}````{{HjHj}Hj}{{{b{Hl}}{b{Hl}}}Hl}{{{b{Hn}}{b{Hn}}}Hn}2{{{b{I`}}{b{I`}}}I`}``````{{{b{Ib}}{b{Ib}}}Ib}{{{b{Id}}{b{Id}}}Id}{{{b{If}}}If}{{{b{Ih}}Ab}Ih}{{{b{Ij}}Ab}Ij}{{{b{Il}}{b{Il}}}Il}``{{cDf}{{Bf{c}}}{InEfFl}}{{cDf}c{InEf{J`{}{{Gl{}}}}}}{{{Jb{}{{Gl{c}}}}e}c{}{}}``{ccJd}{{{b{Jd}}}Jd}{{cc}cJd}{{{b{Jd}}{b{Jd}}}Jd}{{{b{Jd}}}E`}043","D":"AKn","p":[[1,"reference",null,null,1],[0,"mut"],[10,"PartialOrd",312],[6,"FloatErrorKind",0],[5,"Formatter",313],[8,"Result",313],[5,"ParseFloatError",0],[1,"str"],[1,"u32"],[17,"FromStrRadixErr"],[10,"Num",0],[6,"Result",314,null,1],[5,"TypeId",315],[10,"Bounded",89],[10,"UpperBounded",89],[10,"LowerBounded",89],[10,"AsPrimitive",96],[10,"Copy",316],[6,"Option",317,null,1],[10,"NumCast",96],[10,"ToPrimitive",96],[1,"f32"],[10,"FromPrimitive",96],[1,"f64"],[1,"i128"],[1,"i16"],[1,"i32"],[1,"i64"],[1,"i8"],[1,"isize"],[1,"u128"],[1,"u16"],[1,"u64"],[1,"u8"],[1,"usize"],[10,"FloatConst",131],[10,"FloatCore",131],[6,"FpCategory",318],[1,"tuple",null,null,1],[1,"bool"],[10,"TotalOrder",131],[6,"Ordering",312],[10,"One",185],[10,"Zero",185],[1,"unit"],[10,"PrimInt",199],[17,"Bytes"],[10,"FromBytes",227],[10,"NumBytes",227],[10,"Sized",316],[10,"ToBytes",227],[10,"CheckedAdd",238],[10,"CheckedDiv",238],[10,"CheckedMul",238],[10,"CheckedNeg",238],[10,"CheckedRem",238],[10,"CheckedShl",238],[10,"CheckedShr",238],[10,"CheckedSub",238],[10,"CheckedEuclid",254],[10,"Euclid",254],[17,"Output"],[10,"Inv",262],[10,"MulAdd",265],[10,"MulAddAssign",265],[10,"OverflowingAdd",270],[10,"OverflowingMul",270],[10,"OverflowingSub",270],[10,"Saturating",276],[10,"SaturatingAdd",276],[10,"SaturatingMul",276],[10,"SaturatingSub",276],[10,"WrappingAdd",285],[10,"WrappingMul",285],[10,"WrappingNeg",285],[10,"WrappingShl",285],[10,"WrappingShr",285],[10,"WrappingSub",285],[10,"Clone",319],[10,"Mul",320],[10,"Pow",297],[10,"Signed",302],[10,"ConstOne",185],[10,"ConstZero",185]],"r":[[0,96],[1,89],[2,238],[3,238],[4,254],[5,238],[6,238],[7,238],[8,238],[9,238],[10,238],[11,185],[12,185],[14,254],[15,131],[17,227],[18,96],[20,262],[22,265],[23,265],[28,96],[31,185],[33,297],[34,199],[36,276],[37,276],[38,276],[39,276],[40,302],[41,227],[42,96],[43,302],[44,285],[45,285],[46,285],[47,285],[48,285],[49,285],[50,185],[51,302],[52,302],[59,96],[60,297],[76,185],[79,297],[81,302],[88,185]],"b":[[66,"impl-Display-for-ParseFloatError"],[67,"impl-Debug-for-ParseFloatError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAFkACgABABcAHQAAACAAAwAlABgAQQADAEgAAQBMAA0AjgAAANwADAD/AAEA","P":[[53,"T"],[65,""],[68,"T"],[70,"Num::FromStrRadixErr"],[73,"U"],[82,"U,T"],[84,"U"],[86,""],[100,"T"],[101,"T,U"],[102,"T"],[103,""],[193,"T"],[194,""],[197,"T"],[198,""],[232,"FromBytes::Bytes"],[235,"ToBytes::Bytes"],[246,""],[264,"Inv::Output"],[268,"MulAdd::Output,A,B"],[269,"A,B"],[273,""],[299,"T"],[301,"Pow::Output,RHS"],[304,"T"],[305,""],[306,"T"],[307,""],[310,"T"],[311,""]]}],["rbitset",{"t":"PFIIIIIIIIGFFFFFFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN","n":["BiggerThanCapacity","BitSet","BitSet1024","BitSet128","BitSet16","BitSet256","BitSet32","BitSet512","BitSet64","BitSet8","BitSetError","Difference","Drain","Intersection","IntoIter","Iter","SymmetricDifference","Union","append","borrow","","","","","","","","","borrow_mut","","","","","","","","","capacity","clear","clone","","","","","","","","clone_to_uninit","","","","","","","","cmp","contains","count_ones","count_zeros","default","difference","drain","eq","","extend","fill","fmt","","","","","","","","","","","from","","","","","","","","","","from_iter","from_ref","hash","insert","insert_unchecked","intersection","into","","","","","","","","","into_inner","into_iter","","","","","","","","","is_disjoint","is_empty","is_subset","is_superset","iter","len","","new","","","","","","","","","","","","next","","","","","","","next_back","","not","partial_cmp","remove","remove_unchecked","retain","size_hint","","","","","","","symmetric_difference","try_append","try_contains","try_from","","","","","","","","","try_insert","try_into","","","","","","","","","try_remove","type_id","","","","","","","","","union","with_default"],"q":[[0,"rbitset"],[186,"num_traits::int"],[187,"core::default"],[188,"core::clone"],[189,"core::cmp"],[190,"core::convert"],[191,"core::iter::traits::collect"],[192,"core::ops::range"],[193,"core::fmt"],[194,"core::marker"],[195,"core::hash"],[196,"core::option"],[197,"core::ops::function"],[198,"core::result"],[199,"core::any"]],"i":"Ab`````````````````dBh12AdAfAhAjAlAn67854321077785432107854321087777777877677885432106778543210778777678543210767754321077777677777777777776543210547877765432107776785432107678543210767854321077","f":"``````````````````{{{f{b{d{c}}}}{f{b{d{e}}}}}hjj}{f{{f{c}}}{}}00000000{{{f{b}}}{{f{bc}}}{}}00000000{{}l}{{{f{b{d{c}}}}}h{jn}}{{{f{{d{c}}}}}{{d{c}}}A`}{{{f{Ab}}}Ab}{{{f{{Ad{c}}}}}{{Ad{c}}}A`}{{{f{{Af{c}}}}}{{Af{c}}}A`}{{{f{{Ah{ce}}}}}{{Ah{ce}}}{A`j}{A`j}}{{{f{{Aj{ce}}}}}{{Aj{ce}}}{jA`}{jA`}}{{{f{{Al{ce}}}}}{{Al{ce}}}{A`j}{A`j}}{{{f{{An{ce}}}}}{{An{ce}}}{jA`}{jA`}}{{fB`}h}0000000{{{f{Ab}}{f{Ab}}}Bb}{{{f{{d{c}}}}l}Bdj}{{{f{{d{c}}}}}Bfj}0{{}{{d{c}}}{jn}}{{{f{{d{c}}}}{f{{d{e}}}}}{{Ah{ce}}}jj}{{{f{b{d{c}}}}}{{Bh{c}}}j}{{{f{{d{c}}}}{f{{d{c}}}}}BdBj}{{{f{Ab}}{f{Ab}}}Bd}{{{f{b{d{c}}}}g}hj{{Bl{l}}}{{C`{}{{Bn{e}}}}}}{{{f{b{d{c}}}}eBd}h{nj}{{Cb{l}}}}{{{f{{Bh{c}}}}{f{bCd}}}Cfj}{{{f{{d{c}}}}{f{bCd}}}Cf{ChCj}}{{{f{{d{c}}}}{f{bCd}}}Cfj}{{{f{Ab}}{f{bCd}}}Cf}0{{{f{{Ad{c}}}}{f{bCd}}}Cfj}{{{f{{Af{c}}}}{f{bCd}}}Cfj}{{{f{{Ah{ce}}}}{f{bCd}}}Cfjj}{{{f{{Aj{ce}}}}{f{bCd}}}Cfjj}{{{f{{Al{ce}}}}{f{bCd}}}Cfjj}{{{f{{An{ce}}}}{f{bCd}}}Cfjj}{cc{}}0{{{Cl{c}}}{{d{c}}}j}1111111{e{{d{g}}}{{Bl{l}}}{{C`{}{{Bn{c}}}}}{jn}}{{{f{b{Cl{c}}}}}{{f{b{d{c}}}}}j}{{{f{Ab}}{f{bc}}}hCn}{{{f{b{d{c}}}}l}Bdj}0{{{f{{d{c}}}}{f{{d{e}}}}}{{Aj{ce}}}jj}{{}c{}}00000000{{{d{c}}}{{Cl{c}}}{}}{{}c{}}{{{f{{d{c}}}}}ej{}}{{{d{c}}}ej{}}222222{{{f{{d{c}}}}{f{{d{e}}}}}Bdjj}{{{f{{d{c}}}}}Bdj}11{{{f{{d{c}}}}}{{Af{c}}}j}{{{f{{Bh{c}}}}}lj}{{{f{{d{c}}}}}lj}{{}{{d{D`}}}}{{}{{d{Db}}}}{{}{{d{Dd}}}}{{}{{d{B`}}}}{{}{{d{Bf}}}}{{}{{d{Df}}}}{{}{{d{Dh}}}}{{}{{d{Dj}}}}{{}{{d{Dl}}}}{{}{{d{l}}}}{{}{{d{Dn}}}}{{}{{d{E`}}}}{{{f{b{Bh{c}}}}}{{Eb{e}}}j{}}{{{f{b{Ad{c}}}}}{{Eb{e}}}j{}}{{{f{b{Af{c}}}}}{{Eb{e}}}j{}}{{{f{b{Ah{ce}}}}}{{Eb{g}}}jj{}}{{{f{b{Aj{ce}}}}}{{Eb{g}}}jj{}}{{{f{b{Al{ce}}}}}{{Eb{g}}}jj{}}{{{f{b{An{ce}}}}}{{Eb{g}}}jj{}}54{{{d{c}}}ej{}}{{{f{Ab}}{f{Ab}}}{{Eb{Bb}}}}{{{f{b{d{c}}}}l}Bdj}0{{{f{b{d{c}}}}e}hj{{Ef{l}{{Ed{Bd}}}}}}{{{f{{Bh{c}}}}}{{Eh{l{Eb{l}}}}}j}{{{f{{Ad{c}}}}}{{Eh{l{Eb{l}}}}}j}{{{f{{Af{c}}}}}{{Eh{l{Eb{l}}}}}j}{{{f{{Ah{ce}}}}}{{Eh{l{Eb{l}}}}}jj}{{{f{{Aj{ce}}}}}{{Eh{l{Eb{l}}}}}jj}{{{f{{Al{ce}}}}}{{Eh{l{Eb{l}}}}}jj}{{{f{{An{ce}}}}}{{Eh{l{Eb{l}}}}}jj}{{{f{{d{c}}}}{f{{d{e}}}}}{{An{ce}}}jj}{{{f{b{d{c}}}}{f{b{d{e}}}}}{{Ej{hAb}}}jj}{{{f{{d{c}}}}l}{{Ej{BdAb}}}j}{c{{Ej{e}}}{}{}}00000000{{{f{b{d{c}}}}l}{{Ej{BdAb}}}j}{{}{{Ej{c}}}{}}000000001{fEl}00000000{{{f{{d{c}}}}{f{{d{e}}}}}{{Al{ce}}}jj}{{}{{d{c}}}{jn}}","D":"In","p":[[0,"mut"],[5,"BitSet",0],[1,"reference",null,null,1],[1,"unit"],[10,"PrimInt",186],[1,"usize"],[10,"Default",187],[10,"Clone",188],[6,"BitSetError",0],[5,"IntoIter",0],[5,"Iter",0],[5,"Difference",0],[5,"Intersection",0],[5,"Union",0],[5,"SymmetricDifference",0],[1,"u8"],[6,"Ordering",189],[1,"bool"],[1,"u32"],[5,"Drain",0],[10,"PartialEq",189],[10,"Into",190],[17,"Item"],[10,"IntoIterator",191],[10,"RangeBounds",192],[5,"Formatter",193],[8,"Result",193],[10,"Copy",194],[10,"Binary",193],[1,"array"],[10,"Hasher",195],[1,"u16"],[1,"i16"],[1,"isize"],[1,"i8"],[1,"u64"],[1,"u128"],[1,"i32"],[1,"i128"],[1,"i64"],[6,"Option",196,null,1],[17,"Output"],[10,"FnMut",197],[1,"tuple",null,null,1],[6,"Result",198,null,1],[5,"TypeId",199]],"r":[],"b":[[67,"impl-Binary-for-BitSet%3CT,+N%3E"],[68,"impl-Debug-for-BitSet%3CT,+N%3E"],[69,"impl-Display-for-BitSetError"],[70,"impl-Debug-for-BitSetError"],[104,"impl-IntoIterator-for-%26BitSet%3CT,+N%3E"],[105,"impl-IntoIterator-for-BitSet%3CT,+N%3E"],[119,"impl-BitSet%3Cu16,+N%3E"],[120,"impl-BitSet%3Ci16,+N%3E"],[121,"impl-BitSet%3Cisize,+N%3E"],[122,"impl-BitSet%3Cu8,+N%3E"],[123,"impl-BitSet%3Cu32,+N%3E"],[124,"impl-BitSet%3Ci8,+N%3E"],[125,"impl-BitSet%3Cu64,+N%3E"],[126,"impl-BitSet%3Cu128,+N%3E"],[127,"impl-BitSet%3Ci32,+N%3E"],[128,"impl-BitSet%3Cusize,+N%3E"],[129,"impl-BitSet%3Ci128,+N%3E"],[130,"impl-BitSet%3Ci64,+N%3E"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAGsAEQAAAAAAFAARACgAEAA8AAAAPwACAEMACgBQAAAAWAAAAFoAAABoAAgAdgAAAIQAAQCHAAcAkgAGAJwACACmAAgAsAAIAA==","P":[[18,"T,U"],[19,"T"],[37,""],[38,"T"],[40,""],[41,"T"],[43,"T,U"],[47,""],[56,"T"],[60,"T,U"],[61,"T"],[63,""],[64,"T,U,I"],[65,"T,R"],[66,"T"],[69,""],[71,"T"],[73,"T,U"],[77,"T"],[87,"U,I,T"],[88,"T"],[89,"__H"],[90,"T"],[92,"T,U"],[93,"U"],[102,"T"],[103,"I"],[104,"T,IntoIterator::IntoIter"],[106,"I"],[112,"T,U"],[113,"T"],[114,"T,U"],[116,"T"],[119,""],[131,"T,Iterator::Item"],[134,"T,U,Iterator::Item"],[138,"T,Iterator::Item"],[140,"T,Not::Output"],[141,""],[142,"T"],[144,"T,F"],[145,"T"],[148,"T,U"],[154,"T"],[155,"U,T"],[164,"T"],[165,"U"],[174,"T"],[175,""],[184,"T,U"],[185,"T"]]}]]')); +if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; +else if (window.initSearch) window.initSearch(searchIndex); +//{"start":39,"fragment_lengths":[9375,6292]} \ No newline at end of file diff --git a/search.desc/num_traits/num_traits-desc-0-.js b/search.desc/num_traits/num_traits-desc-0-.js new file mode 100644 index 0000000..c59643a --- /dev/null +++ b/search.desc/num_traits/num_traits-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("num_traits", 0, "Numeric traits for generic mathematics\nThe base trait for numeric types, covering 0 and 1 values, …\nThe trait for Num types which also implement assignment …\nGeneric trait for types implementing numeric assignment …\nThe trait for NumAssign types which also implement …\nGeneric trait for types implementing basic numeric …\nThe trait for Num types which also implement numeric …\nThe trait for Num references which implement numeric …\nA value bounded by a minimum and a maximum\nA value bounded by a maximum value\nA value bounded by a minimum value\nReturns the argument unchanged.\nReturns the argument unchanged.\nConvert from a string and radix (typically 2..=36).\nCalls U::from(self).\nCalls U::from(self).\nNumbers which have upper and lower bounds\nNumbers which have lower bounds\nNumbers which have upper bounds\nReturns the largest finite number this type can represent\nReturns the largest finite number this type can represent\nReturns the smallest finite number this type can represent\nReturns the smallest finite number this type can represent\nA generic interface for casting between machine scalars …\nA generic trait for converting a number to a value.\nAn interface for casting between machine scalars.\nA generic trait for converting a value to a number.\nConvert a value to another, using the as operator.\nCast from one machine scalar to another.\nCreates a number from another value that can be converted …\nConverts a f32 to return an optional value of this type. …\nConverts a f64 to return an optional value of this type. …\nConverts an i128 to return an optional value of this type. …\nConverts an i16 to return an optional value of this type. …\nConverts an i32 to return an optional value of this type. …\nConverts an i64 to return an optional value of this type. …\nConverts an i8 to return an optional value of this type. …\nConverts an isize to return an optional value of this …\nConverts an u128 to return an optional value of this type. …\nConverts an u16 to return an optional value of this type. …\nConverts an u32 to return an optional value of this type. …\nConverts an u64 to return an optional value of this type. …\nConverts an u8 to return an optional value of this type. …\nConverts a usize to return an optional value of this type. …\nConverts the value of self to an f32. Overflows may map to …\nConverts the value of self to an f64. Overflows may map to …\nConverts the value of self to an i128. If the value cannot …\nConverts the value of self to an i16. If the value cannot …\nConverts the value of self to an i32. If the value cannot …\nConverts the value of self to an i64. If the value cannot …\nConverts the value of self to an i8. If the value cannot be\nConverts the value of self to an isize. If the value …\nConverts the value of self to a u128. If the value cannot …\nConverts the value of self to a u16. If the value cannot be\nConverts the value of self to a u32. If the value cannot be\nConverts the value of self to a u64. If the value cannot be\nConverts the value of self to a u8. If the value cannot be …\nConverts the value of self to a usize. If the value cannot …\nReturn Euler’s number.\nReturn 1.0 / π.\nReturn 1.0 / sqrt(2.0).\nReturn 2.0 / π.\nReturn 2.0 / sqrt(π).\nReturn π / 2.0.\nReturn π / 3.0.\nReturn π / 4.0.\nReturn π / 6.0.\nReturn π / 8.0.\nGeneric trait for floating point numbers that works with …\nReturn ln(10.0).\nReturn ln(2.0).\nReturn log10(2.0).\nReturn log10(e).\nReturn log2(10.0).\nReturn log2(e).\nReturn Archimedes’ constant π.\nReturn sqrt(2.0).\nReturn the full circle constant τ.\nTrait for floating point numbers that provide an …\nComputes the absolute value of self. Returns …\nReturns the smallest integer greater than or equal to a …\nA value bounded by a minimum and a maximum\nReturns the floating point category of the number. If only …\nReturns epsilon, a small positive value.\nReturns the largest integer less than or equal to a number.\nReturns the fractional part of a number.\nReturns positive infinity.\nReturns the mantissa, base 2 exponent, and sign as …\nReturns true if the number is neither infinite or NaN.\nReturns true if the number is infinite.\nReturns true if the number is NaN.\nReturns true if the number is neither zero, infinite, …\nReturns true if self is negative, including -0.0 and …\nReturns true if self is positive, including +0.0 and …\nReturns true if the number is subnormal.\nReturns the maximum of the two numbers.\nReturns the largest finite value that this type can …\nReturns the minimum of the two numbers.\nReturns the smallest positive, normalized value that this …\nReturns the smallest finite value that this type can …\nReturns NaN.\nReturns negative infinity.\nReturns -0.0.\nRaise a number to an integer power.\nReturns the reciprocal (multiplicative inverse) of the …\nReturns the nearest integer to a number. Round half-way …\nReturns a number that represents the sign of self.\nConverts to degrees, assuming the number is in radians.\nConverts to radians, assuming the number is in degrees.\nReturn the ordering between self and other.\nReturn the integer part of a number.\nDefines an associated constant representing the …\nDefines an associated constant representing the additive …\nThe multiplicative identity element of Self, 1.\nDefines a multiplicative identity element for Self.\nThe additive identity element of Self, 0.\nDefines an additive identity element for Self.\nReturns true if self is equal to the multiplicative …\nReturns true if self is equal to the additive identity.\nReturns the multiplicative identity, 1.\nReturns the multiplicative identity element of Self, 1.\nSets self to the multiplicative identity element of Self, 1…\nSets self to the additive identity element of Self, 0.\nReturns the additive identity, 0.\nReturns the additive identity element of Self, 0.\nGeneric trait for primitive integers.\nReturns the number of ones in the binary representation of …\nReturns the number of zeros in the binary representation …\nConvert an integer from big endian to the target’s …\nConvert an integer from little endian to the target’s …\nReturns the number of leading ones in the binary …\nReturns the number of leading zeros in the binary …\nRaises self to the power of exp, using exponentiation by …\nReverses the order of bits in the integer.\nShifts the bits to the left by a specified amount, n, …\nShifts the bits to the right by a specified amount, n, …\nShifts the bits to the left by a specified amount, n, …\nShifts the bits to the right by a specified amount, n, …\nReverses the byte order of the integer.\nConvert self to big endian from the target’s endianness.\nConvert self to little endian from the target’s …\nReturns the number of trailing ones in the binary …\nReturns the number of trailing zeros in the binary …\nShifts the bits to the left by a specified amount, n, …\nShifts the bits to the right by a specified amount, n, …\nCreate a number from its representation as a byte array in …\nCreate a number from its representation as a byte array in …\nCreate a number from its memory representation as a byte …\nReturn the memory representation of this number as a byte …\nReturn the memory representation of this number as a byte …\nReturn the memory representation of this number as a byte …\nPerforms addition that returns None instead of wrapping …\nPerforms division that returns None instead of panicking …\nPerforms multiplication that returns None instead of …\nPerforms negation that returns None if the result can’t …\nPerforms an integral remainder that returns None instead …\nPerforms a left shift that returns None on shifts larger …\nPerforms a right shift that returns None on shifts larger …\nPerforms subtraction that returns None instead of wrapping …\nAdds two numbers, checking for overflow. If overflow …\nDivides two numbers, checking for underflow, overflow and …\nMultiplies two numbers, checking for underflow or …\nNegates a number, returning None for results that can’t …\nFinds the remainder of dividing two numbers, checking for …\nChecked shift left. Computes self << rhs, returning None …\nChecked shift right. Computes self >> rhs, returning None …\nSubtracts two numbers, checking for underflow. If …\nPerforms euclid division that returns None instead of …\nReturns both the quotient and remainder from checked …\nFinds the euclid remainder of dividing two numbers, …\nCalculates Euclidean division, the matching method for …\nReturns both the quotient and remainder from Euclidean …\nCalculates the least nonnegative remainder of self (mod v).\nUnary operator for retrieving the multiplicative inverse, …\nThe result after applying the operator.\nReturns the multiplicative inverse of self.\nFused multiply-add. Computes (self * a) + b with only one …\nThe fused multiply-add assignment operation …\nThe resulting type after applying the fused multiply-add.\nPerforms the fused multiply-add operation (self * a) + b\nPerforms the fused multiply-add assignment operation …\nPerforms addition with a flag for overflow.\nPerforms multiplication with a flag for overflow.\nPerforms substraction with a flag for overflow.\nReturns a tuple of the sum along with a boolean indicating …\nReturns a tuple of the product along with a boolean …\nReturns a tuple of the difference along with a boolean …\nSaturating math operations. Deprecated, use SaturatingAdd, …\nPerforms addition that saturates at the numeric bounds …\nPerforms multiplication that saturates at the numeric …\nPerforms subtraction that saturates at the numeric bounds …\nSaturating addition operator. Returns a+b, saturating at …\nSaturating addition. Computes self + other, saturating at …\nSaturating multiplication. Computes self * other, …\nSaturating subtraction operator. Returns a-b, saturating …\nSaturating subtraction. Computes self - other, saturating …\nPerforms addition that wraps around on overflow.\nPerforms multiplication that wraps around on overflow.\nPerforms a negation that does not panic.\nPerforms a left shift that does not panic.\nPerforms a right shift that does not panic.\nPerforms subtraction that wraps around on overflow.\nWrapping (modular) addition. Computes self + other, …\nWrapping (modular) multiplication. Computes self * other, …\nWrapping (modular) negation. Computes -self, wrapping …\nPanic-free bitwise shift-left; yields self << mask(rhs), …\nPanic-free bitwise shift-right; yields self >> mask(rhs), …\nWrapping (modular) subtraction. Computes self - other, …\nThe result after applying the operator.\nBinary operator for raising a value to a power.\nRaises a value to the power of exp, returning None if an …\nRaises a value to the power of exp, using exponentiation …\nReturns self to the power rhs.\nUseful functions for signed numbers (i.e. numbers that can …\nA trait for values which cannot be negative\nComputes the absolute value.\nComputes the absolute value.\nThe positive difference of two numbers.\nThe positive difference of two numbers.\nReturns true if the number is negative and false if the …\nReturns true if the number is positive and false if the …\nReturns the sign of the number.\nReturns the sign of the number.") \ No newline at end of file diff --git a/search.desc/rbitset/rbitset-desc-0-.js b/search.desc/rbitset/rbitset-desc-0-.js new file mode 100644 index 0000000..7f4d67b --- /dev/null +++ b/search.desc/rbitset/rbitset-desc-0-.js @@ -0,0 +1 @@ +searchState.loadedDescShard("rbitset", 0, "Happens when trying to insert or remove a value bigger …\nThe bit set itself.\nA bit set able to hold up to 1024 elements.\nA bit set able to hold up to 128 elements.\nA bit set able to hold up to 16 elements.\nA bit set able to hold up to 256 elements.\nA bit set able to hold up to 32 elements.\nA bit set able to hold up to 512 elements.\nA bit set able to hold up to 64 elements.\nA bit set able to hold up to 8 elements.\nPossible errors on the BitSet operations.\nA lazy iterator producing elements in the difference of …\nA draining iterator over the items of a BitSet.\nA lazy iterator producing elements in the intersection of …\nAn owning iterator over the items of a BitSet.\nAn iterator over the items of a BitSet.\nA lazy iterator producing elements in the symmetric …\nA lazy iterator producing elements in the union of BitSets.\nMove all elements from other into self, leaving other …\nReturns the capacity of the set, in other words how many …\nClears the set, disabling all bits, removing all elements.\nReturns true if the specified bit is enabled, in other …\nReturns the total number of enabled bits.\nReturns the total number of disabled bits.\nVisits the values representing the difference, i.e., the …\nClears the set, returning all elements as an iterator. …\nSet all bits in a range. fill(.., false) is effectively …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nTransmutes a reference to a borrowed bit array to a …\nAdds a value to the set.\nInserts a value to the set without making any checks.\nVisits the values representing the intersection, i.e., the …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturn the inner integer array.\nReturns true if self has no elements in common with other. …\nReturns true if the set contains no elements.\nReturns true if the set is a subset of another, i.e., other…\nReturns true if the set is a superset of another, i.e., …\nAn iterator visiting all elements in the set.\nReturns the number of elements in the set.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nCreate an empty instance of BitSet.\nIterator implementation for BitSet, guaranteed to remove …\nRemoves a value from the set. Returns whether the value …\nRemoves a value from the set without any checking. Returns …\nRetains only the elements specified by the predicate.\nVisits the values representing the symmetric difference, …\nTries to move all elements from other into self, leaving …\nReturns true if the specified bit is enabled, in other …\nTries to add a value to the set.\nRemoves a value from the set. Returns whether the value …\nVisits the values representing the union, i.e., all the …\nCreate an empty instance with default value.") \ No newline at end of file diff --git a/settings.html b/settings.html new file mode 100644 index 0000000..f112de9 --- /dev/null +++ b/settings.html @@ -0,0 +1 @@ +Settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/src-files.js b/src-files.js new file mode 100644 index 0000000..482bae4 --- /dev/null +++ b/src-files.js @@ -0,0 +1,3 @@ +var srcIndex = new Map(JSON.parse('[["num_traits",["",[["ops",[],["bytes.rs","checked.rs","euclid.rs","inv.rs","mod.rs","mul_add.rs","overflowing.rs","saturating.rs","wrapping.rs"]]],["bounds.rs","cast.rs","float.rs","identities.rs","int.rs","lib.rs","macros.rs","pow.rs","sign.rs"]]],["rbitset",["",[],["lib.rs"]]]]')); +createSrcSidebar(); +//{"start":36,"fragment_lengths":[248,31]} \ No newline at end of file diff --git a/src/num_traits/bounds.rs.html b/src/num_traits/bounds.rs.html new file mode 100644 index 0000000..f45c300 --- /dev/null +++ b/src/num_traits/bounds.rs.html @@ -0,0 +1,297 @@ +bounds.rs - source

num_traits/
bounds.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
use core::num::Wrapping;
+use core::{f32, f64};
+use core::{i128, i16, i32, i64, i8, isize};
+use core::{u128, u16, u32, u64, u8, usize};
+
+/// Numbers which have upper and lower bounds
+pub trait Bounded {
+    // FIXME (#5527): These should be associated constants
+    /// Returns the smallest finite number this type can represent
+    fn min_value() -> Self;
+    /// Returns the largest finite number this type can represent
+    fn max_value() -> Self;
+}
+
+/// Numbers which have lower bounds
+pub trait LowerBounded {
+    /// Returns the smallest finite number this type can represent
+    fn min_value() -> Self;
+}
+
+// FIXME: With a major version bump, this should be a supertrait instead
+impl<T: Bounded> LowerBounded for T {
+    fn min_value() -> T {
+        Bounded::min_value()
+    }
+}
+
+/// Numbers which have upper bounds
+pub trait UpperBounded {
+    /// Returns the largest finite number this type can represent
+    fn max_value() -> Self;
+}
+
+// FIXME: With a major version bump, this should be a supertrait instead
+impl<T: Bounded> UpperBounded for T {
+    fn max_value() -> T {
+        Bounded::max_value()
+    }
+}
+
+macro_rules! bounded_impl {
+    ($t:ty, $min:expr, $max:expr) => {
+        impl Bounded for $t {
+            #[inline]
+            fn min_value() -> $t {
+                $min
+            }
+
+            #[inline]
+            fn max_value() -> $t {
+                $max
+            }
+        }
+    };
+}
+
+bounded_impl!(usize, usize::MIN, usize::MAX);
+bounded_impl!(u8, u8::MIN, u8::MAX);
+bounded_impl!(u16, u16::MIN, u16::MAX);
+bounded_impl!(u32, u32::MIN, u32::MAX);
+bounded_impl!(u64, u64::MIN, u64::MAX);
+bounded_impl!(u128, u128::MIN, u128::MAX);
+
+bounded_impl!(isize, isize::MIN, isize::MAX);
+bounded_impl!(i8, i8::MIN, i8::MAX);
+bounded_impl!(i16, i16::MIN, i16::MAX);
+bounded_impl!(i32, i32::MIN, i32::MAX);
+bounded_impl!(i64, i64::MIN, i64::MAX);
+bounded_impl!(i128, i128::MIN, i128::MAX);
+
+impl<T: Bounded> Bounded for Wrapping<T> {
+    fn min_value() -> Self {
+        Wrapping(T::min_value())
+    }
+    fn max_value() -> Self {
+        Wrapping(T::max_value())
+    }
+}
+
+bounded_impl!(f32, f32::MIN, f32::MAX);
+
+macro_rules! for_each_tuple_ {
+    ( $m:ident !! ) => (
+        $m! { }
+    );
+    ( $m:ident !! $h:ident, $($t:ident,)* ) => (
+        $m! { $h $($t)* }
+        for_each_tuple_! { $m !! $($t,)* }
+    );
+}
+macro_rules! for_each_tuple {
+    ($m:ident) => {
+        for_each_tuple_! { $m !! A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, }
+    };
+}
+
+macro_rules! bounded_tuple {
+    ( $($name:ident)* ) => (
+        impl<$($name: Bounded,)*> Bounded for ($($name,)*) {
+            #[inline]
+            fn min_value() -> Self {
+                ($($name::min_value(),)*)
+            }
+            #[inline]
+            fn max_value() -> Self {
+                ($($name::max_value(),)*)
+            }
+        }
+    );
+}
+
+for_each_tuple!(bounded_tuple);
+bounded_impl!(f64, f64::MIN, f64::MAX);
+
+#[test]
+fn wrapping_bounded() {
+    macro_rules! test_wrapping_bounded {
+        ($($t:ty)+) => {
+            $(
+                assert_eq!(<Wrapping<$t> as Bounded>::min_value().0, <$t>::min_value());
+                assert_eq!(<Wrapping<$t> as Bounded>::max_value().0, <$t>::max_value());
+            )+
+        };
+    }
+
+    test_wrapping_bounded!(usize u8 u16 u32 u64 isize i8 i16 i32 i64);
+}
+
+#[test]
+fn wrapping_bounded_i128() {
+    macro_rules! test_wrapping_bounded {
+        ($($t:ty)+) => {
+            $(
+                assert_eq!(<Wrapping<$t> as Bounded>::min_value().0, <$t>::min_value());
+                assert_eq!(<Wrapping<$t> as Bounded>::max_value().0, <$t>::max_value());
+            )+
+        };
+    }
+
+    test_wrapping_bounded!(u128 i128);
+}
+
+#[test]
+fn wrapping_is_bounded() {
+    fn require_bounded<T: Bounded>(_: &T) {}
+    require_bounded(&Wrapping(42_u32));
+    require_bounded(&Wrapping(-42));
+}
+
\ No newline at end of file diff --git a/src/num_traits/cast.rs.html b/src/num_traits/cast.rs.html new file mode 100644 index 0000000..c7da499 --- /dev/null +++ b/src/num_traits/cast.rs.html @@ -0,0 +1,1541 @@ +cast.rs - source

num_traits/
cast.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
use core::mem::size_of;
+use core::num::Wrapping;
+use core::{f32, f64};
+use core::{i128, i16, i32, i64, i8, isize};
+use core::{u128, u16, u32, u64, u8, usize};
+
+/// A generic trait for converting a value to a number.
+///
+/// A value can be represented by the target type when it lies within
+/// the range of scalars supported by the target type.
+/// For example, a negative integer cannot be represented by an unsigned
+/// integer type, and an `i64` with a very high magnitude might not be
+/// convertible to an `i32`.
+/// On the other hand, conversions with possible precision loss or truncation
+/// are admitted, like an `f32` with a decimal part to an integer type, or
+/// even a large `f64` saturating to `f32` infinity.
+pub trait ToPrimitive {
+    /// Converts the value of `self` to an `isize`. If the value cannot be
+    /// represented by an `isize`, then `None` is returned.
+    #[inline]
+    fn to_isize(&self) -> Option<isize> {
+        self.to_i64().as_ref().and_then(ToPrimitive::to_isize)
+    }
+
+    /// Converts the value of `self` to an `i8`. If the value cannot be
+    /// represented by an `i8`, then `None` is returned.
+    #[inline]
+    fn to_i8(&self) -> Option<i8> {
+        self.to_i64().as_ref().and_then(ToPrimitive::to_i8)
+    }
+
+    /// Converts the value of `self` to an `i16`. If the value cannot be
+    /// represented by an `i16`, then `None` is returned.
+    #[inline]
+    fn to_i16(&self) -> Option<i16> {
+        self.to_i64().as_ref().and_then(ToPrimitive::to_i16)
+    }
+
+    /// Converts the value of `self` to an `i32`. If the value cannot be
+    /// represented by an `i32`, then `None` is returned.
+    #[inline]
+    fn to_i32(&self) -> Option<i32> {
+        self.to_i64().as_ref().and_then(ToPrimitive::to_i32)
+    }
+
+    /// Converts the value of `self` to an `i64`. If the value cannot be
+    /// represented by an `i64`, then `None` is returned.
+    fn to_i64(&self) -> Option<i64>;
+
+    /// Converts the value of `self` to an `i128`. If the value cannot be
+    /// represented by an `i128` (`i64` under the default implementation), then
+    /// `None` is returned.
+    ///
+    /// The default implementation converts through `to_i64()`. Types implementing
+    /// this trait should override this method if they can represent a greater range.
+    #[inline]
+    fn to_i128(&self) -> Option<i128> {
+        self.to_i64().map(From::from)
+    }
+
+    /// Converts the value of `self` to a `usize`. If the value cannot be
+    /// represented by a `usize`, then `None` is returned.
+    #[inline]
+    fn to_usize(&self) -> Option<usize> {
+        self.to_u64().as_ref().and_then(ToPrimitive::to_usize)
+    }
+
+    /// Converts the value of `self` to a `u8`. If the value cannot be
+    /// represented by a `u8`, then `None` is returned.
+    #[inline]
+    fn to_u8(&self) -> Option<u8> {
+        self.to_u64().as_ref().and_then(ToPrimitive::to_u8)
+    }
+
+    /// Converts the value of `self` to a `u16`. If the value cannot be
+    /// represented by a `u16`, then `None` is returned.
+    #[inline]
+    fn to_u16(&self) -> Option<u16> {
+        self.to_u64().as_ref().and_then(ToPrimitive::to_u16)
+    }
+
+    /// Converts the value of `self` to a `u32`. If the value cannot be
+    /// represented by a `u32`, then `None` is returned.
+    #[inline]
+    fn to_u32(&self) -> Option<u32> {
+        self.to_u64().as_ref().and_then(ToPrimitive::to_u32)
+    }
+
+    /// Converts the value of `self` to a `u64`. If the value cannot be
+    /// represented by a `u64`, then `None` is returned.
+    fn to_u64(&self) -> Option<u64>;
+
+    /// Converts the value of `self` to a `u128`. If the value cannot be
+    /// represented by a `u128` (`u64` under the default implementation), then
+    /// `None` is returned.
+    ///
+    /// The default implementation converts through `to_u64()`. Types implementing
+    /// this trait should override this method if they can represent a greater range.
+    #[inline]
+    fn to_u128(&self) -> Option<u128> {
+        self.to_u64().map(From::from)
+    }
+
+    /// Converts the value of `self` to an `f32`. Overflows may map to positive
+    /// or negative inifinity, otherwise `None` is returned if the value cannot
+    /// be represented by an `f32`.
+    #[inline]
+    fn to_f32(&self) -> Option<f32> {
+        self.to_f64().as_ref().and_then(ToPrimitive::to_f32)
+    }
+
+    /// Converts the value of `self` to an `f64`. Overflows may map to positive
+    /// or negative inifinity, otherwise `None` is returned if the value cannot
+    /// be represented by an `f64`.
+    ///
+    /// The default implementation tries to convert through `to_i64()`, and
+    /// failing that through `to_u64()`. Types implementing this trait should
+    /// override this method if they can represent a greater range.
+    #[inline]
+    fn to_f64(&self) -> Option<f64> {
+        match self.to_i64() {
+            Some(i) => i.to_f64(),
+            None => self.to_u64().as_ref().and_then(ToPrimitive::to_f64),
+        }
+    }
+}
+
+macro_rules! impl_to_primitive_int_to_int {
+    ($SrcT:ident : $( $(#[$cfg:meta])* fn $method:ident -> $DstT:ident ; )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(&self) -> Option<$DstT> {
+            let min = $DstT::MIN as $SrcT;
+            let max = $DstT::MAX as $SrcT;
+            if size_of::<$SrcT>() <= size_of::<$DstT>() || (min <= *self && *self <= max) {
+                Some(*self as $DstT)
+            } else {
+                None
+            }
+        }
+    )*}
+}
+
+macro_rules! impl_to_primitive_int_to_uint {
+    ($SrcT:ident : $( $(#[$cfg:meta])* fn $method:ident -> $DstT:ident ; )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(&self) -> Option<$DstT> {
+            let max = $DstT::MAX as $SrcT;
+            if 0 <= *self && (size_of::<$SrcT>() <= size_of::<$DstT>() || *self <= max) {
+                Some(*self as $DstT)
+            } else {
+                None
+            }
+        }
+    )*}
+}
+
+macro_rules! impl_to_primitive_int {
+    ($T:ident) => {
+        impl ToPrimitive for $T {
+            impl_to_primitive_int_to_int! { $T:
+                fn to_isize -> isize;
+                fn to_i8 -> i8;
+                fn to_i16 -> i16;
+                fn to_i32 -> i32;
+                fn to_i64 -> i64;
+                fn to_i128 -> i128;
+            }
+
+            impl_to_primitive_int_to_uint! { $T:
+                fn to_usize -> usize;
+                fn to_u8 -> u8;
+                fn to_u16 -> u16;
+                fn to_u32 -> u32;
+                fn to_u64 -> u64;
+                fn to_u128 -> u128;
+            }
+
+            #[inline]
+            fn to_f32(&self) -> Option<f32> {
+                Some(*self as f32)
+            }
+            #[inline]
+            fn to_f64(&self) -> Option<f64> {
+                Some(*self as f64)
+            }
+        }
+    };
+}
+
+impl_to_primitive_int!(isize);
+impl_to_primitive_int!(i8);
+impl_to_primitive_int!(i16);
+impl_to_primitive_int!(i32);
+impl_to_primitive_int!(i64);
+impl_to_primitive_int!(i128);
+
+macro_rules! impl_to_primitive_uint_to_int {
+    ($SrcT:ident : $( $(#[$cfg:meta])* fn $method:ident -> $DstT:ident ; )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(&self) -> Option<$DstT> {
+            let max = $DstT::MAX as $SrcT;
+            if size_of::<$SrcT>() < size_of::<$DstT>() || *self <= max {
+                Some(*self as $DstT)
+            } else {
+                None
+            }
+        }
+    )*}
+}
+
+macro_rules! impl_to_primitive_uint_to_uint {
+    ($SrcT:ident : $( $(#[$cfg:meta])* fn $method:ident -> $DstT:ident ; )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(&self) -> Option<$DstT> {
+            let max = $DstT::MAX as $SrcT;
+            if size_of::<$SrcT>() <= size_of::<$DstT>() || *self <= max {
+                Some(*self as $DstT)
+            } else {
+                None
+            }
+        }
+    )*}
+}
+
+macro_rules! impl_to_primitive_uint {
+    ($T:ident) => {
+        impl ToPrimitive for $T {
+            impl_to_primitive_uint_to_int! { $T:
+                fn to_isize -> isize;
+                fn to_i8 -> i8;
+                fn to_i16 -> i16;
+                fn to_i32 -> i32;
+                fn to_i64 -> i64;
+                fn to_i128 -> i128;
+            }
+
+            impl_to_primitive_uint_to_uint! { $T:
+                fn to_usize -> usize;
+                fn to_u8 -> u8;
+                fn to_u16 -> u16;
+                fn to_u32 -> u32;
+                fn to_u64 -> u64;
+                fn to_u128 -> u128;
+            }
+
+            #[inline]
+            fn to_f32(&self) -> Option<f32> {
+                Some(*self as f32)
+            }
+            #[inline]
+            fn to_f64(&self) -> Option<f64> {
+                Some(*self as f64)
+            }
+        }
+    };
+}
+
+impl_to_primitive_uint!(usize);
+impl_to_primitive_uint!(u8);
+impl_to_primitive_uint!(u16);
+impl_to_primitive_uint!(u32);
+impl_to_primitive_uint!(u64);
+impl_to_primitive_uint!(u128);
+
+macro_rules! impl_to_primitive_float_to_float {
+    ($SrcT:ident : $( fn $method:ident -> $DstT:ident ; )*) => {$(
+        #[inline]
+        fn $method(&self) -> Option<$DstT> {
+            // We can safely cast all values, whether NaN, +-inf, or finite.
+            // Finite values that are reducing size may saturate to +-inf.
+            Some(*self as $DstT)
+        }
+    )*}
+}
+
+macro_rules! float_to_int_unchecked {
+    // SAFETY: Must not be NaN or infinite; must be representable as the integer after truncating.
+    // We already checked that the float is in the exclusive range `(MIN-1, MAX+1)`.
+    ($float:expr => $int:ty) => {
+        unsafe { $float.to_int_unchecked::<$int>() }
+    };
+}
+
+macro_rules! impl_to_primitive_float_to_signed_int {
+    ($f:ident : $( $(#[$cfg:meta])* fn $method:ident -> $i:ident ; )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(&self) -> Option<$i> {
+            // Float as int truncates toward zero, so we want to allow values
+            // in the exclusive range `(MIN-1, MAX+1)`.
+            if size_of::<$f>() > size_of::<$i>() {
+                // With a larger size, we can represent the range exactly.
+                const MIN_M1: $f = $i::MIN as $f - 1.0;
+                const MAX_P1: $f = $i::MAX as $f + 1.0;
+                if *self > MIN_M1 && *self < MAX_P1 {
+                    return Some(float_to_int_unchecked!(*self => $i));
+                }
+            } else {
+                // We can't represent `MIN-1` exactly, but there's no fractional part
+                // at this magnitude, so we can just use a `MIN` inclusive boundary.
+                const MIN: $f = $i::MIN as $f;
+                // We can't represent `MAX` exactly, but it will round up to exactly
+                // `MAX+1` (a power of two) when we cast it.
+                const MAX_P1: $f = $i::MAX as $f;
+                if *self >= MIN && *self < MAX_P1 {
+                    return Some(float_to_int_unchecked!(*self => $i));
+                }
+            }
+            None
+        }
+    )*}
+}
+
+macro_rules! impl_to_primitive_float_to_unsigned_int {
+    ($f:ident : $( $(#[$cfg:meta])* fn $method:ident -> $u:ident ; )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(&self) -> Option<$u> {
+            // Float as int truncates toward zero, so we want to allow values
+            // in the exclusive range `(-1, MAX+1)`.
+            if size_of::<$f>() > size_of::<$u>() {
+                // With a larger size, we can represent the range exactly.
+                const MAX_P1: $f = $u::MAX as $f + 1.0;
+                if *self > -1.0 && *self < MAX_P1 {
+                    return Some(float_to_int_unchecked!(*self => $u));
+                }
+            } else {
+                // We can't represent `MAX` exactly, but it will round up to exactly
+                // `MAX+1` (a power of two) when we cast it.
+                // (`u128::MAX as f32` is infinity, but this is still ok.)
+                const MAX_P1: $f = $u::MAX as $f;
+                if *self > -1.0 && *self < MAX_P1 {
+                    return Some(float_to_int_unchecked!(*self => $u));
+                }
+            }
+            None
+        }
+    )*}
+}
+
+macro_rules! impl_to_primitive_float {
+    ($T:ident) => {
+        impl ToPrimitive for $T {
+            impl_to_primitive_float_to_signed_int! { $T:
+                fn to_isize -> isize;
+                fn to_i8 -> i8;
+                fn to_i16 -> i16;
+                fn to_i32 -> i32;
+                fn to_i64 -> i64;
+                fn to_i128 -> i128;
+            }
+
+            impl_to_primitive_float_to_unsigned_int! { $T:
+                fn to_usize -> usize;
+                fn to_u8 -> u8;
+                fn to_u16 -> u16;
+                fn to_u32 -> u32;
+                fn to_u64 -> u64;
+                fn to_u128 -> u128;
+            }
+
+            impl_to_primitive_float_to_float! { $T:
+                fn to_f32 -> f32;
+                fn to_f64 -> f64;
+            }
+        }
+    };
+}
+
+impl_to_primitive_float!(f32);
+impl_to_primitive_float!(f64);
+
+/// A generic trait for converting a number to a value.
+///
+/// A value can be represented by the target type when it lies within
+/// the range of scalars supported by the target type.
+/// For example, a negative integer cannot be represented by an unsigned
+/// integer type, and an `i64` with a very high magnitude might not be
+/// convertible to an `i32`.
+/// On the other hand, conversions with possible precision loss or truncation
+/// are admitted, like an `f32` with a decimal part to an integer type, or
+/// even a large `f64` saturating to `f32` infinity.
+pub trait FromPrimitive: Sized {
+    /// Converts an `isize` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_isize(n: isize) -> Option<Self> {
+        n.to_i64().and_then(FromPrimitive::from_i64)
+    }
+
+    /// Converts an `i8` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_i8(n: i8) -> Option<Self> {
+        FromPrimitive::from_i64(From::from(n))
+    }
+
+    /// Converts an `i16` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_i16(n: i16) -> Option<Self> {
+        FromPrimitive::from_i64(From::from(n))
+    }
+
+    /// Converts an `i32` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_i32(n: i32) -> Option<Self> {
+        FromPrimitive::from_i64(From::from(n))
+    }
+
+    /// Converts an `i64` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    fn from_i64(n: i64) -> Option<Self>;
+
+    /// Converts an `i128` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    ///
+    /// The default implementation converts through `from_i64()`. Types implementing
+    /// this trait should override this method if they can represent a greater range.
+    #[inline]
+    fn from_i128(n: i128) -> Option<Self> {
+        n.to_i64().and_then(FromPrimitive::from_i64)
+    }
+
+    /// Converts a `usize` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_usize(n: usize) -> Option<Self> {
+        n.to_u64().and_then(FromPrimitive::from_u64)
+    }
+
+    /// Converts an `u8` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_u8(n: u8) -> Option<Self> {
+        FromPrimitive::from_u64(From::from(n))
+    }
+
+    /// Converts an `u16` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_u16(n: u16) -> Option<Self> {
+        FromPrimitive::from_u64(From::from(n))
+    }
+
+    /// Converts an `u32` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_u32(n: u32) -> Option<Self> {
+        FromPrimitive::from_u64(From::from(n))
+    }
+
+    /// Converts an `u64` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    fn from_u64(n: u64) -> Option<Self>;
+
+    /// Converts an `u128` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    ///
+    /// The default implementation converts through `from_u64()`. Types implementing
+    /// this trait should override this method if they can represent a greater range.
+    #[inline]
+    fn from_u128(n: u128) -> Option<Self> {
+        n.to_u64().and_then(FromPrimitive::from_u64)
+    }
+
+    /// Converts a `f32` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    #[inline]
+    fn from_f32(n: f32) -> Option<Self> {
+        FromPrimitive::from_f64(From::from(n))
+    }
+
+    /// Converts a `f64` to return an optional value of this type. If the
+    /// value cannot be represented by this type, then `None` is returned.
+    ///
+    /// The default implementation tries to convert through `from_i64()`, and
+    /// failing that through `from_u64()`. Types implementing this trait should
+    /// override this method if they can represent a greater range.
+    #[inline]
+    fn from_f64(n: f64) -> Option<Self> {
+        match n.to_i64() {
+            Some(i) => FromPrimitive::from_i64(i),
+            None => n.to_u64().and_then(FromPrimitive::from_u64),
+        }
+    }
+}
+
+macro_rules! impl_from_primitive {
+    ($T:ty, $to_ty:ident) => {
+        #[allow(deprecated)]
+        impl FromPrimitive for $T {
+            #[inline]
+            fn from_isize(n: isize) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_i8(n: i8) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_i16(n: i16) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_i32(n: i32) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_i64(n: i64) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_i128(n: i128) -> Option<$T> {
+                n.$to_ty()
+            }
+
+            #[inline]
+            fn from_usize(n: usize) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_u8(n: u8) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_u16(n: u16) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_u32(n: u32) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_u64(n: u64) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_u128(n: u128) -> Option<$T> {
+                n.$to_ty()
+            }
+
+            #[inline]
+            fn from_f32(n: f32) -> Option<$T> {
+                n.$to_ty()
+            }
+            #[inline]
+            fn from_f64(n: f64) -> Option<$T> {
+                n.$to_ty()
+            }
+        }
+    };
+}
+
+impl_from_primitive!(isize, to_isize);
+impl_from_primitive!(i8, to_i8);
+impl_from_primitive!(i16, to_i16);
+impl_from_primitive!(i32, to_i32);
+impl_from_primitive!(i64, to_i64);
+impl_from_primitive!(i128, to_i128);
+impl_from_primitive!(usize, to_usize);
+impl_from_primitive!(u8, to_u8);
+impl_from_primitive!(u16, to_u16);
+impl_from_primitive!(u32, to_u32);
+impl_from_primitive!(u64, to_u64);
+impl_from_primitive!(u128, to_u128);
+impl_from_primitive!(f32, to_f32);
+impl_from_primitive!(f64, to_f64);
+
+macro_rules! impl_to_primitive_wrapping {
+    ($( $(#[$cfg:meta])* fn $method:ident -> $i:ident ; )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(&self) -> Option<$i> {
+            (self.0).$method()
+        }
+    )*}
+}
+
+impl<T: ToPrimitive> ToPrimitive for Wrapping<T> {
+    impl_to_primitive_wrapping! {
+        fn to_isize -> isize;
+        fn to_i8 -> i8;
+        fn to_i16 -> i16;
+        fn to_i32 -> i32;
+        fn to_i64 -> i64;
+        fn to_i128 -> i128;
+
+        fn to_usize -> usize;
+        fn to_u8 -> u8;
+        fn to_u16 -> u16;
+        fn to_u32 -> u32;
+        fn to_u64 -> u64;
+        fn to_u128 -> u128;
+
+        fn to_f32 -> f32;
+        fn to_f64 -> f64;
+    }
+}
+
+macro_rules! impl_from_primitive_wrapping {
+    ($( $(#[$cfg:meta])* fn $method:ident ( $i:ident ); )*) => {$(
+        #[inline]
+        $(#[$cfg])*
+        fn $method(n: $i) -> Option<Self> {
+            T::$method(n).map(Wrapping)
+        }
+    )*}
+}
+
+impl<T: FromPrimitive> FromPrimitive for Wrapping<T> {
+    impl_from_primitive_wrapping! {
+        fn from_isize(isize);
+        fn from_i8(i8);
+        fn from_i16(i16);
+        fn from_i32(i32);
+        fn from_i64(i64);
+        fn from_i128(i128);
+
+        fn from_usize(usize);
+        fn from_u8(u8);
+        fn from_u16(u16);
+        fn from_u32(u32);
+        fn from_u64(u64);
+        fn from_u128(u128);
+
+        fn from_f32(f32);
+        fn from_f64(f64);
+    }
+}
+
+/// Cast from one machine scalar to another.
+///
+/// # Examples
+///
+/// ```
+/// # use num_traits as num;
+/// let twenty: f32 = num::cast(0x14).unwrap();
+/// assert_eq!(twenty, 20f32);
+/// ```
+///
+#[inline]
+pub fn cast<T: NumCast, U: NumCast>(n: T) -> Option<U> {
+    NumCast::from(n)
+}
+
+/// An interface for casting between machine scalars.
+pub trait NumCast: Sized + ToPrimitive {
+    /// Creates a number from another value that can be converted into
+    /// a primitive via the `ToPrimitive` trait. If the source value cannot be
+    /// represented by the target type, then `None` is returned.
+    ///
+    /// A value can be represented by the target type when it lies within
+    /// the range of scalars supported by the target type.
+    /// For example, a negative integer cannot be represented by an unsigned
+    /// integer type, and an `i64` with a very high magnitude might not be
+    /// convertible to an `i32`.
+    /// On the other hand, conversions with possible precision loss or truncation
+    /// are admitted, like an `f32` with a decimal part to an integer type, or
+    /// even a large `f64` saturating to `f32` infinity.
+    fn from<T: ToPrimitive>(n: T) -> Option<Self>;
+}
+
+macro_rules! impl_num_cast {
+    ($T:ty, $conv:ident) => {
+        impl NumCast for $T {
+            #[inline]
+            #[allow(deprecated)]
+            fn from<N: ToPrimitive>(n: N) -> Option<$T> {
+                // `$conv` could be generated using `concat_idents!`, but that
+                // macro seems to be broken at the moment
+                n.$conv()
+            }
+        }
+    };
+}
+
+impl_num_cast!(u8, to_u8);
+impl_num_cast!(u16, to_u16);
+impl_num_cast!(u32, to_u32);
+impl_num_cast!(u64, to_u64);
+impl_num_cast!(u128, to_u128);
+impl_num_cast!(usize, to_usize);
+impl_num_cast!(i8, to_i8);
+impl_num_cast!(i16, to_i16);
+impl_num_cast!(i32, to_i32);
+impl_num_cast!(i64, to_i64);
+impl_num_cast!(i128, to_i128);
+impl_num_cast!(isize, to_isize);
+impl_num_cast!(f32, to_f32);
+impl_num_cast!(f64, to_f64);
+
+impl<T: NumCast> NumCast for Wrapping<T> {
+    fn from<U: ToPrimitive>(n: U) -> Option<Self> {
+        T::from(n).map(Wrapping)
+    }
+}
+
+/// A generic interface for casting between machine scalars with the
+/// `as` operator, which admits narrowing and precision loss.
+/// Implementers of this trait `AsPrimitive` should behave like a primitive
+/// numeric type (e.g. a newtype around another primitive), and the
+/// intended conversion must never fail.
+///
+/// # Examples
+///
+/// ```
+/// # use num_traits::AsPrimitive;
+/// let three: i32 = (3.14159265f32).as_();
+/// assert_eq!(three, 3);
+/// ```
+///
+/// # Safety
+///
+/// **In Rust versions before 1.45.0**, some uses of the `as` operator were not entirely safe.
+/// In particular, it was undefined behavior if
+/// a truncated floating point value could not fit in the target integer
+/// type ([#10184](https://github.com/rust-lang/rust/issues/10184)).
+///
+/// ```ignore
+/// # use num_traits::AsPrimitive;
+/// let x: u8 = (1.04E+17).as_(); // UB
+/// ```
+///
+pub trait AsPrimitive<T>: 'static + Copy
+where
+    T: 'static + Copy,
+{
+    /// Convert a value to another, using the `as` operator.
+    fn as_(self) -> T;
+}
+
+macro_rules! impl_as_primitive {
+    (@ $T: ty => $(#[$cfg:meta])* impl $U: ty ) => {
+        $(#[$cfg])*
+        impl AsPrimitive<$U> for $T {
+            #[inline] fn as_(self) -> $U { self as $U }
+        }
+    };
+    (@ $T: ty => { $( $U: ty ),* } ) => {$(
+        impl_as_primitive!(@ $T => impl $U);
+    )*};
+    ($T: ty => { $( $U: ty ),* } ) => {
+        impl_as_primitive!(@ $T => { $( $U ),* });
+        impl_as_primitive!(@ $T => { u8, u16, u32, u64, u128, usize });
+        impl_as_primitive!(@ $T => { i8, i16, i32, i64, i128, isize });
+    };
+}
+
+impl_as_primitive!(u8 => { char, f32, f64 });
+impl_as_primitive!(i8 => { f32, f64 });
+impl_as_primitive!(u16 => { f32, f64 });
+impl_as_primitive!(i16 => { f32, f64 });
+impl_as_primitive!(u32 => { f32, f64 });
+impl_as_primitive!(i32 => { f32, f64 });
+impl_as_primitive!(u64 => { f32, f64 });
+impl_as_primitive!(i64 => { f32, f64 });
+impl_as_primitive!(u128 => { f32, f64 });
+impl_as_primitive!(i128 => { f32, f64 });
+impl_as_primitive!(usize => { f32, f64 });
+impl_as_primitive!(isize => { f32, f64 });
+impl_as_primitive!(f32 => { f32, f64 });
+impl_as_primitive!(f64 => { f32, f64 });
+impl_as_primitive!(char => { char });
+impl_as_primitive!(bool => {});
+
\ No newline at end of file diff --git a/src/num_traits/float.rs.html b/src/num_traits/float.rs.html new file mode 100644 index 0000000..9649222 --- /dev/null +++ b/src/num_traits/float.rs.html @@ -0,0 +1,5027 @@ +float.rs - source

num_traits/
float.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
+1972
+1973
+1974
+1975
+1976
+1977
+1978
+1979
+1980
+1981
+1982
+1983
+1984
+1985
+1986
+1987
+1988
+1989
+1990
+1991
+1992
+1993
+1994
+1995
+1996
+1997
+1998
+1999
+2000
+2001
+2002
+2003
+2004
+2005
+2006
+2007
+2008
+2009
+2010
+2011
+2012
+2013
+2014
+2015
+2016
+2017
+2018
+2019
+2020
+2021
+2022
+2023
+2024
+2025
+2026
+2027
+2028
+2029
+2030
+2031
+2032
+2033
+2034
+2035
+2036
+2037
+2038
+2039
+2040
+2041
+2042
+2043
+2044
+2045
+2046
+2047
+2048
+2049
+2050
+2051
+2052
+2053
+2054
+2055
+2056
+2057
+2058
+2059
+2060
+2061
+2062
+2063
+2064
+2065
+2066
+2067
+2068
+2069
+2070
+2071
+2072
+2073
+2074
+2075
+2076
+2077
+2078
+2079
+2080
+2081
+2082
+2083
+2084
+2085
+2086
+2087
+2088
+2089
+2090
+2091
+2092
+2093
+2094
+2095
+2096
+2097
+2098
+2099
+2100
+2101
+2102
+2103
+2104
+2105
+2106
+2107
+2108
+2109
+2110
+2111
+2112
+2113
+2114
+2115
+2116
+2117
+2118
+2119
+2120
+2121
+2122
+2123
+2124
+2125
+2126
+2127
+2128
+2129
+2130
+2131
+2132
+2133
+2134
+2135
+2136
+2137
+2138
+2139
+2140
+2141
+2142
+2143
+2144
+2145
+2146
+2147
+2148
+2149
+2150
+2151
+2152
+2153
+2154
+2155
+2156
+2157
+2158
+2159
+2160
+2161
+2162
+2163
+2164
+2165
+2166
+2167
+2168
+2169
+2170
+2171
+2172
+2173
+2174
+2175
+2176
+2177
+2178
+2179
+2180
+2181
+2182
+2183
+2184
+2185
+2186
+2187
+2188
+2189
+2190
+2191
+2192
+2193
+2194
+2195
+2196
+2197
+2198
+2199
+2200
+2201
+2202
+2203
+2204
+2205
+2206
+2207
+2208
+2209
+2210
+2211
+2212
+2213
+2214
+2215
+2216
+2217
+2218
+2219
+2220
+2221
+2222
+2223
+2224
+2225
+2226
+2227
+2228
+2229
+2230
+2231
+2232
+2233
+2234
+2235
+2236
+2237
+2238
+2239
+2240
+2241
+2242
+2243
+2244
+2245
+2246
+2247
+2248
+2249
+2250
+2251
+2252
+2253
+2254
+2255
+2256
+2257
+2258
+2259
+2260
+2261
+2262
+2263
+2264
+2265
+2266
+2267
+2268
+2269
+2270
+2271
+2272
+2273
+2274
+2275
+2276
+2277
+2278
+2279
+2280
+2281
+2282
+2283
+2284
+2285
+2286
+2287
+2288
+2289
+2290
+2291
+2292
+2293
+2294
+2295
+2296
+2297
+2298
+2299
+2300
+2301
+2302
+2303
+2304
+2305
+2306
+2307
+2308
+2309
+2310
+2311
+2312
+2313
+2314
+2315
+2316
+2317
+2318
+2319
+2320
+2321
+2322
+2323
+2324
+2325
+2326
+2327
+2328
+2329
+2330
+2331
+2332
+2333
+2334
+2335
+2336
+2337
+2338
+2339
+2340
+2341
+2342
+2343
+2344
+2345
+2346
+2347
+2348
+2349
+2350
+2351
+2352
+2353
+2354
+2355
+2356
+2357
+2358
+2359
+2360
+2361
+2362
+2363
+2364
+2365
+2366
+2367
+2368
+2369
+2370
+2371
+2372
+2373
+2374
+2375
+2376
+2377
+2378
+2379
+2380
+2381
+2382
+2383
+2384
+2385
+2386
+2387
+2388
+2389
+2390
+2391
+2392
+2393
+2394
+2395
+2396
+2397
+2398
+2399
+2400
+2401
+2402
+2403
+2404
+2405
+2406
+2407
+2408
+2409
+2410
+2411
+2412
+2413
+2414
+2415
+2416
+2417
+2418
+2419
+2420
+2421
+2422
+2423
+2424
+2425
+2426
+2427
+2428
+2429
+2430
+2431
+2432
+2433
+2434
+2435
+2436
+2437
+2438
+2439
+2440
+2441
+2442
+2443
+2444
+2445
+2446
+2447
+2448
+2449
+2450
+2451
+2452
+2453
+2454
+2455
+2456
+2457
+2458
+2459
+2460
+2461
+2462
+2463
+2464
+2465
+2466
+2467
+2468
+2469
+2470
+2471
+2472
+2473
+2474
+2475
+2476
+2477
+2478
+2479
+2480
+2481
+2482
+2483
+2484
+2485
+2486
+2487
+2488
+2489
+2490
+2491
+2492
+2493
+2494
+2495
+2496
+2497
+2498
+2499
+2500
+2501
+2502
+2503
+2504
+2505
+2506
+2507
+2508
+2509
+2510
+2511
+2512
+2513
use core::cmp::Ordering;
+use core::num::FpCategory;
+use core::ops::{Add, Div, Neg};
+
+use core::f32;
+use core::f64;
+
+use crate::{Num, NumCast, ToPrimitive};
+
+/// Generic trait for floating point numbers that works with `no_std`.
+///
+/// This trait implements a subset of the `Float` trait.
+pub trait FloatCore: Num + NumCast + Neg<Output = Self> + PartialOrd + Copy {
+    /// Returns positive infinity.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T) {
+    ///     assert!(T::infinity() == x);
+    /// }
+    ///
+    /// check(f32::INFINITY);
+    /// check(f64::INFINITY);
+    /// ```
+    fn infinity() -> Self;
+
+    /// Returns negative infinity.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T) {
+    ///     assert!(T::neg_infinity() == x);
+    /// }
+    ///
+    /// check(f32::NEG_INFINITY);
+    /// check(f64::NEG_INFINITY);
+    /// ```
+    fn neg_infinity() -> Self;
+
+    /// Returns NaN.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    ///
+    /// fn check<T: FloatCore>() {
+    ///     let n = T::nan();
+    ///     assert!(n != n);
+    /// }
+    ///
+    /// check::<f32>();
+    /// check::<f64>();
+    /// ```
+    fn nan() -> Self;
+
+    /// Returns `-0.0`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(n: T) {
+    ///     let z = T::neg_zero();
+    ///     assert!(z.is_zero());
+    ///     assert!(T::one() / z == n);
+    /// }
+    ///
+    /// check(f32::NEG_INFINITY);
+    /// check(f64::NEG_INFINITY);
+    /// ```
+    fn neg_zero() -> Self;
+
+    /// Returns the smallest finite value that this type can represent.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T) {
+    ///     assert!(T::min_value() == x);
+    /// }
+    ///
+    /// check(f32::MIN);
+    /// check(f64::MIN);
+    /// ```
+    fn min_value() -> Self;
+
+    /// Returns the smallest positive, normalized value that this type can represent.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T) {
+    ///     assert!(T::min_positive_value() == x);
+    /// }
+    ///
+    /// check(f32::MIN_POSITIVE);
+    /// check(f64::MIN_POSITIVE);
+    /// ```
+    fn min_positive_value() -> Self;
+
+    /// Returns epsilon, a small positive value.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T) {
+    ///     assert!(T::epsilon() == x);
+    /// }
+    ///
+    /// check(f32::EPSILON);
+    /// check(f64::EPSILON);
+    /// ```
+    fn epsilon() -> Self;
+
+    /// Returns the largest finite value that this type can represent.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T) {
+    ///     assert!(T::max_value() == x);
+    /// }
+    ///
+    /// check(f32::MAX);
+    /// check(f64::MAX);
+    /// ```
+    fn max_value() -> Self;
+
+    /// Returns `true` if the number is NaN.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, p: bool) {
+    ///     assert!(x.is_nan() == p);
+    /// }
+    ///
+    /// check(f32::NAN, true);
+    /// check(f32::INFINITY, false);
+    /// check(f64::NAN, true);
+    /// check(0.0f64, false);
+    /// ```
+    #[inline]
+    #[allow(clippy::eq_op)]
+    fn is_nan(self) -> bool {
+        self != self
+    }
+
+    /// Returns `true` if the number is infinite.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, p: bool) {
+    ///     assert!(x.is_infinite() == p);
+    /// }
+    ///
+    /// check(f32::INFINITY, true);
+    /// check(f32::NEG_INFINITY, true);
+    /// check(f32::NAN, false);
+    /// check(f64::INFINITY, true);
+    /// check(f64::NEG_INFINITY, true);
+    /// check(0.0f64, false);
+    /// ```
+    #[inline]
+    fn is_infinite(self) -> bool {
+        self == Self::infinity() || self == Self::neg_infinity()
+    }
+
+    /// Returns `true` if the number is neither infinite or NaN.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, p: bool) {
+    ///     assert!(x.is_finite() == p);
+    /// }
+    ///
+    /// check(f32::INFINITY, false);
+    /// check(f32::MAX, true);
+    /// check(f64::NEG_INFINITY, false);
+    /// check(f64::MIN_POSITIVE, true);
+    /// check(f64::NAN, false);
+    /// ```
+    #[inline]
+    fn is_finite(self) -> bool {
+        !(self.is_nan() || self.is_infinite())
+    }
+
+    /// Returns `true` if the number is neither zero, infinite, subnormal or NaN.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, p: bool) {
+    ///     assert!(x.is_normal() == p);
+    /// }
+    ///
+    /// check(f32::INFINITY, false);
+    /// check(f32::MAX, true);
+    /// check(f64::NEG_INFINITY, false);
+    /// check(f64::MIN_POSITIVE, true);
+    /// check(0.0f64, false);
+    /// ```
+    #[inline]
+    fn is_normal(self) -> bool {
+        self.classify() == FpCategory::Normal
+    }
+
+    /// Returns `true` if the number is [subnormal].
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::f64;
+    ///
+    /// let min = f64::MIN_POSITIVE; // 2.2250738585072014e-308_f64
+    /// let max = f64::MAX;
+    /// let lower_than_min = 1.0e-308_f64;
+    /// let zero = 0.0_f64;
+    ///
+    /// assert!(!min.is_subnormal());
+    /// assert!(!max.is_subnormal());
+    ///
+    /// assert!(!zero.is_subnormal());
+    /// assert!(!f64::NAN.is_subnormal());
+    /// assert!(!f64::INFINITY.is_subnormal());
+    /// // Values between `0` and `min` are Subnormal.
+    /// assert!(lower_than_min.is_subnormal());
+    /// ```
+    /// [subnormal]: https://en.wikipedia.org/wiki/Subnormal_number
+    #[inline]
+    fn is_subnormal(self) -> bool {
+        self.classify() == FpCategory::Subnormal
+    }
+
+    /// Returns the floating point category of the number. If only one property
+    /// is going to be tested, it is generally faster to use the specific
+    /// predicate instead.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    /// use std::num::FpCategory;
+    ///
+    /// fn check<T: FloatCore>(x: T, c: FpCategory) {
+    ///     assert!(x.classify() == c);
+    /// }
+    ///
+    /// check(f32::INFINITY, FpCategory::Infinite);
+    /// check(f32::MAX, FpCategory::Normal);
+    /// check(f64::NAN, FpCategory::Nan);
+    /// check(f64::MIN_POSITIVE, FpCategory::Normal);
+    /// check(f64::MIN_POSITIVE / 2.0, FpCategory::Subnormal);
+    /// check(0.0f64, FpCategory::Zero);
+    /// ```
+    fn classify(self) -> FpCategory;
+
+    /// Returns the largest integer less than or equal to a number.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.floor() == y);
+    /// }
+    ///
+    /// check(f32::INFINITY, f32::INFINITY);
+    /// check(0.9f32, 0.0);
+    /// check(1.0f32, 1.0);
+    /// check(1.1f32, 1.0);
+    /// check(-0.0f64, 0.0);
+    /// check(-0.9f64, -1.0);
+    /// check(-1.0f64, -1.0);
+    /// check(-1.1f64, -2.0);
+    /// check(f64::MIN, f64::MIN);
+    /// ```
+    #[inline]
+    fn floor(self) -> Self {
+        let f = self.fract();
+        if f.is_nan() || f.is_zero() {
+            self
+        } else if self < Self::zero() {
+            self - f - Self::one()
+        } else {
+            self - f
+        }
+    }
+
+    /// Returns the smallest integer greater than or equal to a number.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.ceil() == y);
+    /// }
+    ///
+    /// check(f32::INFINITY, f32::INFINITY);
+    /// check(0.9f32, 1.0);
+    /// check(1.0f32, 1.0);
+    /// check(1.1f32, 2.0);
+    /// check(-0.0f64, 0.0);
+    /// check(-0.9f64, -0.0);
+    /// check(-1.0f64, -1.0);
+    /// check(-1.1f64, -1.0);
+    /// check(f64::MIN, f64::MIN);
+    /// ```
+    #[inline]
+    fn ceil(self) -> Self {
+        let f = self.fract();
+        if f.is_nan() || f.is_zero() {
+            self
+        } else if self > Self::zero() {
+            self - f + Self::one()
+        } else {
+            self - f
+        }
+    }
+
+    /// Returns the nearest integer to a number. Round half-way cases away from `0.0`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.round() == y);
+    /// }
+    ///
+    /// check(f32::INFINITY, f32::INFINITY);
+    /// check(0.4f32, 0.0);
+    /// check(0.5f32, 1.0);
+    /// check(0.6f32, 1.0);
+    /// check(-0.4f64, 0.0);
+    /// check(-0.5f64, -1.0);
+    /// check(-0.6f64, -1.0);
+    /// check(f64::MIN, f64::MIN);
+    /// ```
+    #[inline]
+    fn round(self) -> Self {
+        let one = Self::one();
+        let h = Self::from(0.5).expect("Unable to cast from 0.5");
+        let f = self.fract();
+        if f.is_nan() || f.is_zero() {
+            self
+        } else if self > Self::zero() {
+            if f < h {
+                self - f
+            } else {
+                self - f + one
+            }
+        } else if -f < h {
+            self - f
+        } else {
+            self - f - one
+        }
+    }
+
+    /// Return the integer part of a number.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.trunc() == y);
+    /// }
+    ///
+    /// check(f32::INFINITY, f32::INFINITY);
+    /// check(0.9f32, 0.0);
+    /// check(1.0f32, 1.0);
+    /// check(1.1f32, 1.0);
+    /// check(-0.0f64, 0.0);
+    /// check(-0.9f64, -0.0);
+    /// check(-1.0f64, -1.0);
+    /// check(-1.1f64, -1.0);
+    /// check(f64::MIN, f64::MIN);
+    /// ```
+    #[inline]
+    fn trunc(self) -> Self {
+        let f = self.fract();
+        if f.is_nan() {
+            self
+        } else {
+            self - f
+        }
+    }
+
+    /// Returns the fractional part of a number.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.fract() == y);
+    /// }
+    ///
+    /// check(f32::MAX, 0.0);
+    /// check(0.75f32, 0.75);
+    /// check(1.0f32, 0.0);
+    /// check(1.25f32, 0.25);
+    /// check(-0.0f64, 0.0);
+    /// check(-0.75f64, -0.75);
+    /// check(-1.0f64, 0.0);
+    /// check(-1.25f64, -0.25);
+    /// check(f64::MIN, 0.0);
+    /// ```
+    #[inline]
+    fn fract(self) -> Self {
+        if self.is_zero() {
+            Self::zero()
+        } else {
+            self % Self::one()
+        }
+    }
+
+    /// Computes the absolute value of `self`. Returns `FloatCore::nan()` if the
+    /// number is `FloatCore::nan()`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.abs() == y);
+    /// }
+    ///
+    /// check(f32::INFINITY, f32::INFINITY);
+    /// check(1.0f32, 1.0);
+    /// check(0.0f64, 0.0);
+    /// check(-0.0f64, 0.0);
+    /// check(-1.0f64, 1.0);
+    /// check(f64::MIN, f64::MAX);
+    /// ```
+    #[inline]
+    fn abs(self) -> Self {
+        if self.is_sign_positive() {
+            return self;
+        }
+        if self.is_sign_negative() {
+            return -self;
+        }
+        Self::nan()
+    }
+
+    /// Returns a number that represents the sign of `self`.
+    ///
+    /// - `1.0` if the number is positive, `+0.0` or `FloatCore::infinity()`
+    /// - `-1.0` if the number is negative, `-0.0` or `FloatCore::neg_infinity()`
+    /// - `FloatCore::nan()` if the number is `FloatCore::nan()`
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.signum() == y);
+    /// }
+    ///
+    /// check(f32::INFINITY, 1.0);
+    /// check(3.0f32, 1.0);
+    /// check(0.0f32, 1.0);
+    /// check(-0.0f64, -1.0);
+    /// check(-3.0f64, -1.0);
+    /// check(f64::MIN, -1.0);
+    /// ```
+    #[inline]
+    fn signum(self) -> Self {
+        if self.is_nan() {
+            Self::nan()
+        } else if self.is_sign_negative() {
+            -Self::one()
+        } else {
+            Self::one()
+        }
+    }
+
+    /// Returns `true` if `self` is positive, including `+0.0` and
+    /// `FloatCore::infinity()`, and `FloatCore::nan()`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, p: bool) {
+    ///     assert!(x.is_sign_positive() == p);
+    /// }
+    ///
+    /// check(f32::INFINITY, true);
+    /// check(f32::MAX, true);
+    /// check(0.0f32, true);
+    /// check(-0.0f64, false);
+    /// check(f64::NEG_INFINITY, false);
+    /// check(f64::MIN_POSITIVE, true);
+    /// check(f64::NAN, true);
+    /// check(-f64::NAN, false);
+    /// ```
+    #[inline]
+    fn is_sign_positive(self) -> bool {
+        !self.is_sign_negative()
+    }
+
+    /// Returns `true` if `self` is negative, including `-0.0` and
+    /// `FloatCore::neg_infinity()`, and `-FloatCore::nan()`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, p: bool) {
+    ///     assert!(x.is_sign_negative() == p);
+    /// }
+    ///
+    /// check(f32::INFINITY, false);
+    /// check(f32::MAX, false);
+    /// check(0.0f32, false);
+    /// check(-0.0f64, true);
+    /// check(f64::NEG_INFINITY, true);
+    /// check(f64::MIN_POSITIVE, false);
+    /// check(f64::NAN, false);
+    /// check(-f64::NAN, true);
+    /// ```
+    #[inline]
+    fn is_sign_negative(self) -> bool {
+        let (_, _, sign) = self.integer_decode();
+        sign < 0
+    }
+
+    /// Returns the minimum of the two numbers.
+    ///
+    /// If one of the arguments is NaN, then the other argument is returned.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T, min: T) {
+    ///     assert!(x.min(y) == min);
+    /// }
+    ///
+    /// check(1.0f32, 2.0, 1.0);
+    /// check(f32::NAN, 2.0, 2.0);
+    /// check(1.0f64, -2.0, -2.0);
+    /// check(1.0f64, f64::NAN, 1.0);
+    /// ```
+    #[inline]
+    fn min(self, other: Self) -> Self {
+        if self.is_nan() {
+            return other;
+        }
+        if other.is_nan() {
+            return self;
+        }
+        if self < other {
+            self
+        } else {
+            other
+        }
+    }
+
+    /// Returns the maximum of the two numbers.
+    ///
+    /// If one of the arguments is NaN, then the other argument is returned.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T, max: T) {
+    ///     assert!(x.max(y) == max);
+    /// }
+    ///
+    /// check(1.0f32, 2.0, 2.0);
+    /// check(1.0f32, f32::NAN, 1.0);
+    /// check(-1.0f64, 2.0, 2.0);
+    /// check(-1.0f64, f64::NAN, -1.0);
+    /// ```
+    #[inline]
+    fn max(self, other: Self) -> Self {
+        if self.is_nan() {
+            return other;
+        }
+        if other.is_nan() {
+            return self;
+        }
+        if self > other {
+            self
+        } else {
+            other
+        }
+    }
+
+    /// A value bounded by a minimum and a maximum
+    ///
+    ///  If input is less than min then this returns min.
+    ///  If input is greater than max then this returns max.
+    ///  Otherwise this returns input.
+    ///
+    /// **Panics** in debug mode if `!(min <= max)`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    ///
+    /// fn check<T: FloatCore>(val: T, min: T, max: T, expected: T) {
+    ///     assert!(val.clamp(min, max) == expected);
+    /// }
+    ///
+    ///
+    /// check(1.0f32, 0.0, 2.0, 1.0);
+    /// check(1.0f32, 2.0, 3.0, 2.0);
+    /// check(3.0f32, 0.0, 2.0, 2.0);
+    ///
+    /// check(1.0f64, 0.0, 2.0, 1.0);
+    /// check(1.0f64, 2.0, 3.0, 2.0);
+    /// check(3.0f64, 0.0, 2.0, 2.0);
+    /// ```
+    fn clamp(self, min: Self, max: Self) -> Self {
+        crate::clamp(self, min, max)
+    }
+
+    /// Returns the reciprocal (multiplicative inverse) of the number.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, y: T) {
+    ///     assert!(x.recip() == y);
+    ///     assert!(y.recip() == x);
+    /// }
+    ///
+    /// check(f32::INFINITY, 0.0);
+    /// check(2.0f32, 0.5);
+    /// check(-0.25f64, -4.0);
+    /// check(-0.0f64, f64::NEG_INFINITY);
+    /// ```
+    #[inline]
+    fn recip(self) -> Self {
+        Self::one() / self
+    }
+
+    /// Raise a number to an integer power.
+    ///
+    /// Using this function is generally faster than using `powf`
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    ///
+    /// fn check<T: FloatCore>(x: T, exp: i32, powi: T) {
+    ///     assert!(x.powi(exp) == powi);
+    /// }
+    ///
+    /// check(9.0f32, 2, 81.0);
+    /// check(1.0f32, -2, 1.0);
+    /// check(10.0f64, 20, 1e20);
+    /// check(4.0f64, -2, 0.0625);
+    /// check(-1.0f64, std::i32::MIN, 1.0);
+    /// ```
+    #[inline]
+    fn powi(mut self, mut exp: i32) -> Self {
+        if exp < 0 {
+            exp = exp.wrapping_neg();
+            self = self.recip();
+        }
+        // It should always be possible to convert a positive `i32` to a `usize`.
+        // Note, `i32::MIN` will wrap and still be negative, so we need to convert
+        // to `u32` without sign-extension before growing to `usize`.
+        super::pow(self, (exp as u32).to_usize().unwrap())
+    }
+
+    /// Converts to degrees, assuming the number is in radians.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(rad: T, deg: T) {
+    ///     assert!(rad.to_degrees() == deg);
+    /// }
+    ///
+    /// check(0.0f32, 0.0);
+    /// check(f32::consts::PI, 180.0);
+    /// check(f64::consts::FRAC_PI_4, 45.0);
+    /// check(f64::INFINITY, f64::INFINITY);
+    /// ```
+    fn to_degrees(self) -> Self;
+
+    /// Converts to radians, assuming the number is in degrees.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(deg: T, rad: T) {
+    ///     assert!(deg.to_radians() == rad);
+    /// }
+    ///
+    /// check(0.0f32, 0.0);
+    /// check(180.0, f32::consts::PI);
+    /// check(45.0, f64::consts::FRAC_PI_4);
+    /// check(f64::INFINITY, f64::INFINITY);
+    /// ```
+    fn to_radians(self) -> Self;
+
+    /// Returns the mantissa, base 2 exponent, and sign as integers, respectively.
+    /// The original number can be recovered by `sign * mantissa * 2 ^ exponent`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::float::FloatCore;
+    /// use std::{f32, f64};
+    ///
+    /// fn check<T: FloatCore>(x: T, m: u64, e: i16, s:i8) {
+    ///     let (mantissa, exponent, sign) = x.integer_decode();
+    ///     assert_eq!(mantissa, m);
+    ///     assert_eq!(exponent, e);
+    ///     assert_eq!(sign, s);
+    /// }
+    ///
+    /// check(2.0f32, 1 << 23, -22, 1);
+    /// check(-2.0f32, 1 << 23, -22, -1);
+    /// check(f32::INFINITY, 1 << 23, 105, 1);
+    /// check(f64::NEG_INFINITY, 1 << 52, 972, -1);
+    /// ```
+    fn integer_decode(self) -> (u64, i16, i8);
+}
+
+impl FloatCore for f32 {
+    constant! {
+        infinity() -> f32::INFINITY;
+        neg_infinity() -> f32::NEG_INFINITY;
+        nan() -> f32::NAN;
+        neg_zero() -> -0.0;
+        min_value() -> f32::MIN;
+        min_positive_value() -> f32::MIN_POSITIVE;
+        epsilon() -> f32::EPSILON;
+        max_value() -> f32::MAX;
+    }
+
+    #[inline]
+    fn integer_decode(self) -> (u64, i16, i8) {
+        integer_decode_f32(self)
+    }
+
+    forward! {
+        Self::is_nan(self) -> bool;
+        Self::is_infinite(self) -> bool;
+        Self::is_finite(self) -> bool;
+        Self::is_normal(self) -> bool;
+        Self::is_subnormal(self) -> bool;
+        Self::clamp(self, min: Self, max: Self) -> Self;
+        Self::classify(self) -> FpCategory;
+        Self::is_sign_positive(self) -> bool;
+        Self::is_sign_negative(self) -> bool;
+        Self::min(self, other: Self) -> Self;
+        Self::max(self, other: Self) -> Self;
+        Self::recip(self) -> Self;
+        Self::to_degrees(self) -> Self;
+        Self::to_radians(self) -> Self;
+    }
+
+    #[cfg(feature = "std")]
+    forward! {
+        Self::floor(self) -> Self;
+        Self::ceil(self) -> Self;
+        Self::round(self) -> Self;
+        Self::trunc(self) -> Self;
+        Self::fract(self) -> Self;
+        Self::abs(self) -> Self;
+        Self::signum(self) -> Self;
+        Self::powi(self, n: i32) -> Self;
+    }
+
+    #[cfg(all(not(feature = "std"), feature = "libm"))]
+    forward! {
+        libm::floorf as floor(self) -> Self;
+        libm::ceilf as ceil(self) -> Self;
+        libm::roundf as round(self) -> Self;
+        libm::truncf as trunc(self) -> Self;
+        libm::fabsf as abs(self) -> Self;
+    }
+
+    #[cfg(all(not(feature = "std"), feature = "libm"))]
+    #[inline]
+    fn fract(self) -> Self {
+        self - libm::truncf(self)
+    }
+}
+
+impl FloatCore for f64 {
+    constant! {
+        infinity() -> f64::INFINITY;
+        neg_infinity() -> f64::NEG_INFINITY;
+        nan() -> f64::NAN;
+        neg_zero() -> -0.0;
+        min_value() -> f64::MIN;
+        min_positive_value() -> f64::MIN_POSITIVE;
+        epsilon() -> f64::EPSILON;
+        max_value() -> f64::MAX;
+    }
+
+    #[inline]
+    fn integer_decode(self) -> (u64, i16, i8) {
+        integer_decode_f64(self)
+    }
+
+    forward! {
+        Self::is_nan(self) -> bool;
+        Self::is_infinite(self) -> bool;
+        Self::is_finite(self) -> bool;
+        Self::is_normal(self) -> bool;
+        Self::is_subnormal(self) -> bool;
+        Self::clamp(self, min: Self, max: Self) -> Self;
+        Self::classify(self) -> FpCategory;
+        Self::is_sign_positive(self) -> bool;
+        Self::is_sign_negative(self) -> bool;
+        Self::min(self, other: Self) -> Self;
+        Self::max(self, other: Self) -> Self;
+        Self::recip(self) -> Self;
+        Self::to_degrees(self) -> Self;
+        Self::to_radians(self) -> Self;
+    }
+
+    #[cfg(feature = "std")]
+    forward! {
+        Self::floor(self) -> Self;
+        Self::ceil(self) -> Self;
+        Self::round(self) -> Self;
+        Self::trunc(self) -> Self;
+        Self::fract(self) -> Self;
+        Self::abs(self) -> Self;
+        Self::signum(self) -> Self;
+        Self::powi(self, n: i32) -> Self;
+    }
+
+    #[cfg(all(not(feature = "std"), feature = "libm"))]
+    forward! {
+        libm::floor as floor(self) -> Self;
+        libm::ceil as ceil(self) -> Self;
+        libm::round as round(self) -> Self;
+        libm::trunc as trunc(self) -> Self;
+        libm::fabs as abs(self) -> Self;
+    }
+
+    #[cfg(all(not(feature = "std"), feature = "libm"))]
+    #[inline]
+    fn fract(self) -> Self {
+        self - libm::trunc(self)
+    }
+}
+
+// FIXME: these doctests aren't actually helpful, because they're using and
+// testing the inherent methods directly, not going through `Float`.
+
+/// Generic trait for floating point numbers
+///
+/// This trait is only available with the `std` feature, or with the `libm` feature otherwise.
+#[cfg(any(feature = "std", feature = "libm"))]
+pub trait Float: Num + Copy + NumCast + PartialOrd + Neg<Output = Self> {
+    /// Returns the `NaN` value.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let nan: f32 = Float::nan();
+    ///
+    /// assert!(nan.is_nan());
+    /// ```
+    fn nan() -> Self;
+    /// Returns the infinite value.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f32;
+    ///
+    /// let infinity: f32 = Float::infinity();
+    ///
+    /// assert!(infinity.is_infinite());
+    /// assert!(!infinity.is_finite());
+    /// assert!(infinity > f32::MAX);
+    /// ```
+    fn infinity() -> Self;
+    /// Returns the negative infinite value.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f32;
+    ///
+    /// let neg_infinity: f32 = Float::neg_infinity();
+    ///
+    /// assert!(neg_infinity.is_infinite());
+    /// assert!(!neg_infinity.is_finite());
+    /// assert!(neg_infinity < f32::MIN);
+    /// ```
+    fn neg_infinity() -> Self;
+    /// Returns `-0.0`.
+    ///
+    /// ```
+    /// use num_traits::{Zero, Float};
+    ///
+    /// let inf: f32 = Float::infinity();
+    /// let zero: f32 = Zero::zero();
+    /// let neg_zero: f32 = Float::neg_zero();
+    ///
+    /// assert_eq!(zero, neg_zero);
+    /// assert_eq!(7.0f32/inf, zero);
+    /// assert_eq!(zero * 10.0, zero);
+    /// ```
+    fn neg_zero() -> Self;
+
+    /// Returns the smallest finite value that this type can represent.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x: f64 = Float::min_value();
+    ///
+    /// assert_eq!(x, f64::MIN);
+    /// ```
+    fn min_value() -> Self;
+
+    /// Returns the smallest positive, normalized value that this type can represent.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x: f64 = Float::min_positive_value();
+    ///
+    /// assert_eq!(x, f64::MIN_POSITIVE);
+    /// ```
+    fn min_positive_value() -> Self;
+
+    /// Returns epsilon, a small positive value.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x: f64 = Float::epsilon();
+    ///
+    /// assert_eq!(x, f64::EPSILON);
+    /// ```
+    ///
+    /// # Panics
+    ///
+    /// The default implementation will panic if `f32::EPSILON` cannot
+    /// be cast to `Self`.
+    fn epsilon() -> Self {
+        Self::from(f32::EPSILON).expect("Unable to cast from f32::EPSILON")
+    }
+
+    /// Returns the largest finite value that this type can represent.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x: f64 = Float::max_value();
+    /// assert_eq!(x, f64::MAX);
+    /// ```
+    fn max_value() -> Self;
+
+    /// Returns `true` if this value is `NaN` and false otherwise.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let nan = f64::NAN;
+    /// let f = 7.0;
+    ///
+    /// assert!(nan.is_nan());
+    /// assert!(!f.is_nan());
+    /// ```
+    fn is_nan(self) -> bool;
+
+    /// Returns `true` if this value is positive infinity or negative infinity and
+    /// false otherwise.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f32;
+    ///
+    /// let f = 7.0f32;
+    /// let inf: f32 = Float::infinity();
+    /// let neg_inf: f32 = Float::neg_infinity();
+    /// let nan: f32 = f32::NAN;
+    ///
+    /// assert!(!f.is_infinite());
+    /// assert!(!nan.is_infinite());
+    ///
+    /// assert!(inf.is_infinite());
+    /// assert!(neg_inf.is_infinite());
+    /// ```
+    fn is_infinite(self) -> bool;
+
+    /// Returns `true` if this number is neither infinite nor `NaN`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f32;
+    ///
+    /// let f = 7.0f32;
+    /// let inf: f32 = Float::infinity();
+    /// let neg_inf: f32 = Float::neg_infinity();
+    /// let nan: f32 = f32::NAN;
+    ///
+    /// assert!(f.is_finite());
+    ///
+    /// assert!(!nan.is_finite());
+    /// assert!(!inf.is_finite());
+    /// assert!(!neg_inf.is_finite());
+    /// ```
+    fn is_finite(self) -> bool;
+
+    /// Returns `true` if the number is neither zero, infinite,
+    /// [subnormal][subnormal], or `NaN`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f32;
+    ///
+    /// let min = f32::MIN_POSITIVE; // 1.17549435e-38f32
+    /// let max = f32::MAX;
+    /// let lower_than_min = 1.0e-40_f32;
+    /// let zero = 0.0f32;
+    ///
+    /// assert!(min.is_normal());
+    /// assert!(max.is_normal());
+    ///
+    /// assert!(!zero.is_normal());
+    /// assert!(!f32::NAN.is_normal());
+    /// assert!(!f32::INFINITY.is_normal());
+    /// // Values between `0` and `min` are Subnormal.
+    /// assert!(!lower_than_min.is_normal());
+    /// ```
+    /// [subnormal]: http://en.wikipedia.org/wiki/Subnormal_number
+    fn is_normal(self) -> bool;
+
+    /// Returns `true` if the number is [subnormal].
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let min = f64::MIN_POSITIVE; // 2.2250738585072014e-308_f64
+    /// let max = f64::MAX;
+    /// let lower_than_min = 1.0e-308_f64;
+    /// let zero = 0.0_f64;
+    ///
+    /// assert!(!min.is_subnormal());
+    /// assert!(!max.is_subnormal());
+    ///
+    /// assert!(!zero.is_subnormal());
+    /// assert!(!f64::NAN.is_subnormal());
+    /// assert!(!f64::INFINITY.is_subnormal());
+    /// // Values between `0` and `min` are Subnormal.
+    /// assert!(lower_than_min.is_subnormal());
+    /// ```
+    /// [subnormal]: https://en.wikipedia.org/wiki/Subnormal_number
+    #[inline]
+    fn is_subnormal(self) -> bool {
+        self.classify() == FpCategory::Subnormal
+    }
+
+    /// Returns the floating point category of the number. If only one property
+    /// is going to be tested, it is generally faster to use the specific
+    /// predicate instead.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::num::FpCategory;
+    /// use std::f32;
+    ///
+    /// let num = 12.4f32;
+    /// let inf = f32::INFINITY;
+    ///
+    /// assert_eq!(num.classify(), FpCategory::Normal);
+    /// assert_eq!(inf.classify(), FpCategory::Infinite);
+    /// ```
+    fn classify(self) -> FpCategory;
+
+    /// Returns the largest integer less than or equal to a number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let f = 3.99;
+    /// let g = 3.0;
+    ///
+    /// assert_eq!(f.floor(), 3.0);
+    /// assert_eq!(g.floor(), 3.0);
+    /// ```
+    fn floor(self) -> Self;
+
+    /// Returns the smallest integer greater than or equal to a number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let f = 3.01;
+    /// let g = 4.0;
+    ///
+    /// assert_eq!(f.ceil(), 4.0);
+    /// assert_eq!(g.ceil(), 4.0);
+    /// ```
+    fn ceil(self) -> Self;
+
+    /// Returns the nearest integer to a number. Round half-way cases away from
+    /// `0.0`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let f = 3.3;
+    /// let g = -3.3;
+    ///
+    /// assert_eq!(f.round(), 3.0);
+    /// assert_eq!(g.round(), -3.0);
+    /// ```
+    fn round(self) -> Self;
+
+    /// Return the integer part of a number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let f = 3.3;
+    /// let g = -3.7;
+    ///
+    /// assert_eq!(f.trunc(), 3.0);
+    /// assert_eq!(g.trunc(), -3.0);
+    /// ```
+    fn trunc(self) -> Self;
+
+    /// Returns the fractional part of a number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 3.5;
+    /// let y = -3.5;
+    /// let abs_difference_x = (x.fract() - 0.5).abs();
+    /// let abs_difference_y = (y.fract() - (-0.5)).abs();
+    ///
+    /// assert!(abs_difference_x < 1e-10);
+    /// assert!(abs_difference_y < 1e-10);
+    /// ```
+    fn fract(self) -> Self;
+
+    /// Computes the absolute value of `self`. Returns `Float::nan()` if the
+    /// number is `Float::nan()`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x = 3.5;
+    /// let y = -3.5;
+    ///
+    /// let abs_difference_x = (x.abs() - x).abs();
+    /// let abs_difference_y = (y.abs() - (-y)).abs();
+    ///
+    /// assert!(abs_difference_x < 1e-10);
+    /// assert!(abs_difference_y < 1e-10);
+    ///
+    /// assert!(f64::NAN.abs().is_nan());
+    /// ```
+    fn abs(self) -> Self;
+
+    /// Returns a number that represents the sign of `self`.
+    ///
+    /// - `1.0` if the number is positive, `+0.0` or `Float::infinity()`
+    /// - `-1.0` if the number is negative, `-0.0` or `Float::neg_infinity()`
+    /// - `Float::nan()` if the number is `Float::nan()`
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let f = 3.5;
+    ///
+    /// assert_eq!(f.signum(), 1.0);
+    /// assert_eq!(f64::NEG_INFINITY.signum(), -1.0);
+    ///
+    /// assert!(f64::NAN.signum().is_nan());
+    /// ```
+    fn signum(self) -> Self;
+
+    /// Returns `true` if `self` is positive, including `+0.0`,
+    /// `Float::infinity()`, and `Float::nan()`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let nan: f64 = f64::NAN;
+    /// let neg_nan: f64 = -f64::NAN;
+    ///
+    /// let f = 7.0;
+    /// let g = -7.0;
+    ///
+    /// assert!(f.is_sign_positive());
+    /// assert!(!g.is_sign_positive());
+    /// assert!(nan.is_sign_positive());
+    /// assert!(!neg_nan.is_sign_positive());
+    /// ```
+    fn is_sign_positive(self) -> bool;
+
+    /// Returns `true` if `self` is negative, including `-0.0`,
+    /// `Float::neg_infinity()`, and `-Float::nan()`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let nan: f64 = f64::NAN;
+    /// let neg_nan: f64 = -f64::NAN;
+    ///
+    /// let f = 7.0;
+    /// let g = -7.0;
+    ///
+    /// assert!(!f.is_sign_negative());
+    /// assert!(g.is_sign_negative());
+    /// assert!(!nan.is_sign_negative());
+    /// assert!(neg_nan.is_sign_negative());
+    /// ```
+    fn is_sign_negative(self) -> bool;
+
+    /// Fused multiply-add. Computes `(self * a) + b` with only one rounding
+    /// error, yielding a more accurate result than an unfused multiply-add.
+    ///
+    /// Using `mul_add` can be more performant than an unfused multiply-add if
+    /// the target architecture has a dedicated `fma` CPU instruction.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let m = 10.0;
+    /// let x = 4.0;
+    /// let b = 60.0;
+    ///
+    /// // 100.0
+    /// let abs_difference = (m.mul_add(x, b) - (m*x + b)).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn mul_add(self, a: Self, b: Self) -> Self;
+    /// Take the reciprocal (inverse) of a number, `1/x`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 2.0;
+    /// let abs_difference = (x.recip() - (1.0/x)).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn recip(self) -> Self;
+
+    /// Raise a number to an integer power.
+    ///
+    /// Using this function is generally faster than using `powf`
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 2.0;
+    /// let abs_difference = (x.powi(2) - x*x).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn powi(self, n: i32) -> Self;
+
+    /// Raise a number to a floating point power.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 2.0;
+    /// let abs_difference = (x.powf(2.0) - x*x).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn powf(self, n: Self) -> Self;
+
+    /// Take the square root of a number.
+    ///
+    /// Returns NaN if `self` is a negative number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let positive = 4.0;
+    /// let negative = -4.0;
+    ///
+    /// let abs_difference = (positive.sqrt() - 2.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// assert!(negative.sqrt().is_nan());
+    /// ```
+    fn sqrt(self) -> Self;
+
+    /// Returns `e^(self)`, (the exponential function).
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let one = 1.0;
+    /// // e^1
+    /// let e = one.exp();
+    ///
+    /// // ln(e) - 1 == 0
+    /// let abs_difference = (e.ln() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn exp(self) -> Self;
+
+    /// Returns `2^(self)`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let f = 2.0;
+    ///
+    /// // 2^2 - 4 == 0
+    /// let abs_difference = (f.exp2() - 4.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn exp2(self) -> Self;
+
+    /// Returns the natural logarithm of the number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let one = 1.0;
+    /// // e^1
+    /// let e = one.exp();
+    ///
+    /// // ln(e) - 1 == 0
+    /// let abs_difference = (e.ln() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn ln(self) -> Self;
+
+    /// Returns the logarithm of the number with respect to an arbitrary base.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let ten = 10.0;
+    /// let two = 2.0;
+    ///
+    /// // log10(10) - 1 == 0
+    /// let abs_difference_10 = (ten.log(10.0) - 1.0).abs();
+    ///
+    /// // log2(2) - 1 == 0
+    /// let abs_difference_2 = (two.log(2.0) - 1.0).abs();
+    ///
+    /// assert!(abs_difference_10 < 1e-10);
+    /// assert!(abs_difference_2 < 1e-10);
+    /// ```
+    fn log(self, base: Self) -> Self;
+
+    /// Returns the base 2 logarithm of the number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let two = 2.0;
+    ///
+    /// // log2(2) - 1 == 0
+    /// let abs_difference = (two.log2() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn log2(self) -> Self;
+
+    /// Returns the base 10 logarithm of the number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let ten = 10.0;
+    ///
+    /// // log10(10) - 1 == 0
+    /// let abs_difference = (ten.log10() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn log10(self) -> Self;
+
+    /// Converts radians to degrees.
+    ///
+    /// ```
+    /// use std::f64::consts;
+    ///
+    /// let angle = consts::PI;
+    ///
+    /// let abs_difference = (angle.to_degrees() - 180.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    #[inline]
+    fn to_degrees(self) -> Self {
+        let halfpi = Self::zero().acos();
+        let ninety = Self::from(90u8).unwrap();
+        self * ninety / halfpi
+    }
+
+    /// Converts degrees to radians.
+    ///
+    /// ```
+    /// use std::f64::consts;
+    ///
+    /// let angle = 180.0_f64;
+    ///
+    /// let abs_difference = (angle.to_radians() - consts::PI).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    #[inline]
+    fn to_radians(self) -> Self {
+        let halfpi = Self::zero().acos();
+        let ninety = Self::from(90u8).unwrap();
+        self * halfpi / ninety
+    }
+
+    /// Returns the maximum of the two numbers.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 1.0;
+    /// let y = 2.0;
+    ///
+    /// assert_eq!(x.max(y), y);
+    /// ```
+    fn max(self, other: Self) -> Self;
+
+    /// Returns the minimum of the two numbers.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 1.0;
+    /// let y = 2.0;
+    ///
+    /// assert_eq!(x.min(y), x);
+    /// ```
+    fn min(self, other: Self) -> Self;
+
+    /// Clamps a value between a min and max.
+    ///
+    /// **Panics** in debug mode if `!(min <= max)`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 1.0;
+    /// let y = 2.0;
+    /// let z = 3.0;
+    ///
+    /// assert_eq!(x.clamp(y, z), 2.0);
+    /// ```
+    fn clamp(self, min: Self, max: Self) -> Self {
+        crate::clamp(self, min, max)
+    }
+
+    /// The positive difference of two numbers.
+    ///
+    /// * If `self <= other`: `0:0`
+    /// * Else: `self - other`
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 3.0;
+    /// let y = -3.0;
+    ///
+    /// let abs_difference_x = (x.abs_sub(1.0) - 2.0).abs();
+    /// let abs_difference_y = (y.abs_sub(1.0) - 0.0).abs();
+    ///
+    /// assert!(abs_difference_x < 1e-10);
+    /// assert!(abs_difference_y < 1e-10);
+    /// ```
+    fn abs_sub(self, other: Self) -> Self;
+
+    /// Take the cubic root of a number.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 8.0;
+    ///
+    /// // x^(1/3) - 2 == 0
+    /// let abs_difference = (x.cbrt() - 2.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn cbrt(self) -> Self;
+
+    /// Calculate the length of the hypotenuse of a right-angle triangle given
+    /// legs of length `x` and `y`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 2.0;
+    /// let y = 3.0;
+    ///
+    /// // sqrt(x^2 + y^2)
+    /// let abs_difference = (x.hypot(y) - (x.powi(2) + y.powi(2)).sqrt()).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn hypot(self, other: Self) -> Self;
+
+    /// Computes the sine of a number (in radians).
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x = f64::consts::PI/2.0;
+    ///
+    /// let abs_difference = (x.sin() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn sin(self) -> Self;
+
+    /// Computes the cosine of a number (in radians).
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x = 2.0*f64::consts::PI;
+    ///
+    /// let abs_difference = (x.cos() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn cos(self) -> Self;
+
+    /// Computes the tangent of a number (in radians).
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x = f64::consts::PI/4.0;
+    /// let abs_difference = (x.tan() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-14);
+    /// ```
+    fn tan(self) -> Self;
+
+    /// Computes the arcsine of a number. Return value is in radians in
+    /// the range [-pi/2, pi/2] or NaN if the number is outside the range
+    /// [-1, 1].
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let f = f64::consts::PI / 2.0;
+    ///
+    /// // asin(sin(pi/2))
+    /// let abs_difference = (f.sin().asin() - f64::consts::PI / 2.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn asin(self) -> Self;
+
+    /// Computes the arccosine of a number. Return value is in radians in
+    /// the range [0, pi] or NaN if the number is outside the range
+    /// [-1, 1].
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let f = f64::consts::PI / 4.0;
+    ///
+    /// // acos(cos(pi/4))
+    /// let abs_difference = (f.cos().acos() - f64::consts::PI / 4.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn acos(self) -> Self;
+
+    /// Computes the arctangent of a number. Return value is in radians in the
+    /// range [-pi/2, pi/2];
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let f = 1.0;
+    ///
+    /// // atan(tan(1))
+    /// let abs_difference = (f.tan().atan() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn atan(self) -> Self;
+
+    /// Computes the four quadrant arctangent of `self` (`y`) and `other` (`x`).
+    ///
+    /// * `x = 0`, `y = 0`: `0`
+    /// * `x >= 0`: `arctan(y/x)` -> `[-pi/2, pi/2]`
+    /// * `y >= 0`: `arctan(y/x) + pi` -> `(pi/2, pi]`
+    /// * `y < 0`: `arctan(y/x) - pi` -> `(-pi, -pi/2)`
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let pi = f64::consts::PI;
+    /// // All angles from horizontal right (+x)
+    /// // 45 deg counter-clockwise
+    /// let x1 = 3.0;
+    /// let y1 = -3.0;
+    ///
+    /// // 135 deg clockwise
+    /// let x2 = -3.0;
+    /// let y2 = 3.0;
+    ///
+    /// let abs_difference_1 = (y1.atan2(x1) - (-pi/4.0)).abs();
+    /// let abs_difference_2 = (y2.atan2(x2) - 3.0*pi/4.0).abs();
+    ///
+    /// assert!(abs_difference_1 < 1e-10);
+    /// assert!(abs_difference_2 < 1e-10);
+    /// ```
+    fn atan2(self, other: Self) -> Self;
+
+    /// Simultaneously computes the sine and cosine of the number, `x`. Returns
+    /// `(sin(x), cos(x))`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x = f64::consts::PI/4.0;
+    /// let f = x.sin_cos();
+    ///
+    /// let abs_difference_0 = (f.0 - x.sin()).abs();
+    /// let abs_difference_1 = (f.1 - x.cos()).abs();
+    ///
+    /// assert!(abs_difference_0 < 1e-10);
+    /// assert!(abs_difference_0 < 1e-10);
+    /// ```
+    fn sin_cos(self) -> (Self, Self);
+
+    /// Returns `e^(self) - 1` in a way that is accurate even if the
+    /// number is close to zero.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 7.0;
+    ///
+    /// // e^(ln(7)) - 1
+    /// let abs_difference = (x.ln().exp_m1() - 6.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn exp_m1(self) -> Self;
+
+    /// Returns `ln(1+n)` (natural logarithm) more accurately than if
+    /// the operations were performed separately.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let x = f64::consts::E - 1.0;
+    ///
+    /// // ln(1 + (e - 1)) == ln(e) == 1
+    /// let abs_difference = (x.ln_1p() - 1.0).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn ln_1p(self) -> Self;
+
+    /// Hyperbolic sine function.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let e = f64::consts::E;
+    /// let x = 1.0;
+    ///
+    /// let f = x.sinh();
+    /// // Solving sinh() at 1 gives `(e^2-1)/(2e)`
+    /// let g = (e*e - 1.0)/(2.0*e);
+    /// let abs_difference = (f - g).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn sinh(self) -> Self;
+
+    /// Hyperbolic cosine function.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let e = f64::consts::E;
+    /// let x = 1.0;
+    /// let f = x.cosh();
+    /// // Solving cosh() at 1 gives this result
+    /// let g = (e*e + 1.0)/(2.0*e);
+    /// let abs_difference = (f - g).abs();
+    ///
+    /// // Same result
+    /// assert!(abs_difference < 1.0e-10);
+    /// ```
+    fn cosh(self) -> Self;
+
+    /// Hyperbolic tangent function.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let e = f64::consts::E;
+    /// let x = 1.0;
+    ///
+    /// let f = x.tanh();
+    /// // Solving tanh() at 1 gives `(1 - e^(-2))/(1 + e^(-2))`
+    /// let g = (1.0 - e.powi(-2))/(1.0 + e.powi(-2));
+    /// let abs_difference = (f - g).abs();
+    ///
+    /// assert!(abs_difference < 1.0e-10);
+    /// ```
+    fn tanh(self) -> Self;
+
+    /// Inverse hyperbolic sine function.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 1.0;
+    /// let f = x.sinh().asinh();
+    ///
+    /// let abs_difference = (f - x).abs();
+    ///
+    /// assert!(abs_difference < 1.0e-10);
+    /// ```
+    fn asinh(self) -> Self;
+
+    /// Inverse hyperbolic cosine function.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let x = 1.0;
+    /// let f = x.cosh().acosh();
+    ///
+    /// let abs_difference = (f - x).abs();
+    ///
+    /// assert!(abs_difference < 1.0e-10);
+    /// ```
+    fn acosh(self) -> Self;
+
+    /// Inverse hyperbolic tangent function.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    /// use std::f64;
+    ///
+    /// let e = f64::consts::E;
+    /// let f = e.tanh().atanh();
+    ///
+    /// let abs_difference = (f - e).abs();
+    ///
+    /// assert!(abs_difference < 1.0e-10);
+    /// ```
+    fn atanh(self) -> Self;
+
+    /// Returns the mantissa, base 2 exponent, and sign as integers, respectively.
+    /// The original number can be recovered by `sign * mantissa * 2 ^ exponent`.
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let num = 2.0f32;
+    ///
+    /// // (8388608, -22, 1)
+    /// let (mantissa, exponent, sign) = Float::integer_decode(num);
+    /// let sign_f = sign as f32;
+    /// let mantissa_f = mantissa as f32;
+    /// let exponent_f = num.powf(exponent as f32);
+    ///
+    /// // 1 * 8388608 * 2^(-22) == 2
+    /// let abs_difference = (sign_f * mantissa_f * exponent_f - num).abs();
+    ///
+    /// assert!(abs_difference < 1e-10);
+    /// ```
+    fn integer_decode(self) -> (u64, i16, i8);
+
+    /// Returns a number composed of the magnitude of `self` and the sign of
+    /// `sign`.
+    ///
+    /// Equal to `self` if the sign of `self` and `sign` are the same, otherwise
+    /// equal to `-self`. If `self` is a `NAN`, then a `NAN` with the sign of
+    /// `sign` is returned.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::Float;
+    ///
+    /// let f = 3.5_f32;
+    ///
+    /// assert_eq!(f.copysign(0.42), 3.5_f32);
+    /// assert_eq!(f.copysign(-0.42), -3.5_f32);
+    /// assert_eq!((-f).copysign(0.42), 3.5_f32);
+    /// assert_eq!((-f).copysign(-0.42), -3.5_f32);
+    ///
+    /// assert!(f32::nan().copysign(1.0).is_nan());
+    /// ```
+    fn copysign(self, sign: Self) -> Self {
+        if self.is_sign_negative() == sign.is_sign_negative() {
+            self
+        } else {
+            self.neg()
+        }
+    }
+}
+
+#[cfg(feature = "std")]
+macro_rules! float_impl_std {
+    ($T:ident $decode:ident) => {
+        impl Float for $T {
+            constant! {
+                nan() -> $T::NAN;
+                infinity() -> $T::INFINITY;
+                neg_infinity() -> $T::NEG_INFINITY;
+                neg_zero() -> -0.0;
+                min_value() -> $T::MIN;
+                min_positive_value() -> $T::MIN_POSITIVE;
+                epsilon() -> $T::EPSILON;
+                max_value() -> $T::MAX;
+            }
+
+            #[inline]
+            #[allow(deprecated)]
+            fn abs_sub(self, other: Self) -> Self {
+                <$T>::abs_sub(self, other)
+            }
+
+            #[inline]
+            fn integer_decode(self) -> (u64, i16, i8) {
+                $decode(self)
+            }
+
+            forward! {
+                Self::is_nan(self) -> bool;
+                Self::is_infinite(self) -> bool;
+                Self::is_finite(self) -> bool;
+                Self::is_normal(self) -> bool;
+                Self::is_subnormal(self) -> bool;
+                Self::classify(self) -> FpCategory;
+                Self::clamp(self, min: Self, max: Self) -> Self;
+                Self::floor(self) -> Self;
+                Self::ceil(self) -> Self;
+                Self::round(self) -> Self;
+                Self::trunc(self) -> Self;
+                Self::fract(self) -> Self;
+                Self::abs(self) -> Self;
+                Self::signum(self) -> Self;
+                Self::is_sign_positive(self) -> bool;
+                Self::is_sign_negative(self) -> bool;
+                Self::mul_add(self, a: Self, b: Self) -> Self;
+                Self::recip(self) -> Self;
+                Self::powi(self, n: i32) -> Self;
+                Self::powf(self, n: Self) -> Self;
+                Self::sqrt(self) -> Self;
+                Self::exp(self) -> Self;
+                Self::exp2(self) -> Self;
+                Self::ln(self) -> Self;
+                Self::log(self, base: Self) -> Self;
+                Self::log2(self) -> Self;
+                Self::log10(self) -> Self;
+                Self::to_degrees(self) -> Self;
+                Self::to_radians(self) -> Self;
+                Self::max(self, other: Self) -> Self;
+                Self::min(self, other: Self) -> Self;
+                Self::cbrt(self) -> Self;
+                Self::hypot(self, other: Self) -> Self;
+                Self::sin(self) -> Self;
+                Self::cos(self) -> Self;
+                Self::tan(self) -> Self;
+                Self::asin(self) -> Self;
+                Self::acos(self) -> Self;
+                Self::atan(self) -> Self;
+                Self::atan2(self, other: Self) -> Self;
+                Self::sin_cos(self) -> (Self, Self);
+                Self::exp_m1(self) -> Self;
+                Self::ln_1p(self) -> Self;
+                Self::sinh(self) -> Self;
+                Self::cosh(self) -> Self;
+                Self::tanh(self) -> Self;
+                Self::asinh(self) -> Self;
+                Self::acosh(self) -> Self;
+                Self::atanh(self) -> Self;
+                Self::copysign(self, sign: Self) -> Self;
+            }
+        }
+    };
+}
+
+#[cfg(all(not(feature = "std"), feature = "libm"))]
+macro_rules! float_impl_libm {
+    ($T:ident $decode:ident) => {
+        constant! {
+            nan() -> $T::NAN;
+            infinity() -> $T::INFINITY;
+            neg_infinity() -> $T::NEG_INFINITY;
+            neg_zero() -> -0.0;
+            min_value() -> $T::MIN;
+            min_positive_value() -> $T::MIN_POSITIVE;
+            epsilon() -> $T::EPSILON;
+            max_value() -> $T::MAX;
+        }
+
+        #[inline]
+        fn integer_decode(self) -> (u64, i16, i8) {
+            $decode(self)
+        }
+
+        #[inline]
+        fn fract(self) -> Self {
+            self - Float::trunc(self)
+        }
+
+        #[inline]
+        fn log(self, base: Self) -> Self {
+            self.ln() / base.ln()
+        }
+
+        forward! {
+            Self::is_nan(self) -> bool;
+            Self::is_infinite(self) -> bool;
+            Self::is_finite(self) -> bool;
+            Self::is_normal(self) -> bool;
+            Self::is_subnormal(self) -> bool;
+            Self::clamp(self, min: Self, max: Self) -> Self;
+            Self::classify(self) -> FpCategory;
+            Self::is_sign_positive(self) -> bool;
+            Self::is_sign_negative(self) -> bool;
+            Self::min(self, other: Self) -> Self;
+            Self::max(self, other: Self) -> Self;
+            Self::recip(self) -> Self;
+            Self::to_degrees(self) -> Self;
+            Self::to_radians(self) -> Self;
+        }
+
+        forward! {
+            FloatCore::signum(self) -> Self;
+            FloatCore::powi(self, n: i32) -> Self;
+        }
+    };
+}
+
+fn integer_decode_f32(f: f32) -> (u64, i16, i8) {
+    let bits: u32 = f.to_bits();
+    let sign: i8 = if bits >> 31 == 0 { 1 } else { -1 };
+    let mut exponent: i16 = ((bits >> 23) & 0xff) as i16;
+    let mantissa = if exponent == 0 {
+        (bits & 0x7fffff) << 1
+    } else {
+        (bits & 0x7fffff) | 0x800000
+    };
+    // Exponent bias + mantissa shift
+    exponent -= 127 + 23;
+    (mantissa as u64, exponent, sign)
+}
+
+fn integer_decode_f64(f: f64) -> (u64, i16, i8) {
+    let bits: u64 = f.to_bits();
+    let sign: i8 = if bits >> 63 == 0 { 1 } else { -1 };
+    let mut exponent: i16 = ((bits >> 52) & 0x7ff) as i16;
+    let mantissa = if exponent == 0 {
+        (bits & 0xfffffffffffff) << 1
+    } else {
+        (bits & 0xfffffffffffff) | 0x10000000000000
+    };
+    // Exponent bias + mantissa shift
+    exponent -= 1023 + 52;
+    (mantissa, exponent, sign)
+}
+
+#[cfg(feature = "std")]
+float_impl_std!(f32 integer_decode_f32);
+#[cfg(feature = "std")]
+float_impl_std!(f64 integer_decode_f64);
+
+#[cfg(all(not(feature = "std"), feature = "libm"))]
+impl Float for f32 {
+    float_impl_libm!(f32 integer_decode_f32);
+
+    #[inline]
+    #[allow(deprecated)]
+    fn abs_sub(self, other: Self) -> Self {
+        libm::fdimf(self, other)
+    }
+
+    forward! {
+        libm::floorf as floor(self) -> Self;
+        libm::ceilf as ceil(self) -> Self;
+        libm::roundf as round(self) -> Self;
+        libm::truncf as trunc(self) -> Self;
+        libm::fabsf as abs(self) -> Self;
+        libm::fmaf as mul_add(self, a: Self, b: Self) -> Self;
+        libm::powf as powf(self, n: Self) -> Self;
+        libm::sqrtf as sqrt(self) -> Self;
+        libm::expf as exp(self) -> Self;
+        libm::exp2f as exp2(self) -> Self;
+        libm::logf as ln(self) -> Self;
+        libm::log2f as log2(self) -> Self;
+        libm::log10f as log10(self) -> Self;
+        libm::cbrtf as cbrt(self) -> Self;
+        libm::hypotf as hypot(self, other: Self) -> Self;
+        libm::sinf as sin(self) -> Self;
+        libm::cosf as cos(self) -> Self;
+        libm::tanf as tan(self) -> Self;
+        libm::asinf as asin(self) -> Self;
+        libm::acosf as acos(self) -> Self;
+        libm::atanf as atan(self) -> Self;
+        libm::atan2f as atan2(self, other: Self) -> Self;
+        libm::sincosf as sin_cos(self) -> (Self, Self);
+        libm::expm1f as exp_m1(self) -> Self;
+        libm::log1pf as ln_1p(self) -> Self;
+        libm::sinhf as sinh(self) -> Self;
+        libm::coshf as cosh(self) -> Self;
+        libm::tanhf as tanh(self) -> Self;
+        libm::asinhf as asinh(self) -> Self;
+        libm::acoshf as acosh(self) -> Self;
+        libm::atanhf as atanh(self) -> Self;
+        libm::copysignf as copysign(self, other: Self) -> Self;
+    }
+}
+
+#[cfg(all(not(feature = "std"), feature = "libm"))]
+impl Float for f64 {
+    float_impl_libm!(f64 integer_decode_f64);
+
+    #[inline]
+    #[allow(deprecated)]
+    fn abs_sub(self, other: Self) -> Self {
+        libm::fdim(self, other)
+    }
+
+    forward! {
+        libm::floor as floor(self) -> Self;
+        libm::ceil as ceil(self) -> Self;
+        libm::round as round(self) -> Self;
+        libm::trunc as trunc(self) -> Self;
+        libm::fabs as abs(self) -> Self;
+        libm::fma as mul_add(self, a: Self, b: Self) -> Self;
+        libm::pow as powf(self, n: Self) -> Self;
+        libm::sqrt as sqrt(self) -> Self;
+        libm::exp as exp(self) -> Self;
+        libm::exp2 as exp2(self) -> Self;
+        libm::log as ln(self) -> Self;
+        libm::log2 as log2(self) -> Self;
+        libm::log10 as log10(self) -> Self;
+        libm::cbrt as cbrt(self) -> Self;
+        libm::hypot as hypot(self, other: Self) -> Self;
+        libm::sin as sin(self) -> Self;
+        libm::cos as cos(self) -> Self;
+        libm::tan as tan(self) -> Self;
+        libm::asin as asin(self) -> Self;
+        libm::acos as acos(self) -> Self;
+        libm::atan as atan(self) -> Self;
+        libm::atan2 as atan2(self, other: Self) -> Self;
+        libm::sincos as sin_cos(self) -> (Self, Self);
+        libm::expm1 as exp_m1(self) -> Self;
+        libm::log1p as ln_1p(self) -> Self;
+        libm::sinh as sinh(self) -> Self;
+        libm::cosh as cosh(self) -> Self;
+        libm::tanh as tanh(self) -> Self;
+        libm::asinh as asinh(self) -> Self;
+        libm::acosh as acosh(self) -> Self;
+        libm::atanh as atanh(self) -> Self;
+        libm::copysign as copysign(self, sign: Self) -> Self;
+    }
+}
+
+macro_rules! float_const_impl {
+    ($(#[$doc:meta] $constant:ident,)+) => (
+        #[allow(non_snake_case)]
+        pub trait FloatConst {
+            $(#[$doc] fn $constant() -> Self;)+
+            #[doc = "Return the full circle constant `τ`."]
+            #[inline]
+            fn TAU() -> Self where Self: Sized + Add<Self, Output = Self> {
+                Self::PI() + Self::PI()
+            }
+            #[doc = "Return `log10(2.0)`."]
+            #[inline]
+            fn LOG10_2() -> Self where Self: Sized + Div<Self, Output = Self> {
+                Self::LN_2() / Self::LN_10()
+            }
+            #[doc = "Return `log2(10.0)`."]
+            #[inline]
+            fn LOG2_10() -> Self where Self: Sized + Div<Self, Output = Self> {
+                Self::LN_10() / Self::LN_2()
+            }
+        }
+        float_const_impl! { @float f32, $($constant,)+ }
+        float_const_impl! { @float f64, $($constant,)+ }
+    );
+    (@float $T:ident, $($constant:ident,)+) => (
+        impl FloatConst for $T {
+            constant! {
+                $( $constant() -> $T::consts::$constant; )+
+                TAU() -> 6.28318530717958647692528676655900577;
+                LOG10_2() -> 0.301029995663981195213738894724493027;
+                LOG2_10() -> 3.32192809488736234787031942948939018;
+            }
+        }
+    );
+}
+
+float_const_impl! {
+    #[doc = "Return Euler’s number."]
+    E,
+    #[doc = "Return `1.0 / π`."]
+    FRAC_1_PI,
+    #[doc = "Return `1.0 / sqrt(2.0)`."]
+    FRAC_1_SQRT_2,
+    #[doc = "Return `2.0 / π`."]
+    FRAC_2_PI,
+    #[doc = "Return `2.0 / sqrt(π)`."]
+    FRAC_2_SQRT_PI,
+    #[doc = "Return `π / 2.0`."]
+    FRAC_PI_2,
+    #[doc = "Return `π / 3.0`."]
+    FRAC_PI_3,
+    #[doc = "Return `π / 4.0`."]
+    FRAC_PI_4,
+    #[doc = "Return `π / 6.0`."]
+    FRAC_PI_6,
+    #[doc = "Return `π / 8.0`."]
+    FRAC_PI_8,
+    #[doc = "Return `ln(10.0)`."]
+    LN_10,
+    #[doc = "Return `ln(2.0)`."]
+    LN_2,
+    #[doc = "Return `log10(e)`."]
+    LOG10_E,
+    #[doc = "Return `log2(e)`."]
+    LOG2_E,
+    #[doc = "Return Archimedes’ constant `π`."]
+    PI,
+    #[doc = "Return `sqrt(2.0)`."]
+    SQRT_2,
+}
+
+/// Trait for floating point numbers that provide an implementation
+/// of the `totalOrder` predicate as defined in the IEEE 754 (2008 revision)
+/// floating point standard.
+pub trait TotalOrder {
+    /// Return the ordering between `self` and `other`.
+    ///
+    /// Unlike the standard partial comparison between floating point numbers,
+    /// this comparison always produces an ordering in accordance to
+    /// the `totalOrder` predicate as defined in the IEEE 754 (2008 revision)
+    /// floating point standard. The values are ordered in the following sequence:
+    ///
+    /// - negative quiet NaN
+    /// - negative signaling NaN
+    /// - negative infinity
+    /// - negative numbers
+    /// - negative subnormal numbers
+    /// - negative zero
+    /// - positive zero
+    /// - positive subnormal numbers
+    /// - positive numbers
+    /// - positive infinity
+    /// - positive signaling NaN
+    /// - positive quiet NaN.
+    ///
+    /// The ordering established by this function does not always agree with the
+    /// [`PartialOrd`] and [`PartialEq`] implementations. For example,
+    /// they consider negative and positive zero equal, while `total_cmp`
+    /// doesn't.
+    ///
+    /// The interpretation of the signaling NaN bit follows the definition in
+    /// the IEEE 754 standard, which may not match the interpretation by some of
+    /// the older, non-conformant (e.g. MIPS) hardware implementations.
+    ///
+    /// # Examples
+    /// ```
+    /// use num_traits::float::TotalOrder;
+    /// use std::cmp::Ordering;
+    /// use std::{f32, f64};
+    ///
+    /// fn check_eq<T: TotalOrder>(x: T, y: T) {
+    ///     assert_eq!(x.total_cmp(&y), Ordering::Equal);
+    /// }
+    ///
+    /// check_eq(f64::NAN, f64::NAN);
+    /// check_eq(f32::NAN, f32::NAN);
+    ///
+    /// fn check_lt<T: TotalOrder>(x: T, y: T) {
+    ///     assert_eq!(x.total_cmp(&y), Ordering::Less);
+    /// }
+    ///
+    /// check_lt(-f64::NAN, f64::NAN);
+    /// check_lt(f64::INFINITY, f64::NAN);
+    /// check_lt(-0.0_f64, 0.0_f64);
+    /// ```
+    fn total_cmp(&self, other: &Self) -> Ordering;
+}
+macro_rules! totalorder_impl {
+    ($T:ident, $I:ident, $U:ident, $bits:expr) => {
+        impl TotalOrder for $T {
+            #[inline]
+            #[cfg(has_total_cmp)]
+            fn total_cmp(&self, other: &Self) -> Ordering {
+                // Forward to the core implementation
+                Self::total_cmp(&self, other)
+            }
+            #[inline]
+            #[cfg(not(has_total_cmp))]
+            fn total_cmp(&self, other: &Self) -> Ordering {
+                // Backport the core implementation (since 1.62)
+                let mut left = self.to_bits() as $I;
+                let mut right = other.to_bits() as $I;
+
+                left ^= (((left >> ($bits - 1)) as $U) >> 1) as $I;
+                right ^= (((right >> ($bits - 1)) as $U) >> 1) as $I;
+
+                left.cmp(&right)
+            }
+        }
+    };
+}
+totalorder_impl!(f64, i64, u64, 64);
+totalorder_impl!(f32, i32, u32, 32);
+
+#[cfg(test)]
+mod tests {
+    use core::f64::consts;
+
+    const DEG_RAD_PAIRS: [(f64, f64); 7] = [
+        (0.0, 0.),
+        (22.5, consts::FRAC_PI_8),
+        (30.0, consts::FRAC_PI_6),
+        (45.0, consts::FRAC_PI_4),
+        (60.0, consts::FRAC_PI_3),
+        (90.0, consts::FRAC_PI_2),
+        (180.0, consts::PI),
+    ];
+
+    #[test]
+    fn convert_deg_rad() {
+        use crate::float::FloatCore;
+
+        for &(deg, rad) in &DEG_RAD_PAIRS {
+            assert!((FloatCore::to_degrees(rad) - deg).abs() < 1e-6);
+            assert!((FloatCore::to_radians(deg) - rad).abs() < 1e-6);
+
+            let (deg, rad) = (deg as f32, rad as f32);
+            assert!((FloatCore::to_degrees(rad) - deg).abs() < 1e-5);
+            assert!((FloatCore::to_radians(deg) - rad).abs() < 1e-5);
+        }
+    }
+
+    #[cfg(any(feature = "std", feature = "libm"))]
+    #[test]
+    fn convert_deg_rad_std() {
+        for &(deg, rad) in &DEG_RAD_PAIRS {
+            use crate::Float;
+
+            assert!((Float::to_degrees(rad) - deg).abs() < 1e-6);
+            assert!((Float::to_radians(deg) - rad).abs() < 1e-6);
+
+            let (deg, rad) = (deg as f32, rad as f32);
+            assert!((Float::to_degrees(rad) - deg).abs() < 1e-5);
+            assert!((Float::to_radians(deg) - rad).abs() < 1e-5);
+        }
+    }
+
+    #[test]
+    fn to_degrees_rounding() {
+        use crate::float::FloatCore;
+
+        assert_eq!(
+            FloatCore::to_degrees(1_f32),
+            57.2957795130823208767981548141051703
+        );
+    }
+
+    #[test]
+    #[cfg(any(feature = "std", feature = "libm"))]
+    fn extra_logs() {
+        use crate::float::{Float, FloatConst};
+
+        fn check<F: Float + FloatConst>(diff: F) {
+            let _2 = F::from(2.0).unwrap();
+            assert!((F::LOG10_2() - F::log10(_2)).abs() < diff);
+            assert!((F::LOG10_2() - F::LN_2() / F::LN_10()).abs() < diff);
+
+            let _10 = F::from(10.0).unwrap();
+            assert!((F::LOG2_10() - F::log2(_10)).abs() < diff);
+            assert!((F::LOG2_10() - F::LN_10() / F::LN_2()).abs() < diff);
+        }
+
+        check::<f32>(1e-6);
+        check::<f64>(1e-12);
+    }
+
+    #[test]
+    #[cfg(any(feature = "std", feature = "libm"))]
+    fn copysign() {
+        use crate::float::Float;
+        test_copysign_generic(2.0_f32, -2.0_f32, f32::nan());
+        test_copysign_generic(2.0_f64, -2.0_f64, f64::nan());
+        test_copysignf(2.0_f32, -2.0_f32, f32::nan());
+    }
+
+    #[cfg(any(feature = "std", feature = "libm"))]
+    fn test_copysignf(p: f32, n: f32, nan: f32) {
+        use crate::float::Float;
+        use core::ops::Neg;
+
+        assert!(p.is_sign_positive());
+        assert!(n.is_sign_negative());
+        assert!(nan.is_nan());
+
+        assert_eq!(p, Float::copysign(p, p));
+        assert_eq!(p.neg(), Float::copysign(p, n));
+
+        assert_eq!(n, Float::copysign(n, n));
+        assert_eq!(n.neg(), Float::copysign(n, p));
+
+        assert!(Float::copysign(nan, p).is_sign_positive());
+        assert!(Float::copysign(nan, n).is_sign_negative());
+    }
+
+    #[cfg(any(feature = "std", feature = "libm"))]
+    fn test_copysign_generic<F: crate::float::Float + ::core::fmt::Debug>(p: F, n: F, nan: F) {
+        assert!(p.is_sign_positive());
+        assert!(n.is_sign_negative());
+        assert!(nan.is_nan());
+        assert!(!nan.is_subnormal());
+
+        assert_eq!(p, p.copysign(p));
+        assert_eq!(p.neg(), p.copysign(n));
+
+        assert_eq!(n, n.copysign(n));
+        assert_eq!(n.neg(), n.copysign(p));
+
+        assert!(nan.copysign(p).is_sign_positive());
+        assert!(nan.copysign(n).is_sign_negative());
+    }
+
+    #[cfg(any(feature = "std", feature = "libm"))]
+    fn test_subnormal<F: crate::float::Float + ::core::fmt::Debug>() {
+        let min_positive = F::min_positive_value();
+        let lower_than_min = min_positive / F::from(2.0f32).unwrap();
+        assert!(!min_positive.is_subnormal());
+        assert!(lower_than_min.is_subnormal());
+    }
+
+    #[test]
+    #[cfg(any(feature = "std", feature = "libm"))]
+    fn subnormal() {
+        test_subnormal::<f64>();
+        test_subnormal::<f32>();
+    }
+
+    #[test]
+    fn total_cmp() {
+        use crate::float::TotalOrder;
+        use core::cmp::Ordering;
+        use core::{f32, f64};
+
+        fn check_eq<T: TotalOrder>(x: T, y: T) {
+            assert_eq!(x.total_cmp(&y), Ordering::Equal);
+        }
+        fn check_lt<T: TotalOrder>(x: T, y: T) {
+            assert_eq!(x.total_cmp(&y), Ordering::Less);
+        }
+        fn check_gt<T: TotalOrder>(x: T, y: T) {
+            assert_eq!(x.total_cmp(&y), Ordering::Greater);
+        }
+
+        check_eq(f64::NAN, f64::NAN);
+        check_eq(f32::NAN, f32::NAN);
+
+        check_lt(-0.0_f64, 0.0_f64);
+        check_lt(-0.0_f32, 0.0_f32);
+
+        // x87 registers don't preserve the exact value of signaling NaN:
+        // https://github.com/rust-lang/rust/issues/115567
+        #[cfg(not(target_arch = "x86"))]
+        {
+            let s_nan = f64::from_bits(0x7ff4000000000000);
+            let q_nan = f64::from_bits(0x7ff8000000000000);
+            check_lt(s_nan, q_nan);
+
+            let neg_s_nan = f64::from_bits(0xfff4000000000000);
+            let neg_q_nan = f64::from_bits(0xfff8000000000000);
+            check_lt(neg_q_nan, neg_s_nan);
+
+            let s_nan = f32::from_bits(0x7fa00000);
+            let q_nan = f32::from_bits(0x7fc00000);
+            check_lt(s_nan, q_nan);
+
+            let neg_s_nan = f32::from_bits(0xffa00000);
+            let neg_q_nan = f32::from_bits(0xffc00000);
+            check_lt(neg_q_nan, neg_s_nan);
+        }
+
+        check_lt(-f64::NAN, f64::NEG_INFINITY);
+        check_gt(1.0_f64, -f64::NAN);
+        check_lt(f64::INFINITY, f64::NAN);
+        check_gt(f64::NAN, 1.0_f64);
+
+        check_lt(-f32::NAN, f32::NEG_INFINITY);
+        check_gt(1.0_f32, -f32::NAN);
+        check_lt(f32::INFINITY, f32::NAN);
+        check_gt(f32::NAN, 1.0_f32);
+    }
+}
+
\ No newline at end of file diff --git a/src/num_traits/identities.rs.html b/src/num_traits/identities.rs.html new file mode 100644 index 0000000..e7d1dfe --- /dev/null +++ b/src/num_traits/identities.rs.html @@ -0,0 +1,477 @@ +identities.rs - source

num_traits/
identities.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
use core::num::Wrapping;
+use core::ops::{Add, Mul};
+
+/// Defines an additive identity element for `Self`.
+///
+/// # Laws
+///
+/// ```text
+/// a + 0 = a       ∀ a ∈ Self
+/// 0 + a = a       ∀ a ∈ Self
+/// ```
+pub trait Zero: Sized + Add<Self, Output = Self> {
+    /// Returns the additive identity element of `Self`, `0`.
+    /// # Purity
+    ///
+    /// This function should return the same result at all times regardless of
+    /// external mutable state, for example values stored in TLS or in
+    /// `static mut`s.
+    // This cannot be an associated constant, because of bignums.
+    fn zero() -> Self;
+
+    /// Sets `self` to the additive identity element of `Self`, `0`.
+    fn set_zero(&mut self) {
+        *self = Zero::zero();
+    }
+
+    /// Returns `true` if `self` is equal to the additive identity.
+    fn is_zero(&self) -> bool;
+}
+
+/// Defines an associated constant representing the additive identity element
+/// for `Self`.
+pub trait ConstZero: Zero {
+    /// The additive identity element of `Self`, `0`.
+    const ZERO: Self;
+}
+
+macro_rules! zero_impl {
+    ($t:ty, $v:expr) => {
+        impl Zero for $t {
+            #[inline]
+            fn zero() -> $t {
+                $v
+            }
+            #[inline]
+            fn is_zero(&self) -> bool {
+                *self == $v
+            }
+        }
+
+        impl ConstZero for $t {
+            const ZERO: Self = $v;
+        }
+    };
+}
+
+zero_impl!(usize, 0);
+zero_impl!(u8, 0);
+zero_impl!(u16, 0);
+zero_impl!(u32, 0);
+zero_impl!(u64, 0);
+zero_impl!(u128, 0);
+
+zero_impl!(isize, 0);
+zero_impl!(i8, 0);
+zero_impl!(i16, 0);
+zero_impl!(i32, 0);
+zero_impl!(i64, 0);
+zero_impl!(i128, 0);
+
+zero_impl!(f32, 0.0);
+zero_impl!(f64, 0.0);
+
+impl<T: Zero> Zero for Wrapping<T>
+where
+    Wrapping<T>: Add<Output = Wrapping<T>>,
+{
+    fn is_zero(&self) -> bool {
+        self.0.is_zero()
+    }
+
+    fn set_zero(&mut self) {
+        self.0.set_zero();
+    }
+
+    fn zero() -> Self {
+        Wrapping(T::zero())
+    }
+}
+
+impl<T: ConstZero> ConstZero for Wrapping<T>
+where
+    Wrapping<T>: Add<Output = Wrapping<T>>,
+{
+    const ZERO: Self = Wrapping(T::ZERO);
+}
+
+/// Defines a multiplicative identity element for `Self`.
+///
+/// # Laws
+///
+/// ```text
+/// a * 1 = a       ∀ a ∈ Self
+/// 1 * a = a       ∀ a ∈ Self
+/// ```
+pub trait One: Sized + Mul<Self, Output = Self> {
+    /// Returns the multiplicative identity element of `Self`, `1`.
+    ///
+    /// # Purity
+    ///
+    /// This function should return the same result at all times regardless of
+    /// external mutable state, for example values stored in TLS or in
+    /// `static mut`s.
+    // This cannot be an associated constant, because of bignums.
+    fn one() -> Self;
+
+    /// Sets `self` to the multiplicative identity element of `Self`, `1`.
+    fn set_one(&mut self) {
+        *self = One::one();
+    }
+
+    /// Returns `true` if `self` is equal to the multiplicative identity.
+    ///
+    /// For performance reasons, it's best to implement this manually.
+    /// After a semver bump, this method will be required, and the
+    /// `where Self: PartialEq` bound will be removed.
+    #[inline]
+    fn is_one(&self) -> bool
+    where
+        Self: PartialEq,
+    {
+        *self == Self::one()
+    }
+}
+
+/// Defines an associated constant representing the multiplicative identity
+/// element for `Self`.
+pub trait ConstOne: One {
+    /// The multiplicative identity element of `Self`, `1`.
+    const ONE: Self;
+}
+
+macro_rules! one_impl {
+    ($t:ty, $v:expr) => {
+        impl One for $t {
+            #[inline]
+            fn one() -> $t {
+                $v
+            }
+            #[inline]
+            fn is_one(&self) -> bool {
+                *self == $v
+            }
+        }
+
+        impl ConstOne for $t {
+            const ONE: Self = $v;
+        }
+    };
+}
+
+one_impl!(usize, 1);
+one_impl!(u8, 1);
+one_impl!(u16, 1);
+one_impl!(u32, 1);
+one_impl!(u64, 1);
+one_impl!(u128, 1);
+
+one_impl!(isize, 1);
+one_impl!(i8, 1);
+one_impl!(i16, 1);
+one_impl!(i32, 1);
+one_impl!(i64, 1);
+one_impl!(i128, 1);
+
+one_impl!(f32, 1.0);
+one_impl!(f64, 1.0);
+
+impl<T: One> One for Wrapping<T>
+where
+    Wrapping<T>: Mul<Output = Wrapping<T>>,
+{
+    fn set_one(&mut self) {
+        self.0.set_one();
+    }
+
+    fn one() -> Self {
+        Wrapping(T::one())
+    }
+}
+
+impl<T: ConstOne> ConstOne for Wrapping<T>
+where
+    Wrapping<T>: Mul<Output = Wrapping<T>>,
+{
+    const ONE: Self = Wrapping(T::ONE);
+}
+
+// Some helper functions provided for backwards compatibility.
+
+/// Returns the additive identity, `0`.
+#[inline(always)]
+pub fn zero<T: Zero>() -> T {
+    Zero::zero()
+}
+
+/// Returns the multiplicative identity, `1`.
+#[inline(always)]
+pub fn one<T: One>() -> T {
+    One::one()
+}
+
+#[test]
+fn wrapping_identities() {
+    macro_rules! test_wrapping_identities {
+        ($($t:ty)+) => {
+            $(
+                assert_eq!(zero::<$t>(), zero::<Wrapping<$t>>().0);
+                assert_eq!(one::<$t>(), one::<Wrapping<$t>>().0);
+                assert_eq!((0 as $t).is_zero(), Wrapping(0 as $t).is_zero());
+                assert_eq!((1 as $t).is_zero(), Wrapping(1 as $t).is_zero());
+            )+
+        };
+    }
+
+    test_wrapping_identities!(isize i8 i16 i32 i64 usize u8 u16 u32 u64);
+}
+
+#[test]
+fn wrapping_is_zero() {
+    fn require_zero<T: Zero>(_: &T) {}
+    require_zero(&Wrapping(42));
+}
+#[test]
+fn wrapping_is_one() {
+    fn require_one<T: One>(_: &T) {}
+    require_one(&Wrapping(42));
+}
+
\ No newline at end of file diff --git a/src/num_traits/int.rs.html b/src/num_traits/int.rs.html new file mode 100644 index 0000000..28219bf --- /dev/null +++ b/src/num_traits/int.rs.html @@ -0,0 +1,1125 @@ +int.rs - source

num_traits/
int.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
use core::ops::{BitAnd, BitOr, BitXor, Not, Shl, Shr};
+
+use crate::bounds::Bounded;
+use crate::ops::checked::*;
+use crate::ops::saturating::Saturating;
+use crate::{Num, NumCast};
+
+/// Generic trait for primitive integers.
+///
+/// The `PrimInt` trait is an abstraction over the builtin primitive integer types (e.g., `u8`,
+/// `u32`, `isize`, `i128`, ...). It inherits the basic numeric traits and extends them with
+/// bitwise operators and non-wrapping arithmetic.
+///
+/// The trait explicitly inherits `Copy`, `Eq`, `Ord`, and `Sized`. The intention is that all
+/// types implementing this trait behave like primitive types that are passed by value by default
+/// and behave like builtin integers. Furthermore, the types are expected to expose the integer
+/// value in binary representation and support bitwise operators. The standard bitwise operations
+/// (e.g., bitwise-and, bitwise-or, right-shift, left-shift) are inherited and the trait extends
+/// these with introspective queries (e.g., `PrimInt::count_ones()`, `PrimInt::leading_zeros()`),
+/// bitwise combinators (e.g., `PrimInt::rotate_left()`), and endianness converters (e.g.,
+/// `PrimInt::to_be()`).
+///
+/// All `PrimInt` types are expected to be fixed-width binary integers. The width can be queried
+/// via `T::zero().count_zeros()`. The trait currently lacks a way to query the width at
+/// compile-time.
+///
+/// While a default implementation for all builtin primitive integers is provided, the trait is in
+/// no way restricted to these. Other integer types that fulfil the requirements are free to
+/// implement the trait was well.
+///
+/// This trait and many of the method names originate in the unstable `core::num::Int` trait from
+/// the rust standard library. The original trait was never stabilized and thus removed from the
+/// standard library.
+pub trait PrimInt:
+    Sized
+    + Copy
+    + Num
+    + NumCast
+    + Bounded
+    + PartialOrd
+    + Ord
+    + Eq
+    + Not<Output = Self>
+    + BitAnd<Output = Self>
+    + BitOr<Output = Self>
+    + BitXor<Output = Self>
+    + Shl<usize, Output = Self>
+    + Shr<usize, Output = Self>
+    + CheckedAdd<Output = Self>
+    + CheckedSub<Output = Self>
+    + CheckedMul<Output = Self>
+    + CheckedDiv<Output = Self>
+    + Saturating
+{
+    /// Returns the number of ones in the binary representation of `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0b01001100u8;
+    ///
+    /// assert_eq!(n.count_ones(), 3);
+    /// ```
+    fn count_ones(self) -> u32;
+
+    /// Returns the number of zeros in the binary representation of `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0b01001100u8;
+    ///
+    /// assert_eq!(n.count_zeros(), 5);
+    /// ```
+    fn count_zeros(self) -> u32;
+
+    /// Returns the number of leading ones in the binary representation
+    /// of `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0xF00Du16;
+    ///
+    /// assert_eq!(n.leading_ones(), 4);
+    /// ```
+    fn leading_ones(self) -> u32 {
+        (!self).leading_zeros()
+    }
+
+    /// Returns the number of leading zeros in the binary representation
+    /// of `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0b0101000u16;
+    ///
+    /// assert_eq!(n.leading_zeros(), 10);
+    /// ```
+    fn leading_zeros(self) -> u32;
+
+    /// Returns the number of trailing ones in the binary representation
+    /// of `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0xBEEFu16;
+    ///
+    /// assert_eq!(n.trailing_ones(), 4);
+    /// ```
+    fn trailing_ones(self) -> u32 {
+        (!self).trailing_zeros()
+    }
+
+    /// Returns the number of trailing zeros in the binary representation
+    /// of `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0b0101000u16;
+    ///
+    /// assert_eq!(n.trailing_zeros(), 3);
+    /// ```
+    fn trailing_zeros(self) -> u32;
+
+    /// Shifts the bits to the left by a specified amount, `n`, wrapping
+    /// the truncated bits to the end of the resulting integer.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    /// let m = 0x3456789ABCDEF012u64;
+    ///
+    /// assert_eq!(n.rotate_left(12), m);
+    /// ```
+    fn rotate_left(self, n: u32) -> Self;
+
+    /// Shifts the bits to the right by a specified amount, `n`, wrapping
+    /// the truncated bits to the beginning of the resulting integer.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    /// let m = 0xDEF0123456789ABCu64;
+    ///
+    /// assert_eq!(n.rotate_right(12), m);
+    /// ```
+    fn rotate_right(self, n: u32) -> Self;
+
+    /// Shifts the bits to the left by a specified amount, `n`, filling
+    /// zeros in the least significant bits.
+    ///
+    /// This is bitwise equivalent to signed `Shl`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    /// let m = 0x3456789ABCDEF000u64;
+    ///
+    /// assert_eq!(n.signed_shl(12), m);
+    /// ```
+    fn signed_shl(self, n: u32) -> Self;
+
+    /// Shifts the bits to the right by a specified amount, `n`, copying
+    /// the "sign bit" in the most significant bits even for unsigned types.
+    ///
+    /// This is bitwise equivalent to signed `Shr`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0xFEDCBA9876543210u64;
+    /// let m = 0xFFFFEDCBA9876543u64;
+    ///
+    /// assert_eq!(n.signed_shr(12), m);
+    /// ```
+    fn signed_shr(self, n: u32) -> Self;
+
+    /// Shifts the bits to the left by a specified amount, `n`, filling
+    /// zeros in the least significant bits.
+    ///
+    /// This is bitwise equivalent to unsigned `Shl`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFi64;
+    /// let m = 0x3456789ABCDEF000i64;
+    ///
+    /// assert_eq!(n.unsigned_shl(12), m);
+    /// ```
+    fn unsigned_shl(self, n: u32) -> Self;
+
+    /// Shifts the bits to the right by a specified amount, `n`, filling
+    /// zeros in the most significant bits.
+    ///
+    /// This is bitwise equivalent to unsigned `Shr`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = -8i8; // 0b11111000
+    /// let m = 62i8; // 0b00111110
+    ///
+    /// assert_eq!(n.unsigned_shr(2), m);
+    /// ```
+    fn unsigned_shr(self, n: u32) -> Self;
+
+    /// Reverses the byte order of the integer.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    /// let m = 0xEFCDAB8967452301u64;
+    ///
+    /// assert_eq!(n.swap_bytes(), m);
+    /// ```
+    fn swap_bytes(self) -> Self;
+
+    /// Reverses the order of bits in the integer.
+    ///
+    /// The least significant bit becomes the most significant bit, second least-significant bit
+    /// becomes second most-significant bit, etc.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x12345678u32;
+    /// let m = 0x1e6a2c48u32;
+    ///
+    /// assert_eq!(n.reverse_bits(), m);
+    /// assert_eq!(0u32.reverse_bits(), 0);
+    /// ```
+    fn reverse_bits(self) -> Self {
+        reverse_bits_fallback(self)
+    }
+
+    /// Convert an integer from big endian to the target's endianness.
+    ///
+    /// On big endian this is a no-op. On little endian the bytes are swapped.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    ///
+    /// if cfg!(target_endian = "big") {
+    ///     assert_eq!(u64::from_be(n), n)
+    /// } else {
+    ///     assert_eq!(u64::from_be(n), n.swap_bytes())
+    /// }
+    /// ```
+    fn from_be(x: Self) -> Self;
+
+    /// Convert an integer from little endian to the target's endianness.
+    ///
+    /// On little endian this is a no-op. On big endian the bytes are swapped.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    ///
+    /// if cfg!(target_endian = "little") {
+    ///     assert_eq!(u64::from_le(n), n)
+    /// } else {
+    ///     assert_eq!(u64::from_le(n), n.swap_bytes())
+    /// }
+    /// ```
+    fn from_le(x: Self) -> Self;
+
+    /// Convert `self` to big endian from the target's endianness.
+    ///
+    /// On big endian this is a no-op. On little endian the bytes are swapped.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    ///
+    /// if cfg!(target_endian = "big") {
+    ///     assert_eq!(n.to_be(), n)
+    /// } else {
+    ///     assert_eq!(n.to_be(), n.swap_bytes())
+    /// }
+    /// ```
+    fn to_be(self) -> Self;
+
+    /// Convert `self` to little endian from the target's endianness.
+    ///
+    /// On little endian this is a no-op. On big endian the bytes are swapped.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// let n = 0x0123456789ABCDEFu64;
+    ///
+    /// if cfg!(target_endian = "little") {
+    ///     assert_eq!(n.to_le(), n)
+    /// } else {
+    ///     assert_eq!(n.to_le(), n.swap_bytes())
+    /// }
+    /// ```
+    fn to_le(self) -> Self;
+
+    /// Raises self to the power of `exp`, using exponentiation by squaring.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::PrimInt;
+    ///
+    /// assert_eq!(2i32.pow(4), 16);
+    /// ```
+    fn pow(self, exp: u32) -> Self;
+}
+
+fn one_per_byte<P: PrimInt>() -> P {
+    // i8, u8: return 0x01
+    // i16, u16: return 0x0101 = (0x01 << 8) | 0x01
+    // i32, u32: return 0x01010101 = (0x0101 << 16) | 0x0101
+    // ...
+    let mut ret = P::one();
+    let mut shift = 8;
+    let mut b = ret.count_zeros() >> 3;
+    while b != 0 {
+        ret = (ret << shift) | ret;
+        shift <<= 1;
+        b >>= 1;
+    }
+    ret
+}
+
+fn reverse_bits_fallback<P: PrimInt>(i: P) -> P {
+    let rep_01: P = one_per_byte();
+    let rep_03 = (rep_01 << 1) | rep_01;
+    let rep_05 = (rep_01 << 2) | rep_01;
+    let rep_0f = (rep_03 << 2) | rep_03;
+    let rep_33 = (rep_03 << 4) | rep_03;
+    let rep_55 = (rep_05 << 4) | rep_05;
+
+    // code above only used to determine rep_0f, rep_33, rep_55;
+    // optimizer should be able to do it in compile time
+    let mut ret = i.swap_bytes();
+    ret = ((ret & rep_0f) << 4) | ((ret >> 4) & rep_0f);
+    ret = ((ret & rep_33) << 2) | ((ret >> 2) & rep_33);
+    ret = ((ret & rep_55) << 1) | ((ret >> 1) & rep_55);
+    ret
+}
+
+macro_rules! prim_int_impl {
+    ($T:ty, $S:ty, $U:ty) => {
+        impl PrimInt for $T {
+            #[inline]
+            fn count_ones(self) -> u32 {
+                <$T>::count_ones(self)
+            }
+
+            #[inline]
+            fn count_zeros(self) -> u32 {
+                <$T>::count_zeros(self)
+            }
+
+            #[inline]
+            fn leading_ones(self) -> u32 {
+                <$T>::leading_ones(self)
+            }
+
+            #[inline]
+            fn leading_zeros(self) -> u32 {
+                <$T>::leading_zeros(self)
+            }
+
+            #[inline]
+            fn trailing_ones(self) -> u32 {
+                <$T>::trailing_ones(self)
+            }
+
+            #[inline]
+            fn trailing_zeros(self) -> u32 {
+                <$T>::trailing_zeros(self)
+            }
+
+            #[inline]
+            fn rotate_left(self, n: u32) -> Self {
+                <$T>::rotate_left(self, n)
+            }
+
+            #[inline]
+            fn rotate_right(self, n: u32) -> Self {
+                <$T>::rotate_right(self, n)
+            }
+
+            #[inline]
+            fn signed_shl(self, n: u32) -> Self {
+                ((self as $S) << n) as $T
+            }
+
+            #[inline]
+            fn signed_shr(self, n: u32) -> Self {
+                ((self as $S) >> n) as $T
+            }
+
+            #[inline]
+            fn unsigned_shl(self, n: u32) -> Self {
+                ((self as $U) << n) as $T
+            }
+
+            #[inline]
+            fn unsigned_shr(self, n: u32) -> Self {
+                ((self as $U) >> n) as $T
+            }
+
+            #[inline]
+            fn swap_bytes(self) -> Self {
+                <$T>::swap_bytes(self)
+            }
+
+            #[inline]
+            fn reverse_bits(self) -> Self {
+                <$T>::reverse_bits(self)
+            }
+
+            #[inline]
+            fn from_be(x: Self) -> Self {
+                <$T>::from_be(x)
+            }
+
+            #[inline]
+            fn from_le(x: Self) -> Self {
+                <$T>::from_le(x)
+            }
+
+            #[inline]
+            fn to_be(self) -> Self {
+                <$T>::to_be(self)
+            }
+
+            #[inline]
+            fn to_le(self) -> Self {
+                <$T>::to_le(self)
+            }
+
+            #[inline]
+            fn pow(self, exp: u32) -> Self {
+                <$T>::pow(self, exp)
+            }
+        }
+    };
+}
+
+// prim_int_impl!(type, signed, unsigned);
+prim_int_impl!(u8, i8, u8);
+prim_int_impl!(u16, i16, u16);
+prim_int_impl!(u32, i32, u32);
+prim_int_impl!(u64, i64, u64);
+prim_int_impl!(u128, i128, u128);
+prim_int_impl!(usize, isize, usize);
+prim_int_impl!(i8, i8, u8);
+prim_int_impl!(i16, i16, u16);
+prim_int_impl!(i32, i32, u32);
+prim_int_impl!(i64, i64, u64);
+prim_int_impl!(i128, i128, u128);
+prim_int_impl!(isize, isize, usize);
+
+#[cfg(test)]
+mod tests {
+    use crate::int::PrimInt;
+
+    #[test]
+    pub fn reverse_bits() {
+        use core::{i16, i32, i64, i8};
+
+        assert_eq!(
+            PrimInt::reverse_bits(0x0123_4567_89ab_cdefu64),
+            0xf7b3_d591_e6a2_c480
+        );
+
+        assert_eq!(PrimInt::reverse_bits(0i8), 0);
+        assert_eq!(PrimInt::reverse_bits(-1i8), -1);
+        assert_eq!(PrimInt::reverse_bits(1i8), i8::MIN);
+        assert_eq!(PrimInt::reverse_bits(i8::MIN), 1);
+        assert_eq!(PrimInt::reverse_bits(-2i8), i8::MAX);
+        assert_eq!(PrimInt::reverse_bits(i8::MAX), -2);
+
+        assert_eq!(PrimInt::reverse_bits(0i16), 0);
+        assert_eq!(PrimInt::reverse_bits(-1i16), -1);
+        assert_eq!(PrimInt::reverse_bits(1i16), i16::MIN);
+        assert_eq!(PrimInt::reverse_bits(i16::MIN), 1);
+        assert_eq!(PrimInt::reverse_bits(-2i16), i16::MAX);
+        assert_eq!(PrimInt::reverse_bits(i16::MAX), -2);
+
+        assert_eq!(PrimInt::reverse_bits(0i32), 0);
+        assert_eq!(PrimInt::reverse_bits(-1i32), -1);
+        assert_eq!(PrimInt::reverse_bits(1i32), i32::MIN);
+        assert_eq!(PrimInt::reverse_bits(i32::MIN), 1);
+        assert_eq!(PrimInt::reverse_bits(-2i32), i32::MAX);
+        assert_eq!(PrimInt::reverse_bits(i32::MAX), -2);
+
+        assert_eq!(PrimInt::reverse_bits(0i64), 0);
+        assert_eq!(PrimInt::reverse_bits(-1i64), -1);
+        assert_eq!(PrimInt::reverse_bits(1i64), i64::MIN);
+        assert_eq!(PrimInt::reverse_bits(i64::MIN), 1);
+        assert_eq!(PrimInt::reverse_bits(-2i64), i64::MAX);
+        assert_eq!(PrimInt::reverse_bits(i64::MAX), -2);
+    }
+
+    #[test]
+    pub fn reverse_bits_i128() {
+        use core::i128;
+
+        assert_eq!(PrimInt::reverse_bits(0i128), 0);
+        assert_eq!(PrimInt::reverse_bits(-1i128), -1);
+        assert_eq!(PrimInt::reverse_bits(1i128), i128::MIN);
+        assert_eq!(PrimInt::reverse_bits(i128::MIN), 1);
+        assert_eq!(PrimInt::reverse_bits(-2i128), i128::MAX);
+        assert_eq!(PrimInt::reverse_bits(i128::MAX), -2);
+    }
+}
+
\ No newline at end of file diff --git a/src/num_traits/lib.rs.html b/src/num_traits/lib.rs.html new file mode 100644 index 0000000..5208080 --- /dev/null +++ b/src/num_traits/lib.rs.html @@ -0,0 +1,1271 @@ +lib.rs - source

num_traits/
lib.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
// Copyright 2013-2014 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+//! Numeric traits for generic mathematics
+//!
+//! ## Compatibility
+//!
+//! The `num-traits` crate is tested for rustc 1.60 and greater.
+
+#![doc(html_root_url = "https://docs.rs/num-traits/0.2")]
+#![deny(unconditional_recursion)]
+#![no_std]
+
+// Need to explicitly bring the crate in for inherent float methods
+#[cfg(feature = "std")]
+extern crate std;
+
+use core::fmt;
+use core::num::Wrapping;
+use core::ops::{Add, Div, Mul, Rem, Sub};
+use core::ops::{AddAssign, DivAssign, MulAssign, RemAssign, SubAssign};
+
+pub use crate::bounds::Bounded;
+#[cfg(any(feature = "std", feature = "libm"))]
+pub use crate::float::Float;
+pub use crate::float::FloatConst;
+// pub use real::{FloatCore, Real}; // NOTE: Don't do this, it breaks `use num_traits::*;`.
+pub use crate::cast::{cast, AsPrimitive, FromPrimitive, NumCast, ToPrimitive};
+pub use crate::identities::{one, zero, ConstOne, ConstZero, One, Zero};
+pub use crate::int::PrimInt;
+pub use crate::ops::bytes::{FromBytes, ToBytes};
+pub use crate::ops::checked::{
+    CheckedAdd, CheckedDiv, CheckedMul, CheckedNeg, CheckedRem, CheckedShl, CheckedShr, CheckedSub,
+};
+pub use crate::ops::euclid::{CheckedEuclid, Euclid};
+pub use crate::ops::inv::Inv;
+pub use crate::ops::mul_add::{MulAdd, MulAddAssign};
+pub use crate::ops::saturating::{Saturating, SaturatingAdd, SaturatingMul, SaturatingSub};
+pub use crate::ops::wrapping::{
+    WrappingAdd, WrappingMul, WrappingNeg, WrappingShl, WrappingShr, WrappingSub,
+};
+pub use crate::pow::{checked_pow, pow, Pow};
+pub use crate::sign::{abs, abs_sub, signum, Signed, Unsigned};
+
+#[macro_use]
+mod macros;
+
+pub mod bounds;
+pub mod cast;
+pub mod float;
+pub mod identities;
+pub mod int;
+pub mod ops;
+pub mod pow;
+pub mod real;
+pub mod sign;
+
+/// The base trait for numeric types, covering `0` and `1` values,
+/// comparisons, basic numeric operations, and string conversion.
+pub trait Num: PartialEq + Zero + One + NumOps {
+    type FromStrRadixErr;
+
+    /// Convert from a string and radix (typically `2..=36`).
+    ///
+    /// # Examples
+    ///
+    /// ```rust
+    /// use num_traits::Num;
+    ///
+    /// let result = <i32 as Num>::from_str_radix("27", 10);
+    /// assert_eq!(result, Ok(27));
+    ///
+    /// let result = <i32 as Num>::from_str_radix("foo", 10);
+    /// assert!(result.is_err());
+    /// ```
+    ///
+    /// # Supported radices
+    ///
+    /// The exact range of supported radices is at the discretion of each type implementation. For
+    /// primitive integers, this is implemented by the inherent `from_str_radix` methods in the
+    /// standard library, which **panic** if the radix is not in the range from 2 to 36. The
+    /// implementation in this crate for primitive floats is similar.
+    ///
+    /// For third-party types, it is suggested that implementations should follow suit and at least
+    /// accept `2..=36` without panicking, but an `Err` may be returned for any unsupported radix.
+    /// It's possible that a type might not even support the common radix 10, nor any, if string
+    /// parsing doesn't make sense for that type.
+    fn from_str_radix(str: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr>;
+}
+
+/// Generic trait for types implementing basic numeric operations
+///
+/// This is automatically implemented for types which implement the operators.
+pub trait NumOps<Rhs = Self, Output = Self>:
+    Add<Rhs, Output = Output>
+    + Sub<Rhs, Output = Output>
+    + Mul<Rhs, Output = Output>
+    + Div<Rhs, Output = Output>
+    + Rem<Rhs, Output = Output>
+{
+}
+
+impl<T, Rhs, Output> NumOps<Rhs, Output> for T where
+    T: Add<Rhs, Output = Output>
+        + Sub<Rhs, Output = Output>
+        + Mul<Rhs, Output = Output>
+        + Div<Rhs, Output = Output>
+        + Rem<Rhs, Output = Output>
+{
+}
+
+/// The trait for `Num` types which also implement numeric operations taking
+/// the second operand by reference.
+///
+/// This is automatically implemented for types which implement the operators.
+pub trait NumRef: Num + for<'r> NumOps<&'r Self> {}
+impl<T> NumRef for T where T: Num + for<'r> NumOps<&'r T> {}
+
+/// The trait for `Num` references which implement numeric operations, taking the
+/// second operand either by value or by reference.
+///
+/// This is automatically implemented for all types which implement the operators. It covers
+/// every type implementing the operations though, regardless of it being a reference or
+/// related to `Num`.
+pub trait RefNum<Base>: NumOps<Base, Base> + for<'r> NumOps<&'r Base, Base> {}
+impl<T, Base> RefNum<Base> for T where T: NumOps<Base, Base> + for<'r> NumOps<&'r Base, Base> {}
+
+/// Generic trait for types implementing numeric assignment operators (like `+=`).
+///
+/// This is automatically implemented for types which implement the operators.
+pub trait NumAssignOps<Rhs = Self>:
+    AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>
+{
+}
+
+impl<T, Rhs> NumAssignOps<Rhs> for T where
+    T: AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>
+{
+}
+
+/// The trait for `Num` types which also implement assignment operators.
+///
+/// This is automatically implemented for types which implement the operators.
+pub trait NumAssign: Num + NumAssignOps {}
+impl<T> NumAssign for T where T: Num + NumAssignOps {}
+
+/// The trait for `NumAssign` types which also implement assignment operations
+/// taking the second operand by reference.
+///
+/// This is automatically implemented for types which implement the operators.
+pub trait NumAssignRef: NumAssign + for<'r> NumAssignOps<&'r Self> {}
+impl<T> NumAssignRef for T where T: NumAssign + for<'r> NumAssignOps<&'r T> {}
+
+macro_rules! int_trait_impl {
+    ($name:ident for $($t:ty)*) => ($(
+        impl $name for $t {
+            type FromStrRadixErr = ::core::num::ParseIntError;
+            #[inline]
+            fn from_str_radix(s: &str, radix: u32)
+                              -> Result<Self, ::core::num::ParseIntError>
+            {
+                <$t>::from_str_radix(s, radix)
+            }
+        }
+    )*)
+}
+int_trait_impl!(Num for usize u8 u16 u32 u64 u128);
+int_trait_impl!(Num for isize i8 i16 i32 i64 i128);
+
+impl<T: Num> Num for Wrapping<T>
+where
+    Wrapping<T>: NumOps,
+{
+    type FromStrRadixErr = T::FromStrRadixErr;
+    fn from_str_radix(str: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr> {
+        T::from_str_radix(str, radix).map(Wrapping)
+    }
+}
+
+#[derive(Debug)]
+pub enum FloatErrorKind {
+    Empty,
+    Invalid,
+}
+// FIXME: core::num::ParseFloatError is stable in 1.0, but opaque to us,
+// so there's not really any way for us to reuse it.
+#[derive(Debug)]
+pub struct ParseFloatError {
+    pub kind: FloatErrorKind,
+}
+
+impl fmt::Display for ParseFloatError {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        let description = match self.kind {
+            FloatErrorKind::Empty => "cannot parse float from empty string",
+            FloatErrorKind::Invalid => "invalid float literal",
+        };
+
+        description.fmt(f)
+    }
+}
+
+fn str_to_ascii_lower_eq_str(a: &str, b: &str) -> bool {
+    a.len() == b.len()
+        && a.bytes().zip(b.bytes()).all(|(a, b)| {
+            let a_to_ascii_lower = a | (((b'A' <= a && a <= b'Z') as u8) << 5);
+            a_to_ascii_lower == b
+        })
+}
+
+// FIXME: The standard library from_str_radix on floats was deprecated, so we're stuck
+// with this implementation ourselves until we want to make a breaking change.
+// (would have to drop it from `Num` though)
+macro_rules! float_trait_impl {
+    ($name:ident for $($t:ident)*) => ($(
+        impl $name for $t {
+            type FromStrRadixErr = ParseFloatError;
+
+            fn from_str_radix(src: &str, radix: u32)
+                              -> Result<Self, Self::FromStrRadixErr>
+            {
+                use self::FloatErrorKind::*;
+                use self::ParseFloatError as PFE;
+
+                // Special case radix 10 to use more accurate standard library implementation
+                if radix == 10 {
+                    return src.parse().map_err(|_| PFE {
+                        kind: if src.is_empty() { Empty } else { Invalid },
+                    });
+                }
+
+                // Special values
+                if str_to_ascii_lower_eq_str(src, "inf")
+                    || str_to_ascii_lower_eq_str(src, "infinity")
+                {
+                    return Ok(core::$t::INFINITY);
+                } else if str_to_ascii_lower_eq_str(src, "-inf")
+                    || str_to_ascii_lower_eq_str(src, "-infinity")
+                {
+                    return Ok(core::$t::NEG_INFINITY);
+                } else if str_to_ascii_lower_eq_str(src, "nan") {
+                    return Ok(core::$t::NAN);
+                } else if str_to_ascii_lower_eq_str(src, "-nan") {
+                    return Ok(-core::$t::NAN);
+                }
+
+                fn slice_shift_char(src: &str) -> Option<(char, &str)> {
+                    let mut chars = src.chars();
+                    Some((chars.next()?, chars.as_str()))
+                }
+
+                let (is_positive, src) =  match slice_shift_char(src) {
+                    None             => return Err(PFE { kind: Empty }),
+                    Some(('-', ""))  => return Err(PFE { kind: Empty }),
+                    Some(('-', src)) => (false, src),
+                    Some((_, _))     => (true,  src),
+                };
+
+                // The significand to accumulate
+                let mut sig = if is_positive { 0.0 } else { -0.0 };
+                // Necessary to detect overflow
+                let mut prev_sig = sig;
+                let mut cs = src.chars().enumerate();
+                // Exponent prefix and exponent index offset
+                let mut exp_info = None::<(char, usize)>;
+
+                // Parse the integer part of the significand
+                for (i, c) in cs.by_ref() {
+                    match c.to_digit(radix) {
+                        Some(digit) => {
+                            // shift significand one digit left
+                            sig *= radix as $t;
+
+                            // add/subtract current digit depending on sign
+                            if is_positive {
+                                sig += (digit as isize) as $t;
+                            } else {
+                                sig -= (digit as isize) as $t;
+                            }
+
+                            // Detect overflow by comparing to last value, except
+                            // if we've not seen any non-zero digits.
+                            if prev_sig != 0.0 {
+                                if is_positive && sig <= prev_sig
+                                    { return Ok(core::$t::INFINITY); }
+                                if !is_positive && sig >= prev_sig
+                                    { return Ok(core::$t::NEG_INFINITY); }
+
+                                // Detect overflow by reversing the shift-and-add process
+                                if is_positive && (prev_sig != (sig - digit as $t) / radix as $t)
+                                    { return Ok(core::$t::INFINITY); }
+                                if !is_positive && (prev_sig != (sig + digit as $t) / radix as $t)
+                                    { return Ok(core::$t::NEG_INFINITY); }
+                            }
+                            prev_sig = sig;
+                        },
+                        None => match c {
+                            'e' | 'E' | 'p' | 'P' => {
+                                exp_info = Some((c, i + 1));
+                                break;  // start of exponent
+                            },
+                            '.' => {
+                                break;  // start of fractional part
+                            },
+                            _ => {
+                                return Err(PFE { kind: Invalid });
+                            },
+                        },
+                    }
+                }
+
+                // If we are not yet at the exponent parse the fractional
+                // part of the significand
+                if exp_info.is_none() {
+                    let mut power = 1.0;
+                    for (i, c) in cs.by_ref() {
+                        match c.to_digit(radix) {
+                            Some(digit) => {
+                                // Decrease power one order of magnitude
+                                power /= radix as $t;
+                                // add/subtract current digit depending on sign
+                                sig = if is_positive {
+                                    sig + (digit as $t) * power
+                                } else {
+                                    sig - (digit as $t) * power
+                                };
+                                // Detect overflow by comparing to last value
+                                if is_positive && sig < prev_sig
+                                    { return Ok(core::$t::INFINITY); }
+                                if !is_positive && sig > prev_sig
+                                    { return Ok(core::$t::NEG_INFINITY); }
+                                prev_sig = sig;
+                            },
+                            None => match c {
+                                'e' | 'E' | 'p' | 'P' => {
+                                    exp_info = Some((c, i + 1));
+                                    break; // start of exponent
+                                },
+                                _ => {
+                                    return Err(PFE { kind: Invalid });
+                                },
+                            },
+                        }
+                    }
+                }
+
+                // Parse and calculate the exponent
+                let exp = match exp_info {
+                    Some((c, offset)) => {
+                        let base = match c {
+                            'E' | 'e' if radix == 10 => 10.0,
+                            'P' | 'p' if radix == 16 => 2.0,
+                            _ => return Err(PFE { kind: Invalid }),
+                        };
+
+                        // Parse the exponent as decimal integer
+                        let src = &src[offset..];
+                        let (is_positive, exp) = match slice_shift_char(src) {
+                            Some(('-', src)) => (false, src.parse::<usize>()),
+                            Some(('+', src)) => (true,  src.parse::<usize>()),
+                            Some((_, _))     => (true,  src.parse::<usize>()),
+                            None             => return Err(PFE { kind: Invalid }),
+                        };
+
+                        #[cfg(feature = "std")]
+                        fn pow(base: $t, exp: usize) -> $t {
+                            Float::powi(base, exp as i32)
+                        }
+                        // otherwise uses the generic `pow` from the root
+
+                        match (is_positive, exp) {
+                            (true,  Ok(exp)) => pow(base, exp),
+                            (false, Ok(exp)) => 1.0 / pow(base, exp),
+                            (_, Err(_))      => return Err(PFE { kind: Invalid }),
+                        }
+                    },
+                    None => 1.0, // no exponent
+                };
+
+                Ok(sig * exp)
+            }
+        }
+    )*)
+}
+float_trait_impl!(Num for f32 f64);
+
+/// A value bounded by a minimum and a maximum
+///
+///  If input is less than min then this returns min.
+///  If input is greater than max then this returns max.
+///  Otherwise this returns input.
+///
+/// **Panics** in debug mode if `!(min <= max)`.
+#[inline]
+pub fn clamp<T: PartialOrd>(input: T, min: T, max: T) -> T {
+    debug_assert!(min <= max, "min must be less than or equal to max");
+    if input < min {
+        min
+    } else if input > max {
+        max
+    } else {
+        input
+    }
+}
+
+/// A value bounded by a minimum value
+///
+///  If input is less than min then this returns min.
+///  Otherwise this returns input.
+///  `clamp_min(std::f32::NAN, 1.0)` preserves `NAN` different from `f32::min(std::f32::NAN, 1.0)`.
+///
+/// **Panics** in debug mode if `!(min == min)`. (This occurs if `min` is `NAN`.)
+#[inline]
+#[allow(clippy::eq_op)]
+pub fn clamp_min<T: PartialOrd>(input: T, min: T) -> T {
+    debug_assert!(min == min, "min must not be NAN");
+    if input < min {
+        min
+    } else {
+        input
+    }
+}
+
+/// A value bounded by a maximum value
+///
+///  If input is greater than max then this returns max.
+///  Otherwise this returns input.
+///  `clamp_max(std::f32::NAN, 1.0)` preserves `NAN` different from `f32::max(std::f32::NAN, 1.0)`.
+///
+/// **Panics** in debug mode if `!(max == max)`. (This occurs if `max` is `NAN`.)
+#[inline]
+#[allow(clippy::eq_op)]
+pub fn clamp_max<T: PartialOrd>(input: T, max: T) -> T {
+    debug_assert!(max == max, "max must not be NAN");
+    if input > max {
+        max
+    } else {
+        input
+    }
+}
+
+#[test]
+fn clamp_test() {
+    // Int test
+    assert_eq!(1, clamp(1, -1, 2));
+    assert_eq!(-1, clamp(-2, -1, 2));
+    assert_eq!(2, clamp(3, -1, 2));
+    assert_eq!(1, clamp_min(1, -1));
+    assert_eq!(-1, clamp_min(-2, -1));
+    assert_eq!(-1, clamp_max(1, -1));
+    assert_eq!(-2, clamp_max(-2, -1));
+
+    // Float test
+    assert_eq!(1.0, clamp(1.0, -1.0, 2.0));
+    assert_eq!(-1.0, clamp(-2.0, -1.0, 2.0));
+    assert_eq!(2.0, clamp(3.0, -1.0, 2.0));
+    assert_eq!(1.0, clamp_min(1.0, -1.0));
+    assert_eq!(-1.0, clamp_min(-2.0, -1.0));
+    assert_eq!(-1.0, clamp_max(1.0, -1.0));
+    assert_eq!(-2.0, clamp_max(-2.0, -1.0));
+    assert!(clamp(::core::f32::NAN, -1.0, 1.0).is_nan());
+    assert!(clamp_min(::core::f32::NAN, 1.0).is_nan());
+    assert!(clamp_max(::core::f32::NAN, 1.0).is_nan());
+}
+
+#[test]
+#[should_panic]
+#[cfg(debug_assertions)]
+fn clamp_nan_min() {
+    clamp(0., ::core::f32::NAN, 1.);
+}
+
+#[test]
+#[should_panic]
+#[cfg(debug_assertions)]
+fn clamp_nan_max() {
+    clamp(0., -1., ::core::f32::NAN);
+}
+
+#[test]
+#[should_panic]
+#[cfg(debug_assertions)]
+fn clamp_nan_min_max() {
+    clamp(0., ::core::f32::NAN, ::core::f32::NAN);
+}
+
+#[test]
+#[should_panic]
+#[cfg(debug_assertions)]
+fn clamp_min_nan_min() {
+    clamp_min(0., ::core::f32::NAN);
+}
+
+#[test]
+#[should_panic]
+#[cfg(debug_assertions)]
+fn clamp_max_nan_max() {
+    clamp_max(0., ::core::f32::NAN);
+}
+
+#[test]
+fn from_str_radix_unwrap() {
+    // The Result error must impl Debug to allow unwrap()
+
+    let i: i32 = Num::from_str_radix("0", 10).unwrap();
+    assert_eq!(i, 0);
+
+    let f: f32 = Num::from_str_radix("0.0", 10).unwrap();
+    assert_eq!(f, 0.0);
+}
+
+#[test]
+fn from_str_radix_multi_byte_fail() {
+    // Ensure parsing doesn't panic, even on invalid sign characters
+    assert!(f32::from_str_radix("™0.2", 10).is_err());
+
+    // Even when parsing the exponent sign
+    assert!(f32::from_str_radix("0.2E™1", 10).is_err());
+}
+
+#[test]
+fn from_str_radix_ignore_case() {
+    assert_eq!(
+        f32::from_str_radix("InF", 16).unwrap(),
+        ::core::f32::INFINITY
+    );
+    assert_eq!(
+        f32::from_str_radix("InfinitY", 16).unwrap(),
+        ::core::f32::INFINITY
+    );
+    assert_eq!(
+        f32::from_str_radix("-InF", 8).unwrap(),
+        ::core::f32::NEG_INFINITY
+    );
+    assert_eq!(
+        f32::from_str_radix("-InfinitY", 8).unwrap(),
+        ::core::f32::NEG_INFINITY
+    );
+    assert!(f32::from_str_radix("nAn", 4).unwrap().is_nan());
+    assert!(f32::from_str_radix("-nAn", 4).unwrap().is_nan());
+}
+
+#[test]
+fn wrapping_is_num() {
+    fn require_num<T: Num>(_: &T) {}
+    require_num(&Wrapping(42_u32));
+    require_num(&Wrapping(-42));
+}
+
+#[test]
+fn wrapping_from_str_radix() {
+    macro_rules! test_wrapping_from_str_radix {
+        ($($t:ty)+) => {
+            $(
+                for &(s, r) in &[("42", 10), ("42", 2), ("-13.0", 10), ("foo", 10)] {
+                    let w = Wrapping::<$t>::from_str_radix(s, r).map(|w| w.0);
+                    assert_eq!(w, <$t as Num>::from_str_radix(s, r));
+                }
+            )+
+        };
+    }
+
+    test_wrapping_from_str_radix!(usize u8 u16 u32 u64 isize i8 i16 i32 i64);
+}
+
+#[test]
+fn check_num_ops() {
+    fn compute<T: Num + Copy>(x: T, y: T) -> T {
+        x * y / y % y + y - y
+    }
+    assert_eq!(compute(1, 2), 1)
+}
+
+#[test]
+fn check_numref_ops() {
+    fn compute<T: NumRef>(x: T, y: &T) -> T {
+        x * y / y % y + y - y
+    }
+    assert_eq!(compute(1, &2), 1)
+}
+
+#[test]
+fn check_refnum_ops() {
+    fn compute<T: Copy>(x: &T, y: T) -> T
+    where
+        for<'a> &'a T: RefNum<T>,
+    {
+        &(&(&(&(x * y) / y) % y) + y) - y
+    }
+    assert_eq!(compute(&1, 2), 1)
+}
+
+#[test]
+fn check_refref_ops() {
+    fn compute<T>(x: &T, y: &T) -> T
+    where
+        for<'a> &'a T: RefNum<T>,
+    {
+        &(&(&(&(x * y) / y) % y) + y) - y
+    }
+    assert_eq!(compute(&1, &2), 1)
+}
+
+#[test]
+fn check_numassign_ops() {
+    fn compute<T: NumAssign + Copy>(mut x: T, y: T) -> T {
+        x *= y;
+        x /= y;
+        x %= y;
+        x += y;
+        x -= y;
+        x
+    }
+    assert_eq!(compute(1, 2), 1)
+}
+
+#[test]
+fn check_numassignref_ops() {
+    fn compute<T: NumAssignRef + Copy>(mut x: T, y: &T) -> T {
+        x *= y;
+        x /= y;
+        x %= y;
+        x += y;
+        x -= y;
+        x
+    }
+    assert_eq!(compute(1, &2), 1)
+}
+
\ No newline at end of file diff --git a/src/num_traits/macros.rs.html b/src/num_traits/macros.rs.html new file mode 100644 index 0000000..dad07d0 --- /dev/null +++ b/src/num_traits/macros.rs.html @@ -0,0 +1,89 @@ +macros.rs - source

num_traits/
macros.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
// not all are used in all features configurations
+#![allow(unused)]
+
+/// Forward a method to an inherent method or a base trait method.
+macro_rules! forward {
+    ($( Self :: $method:ident ( self $( , $arg:ident : $ty:ty )* ) -> $ret:ty ; )*)
+        => {$(
+            #[inline]
+            fn $method(self $( , $arg : $ty )* ) -> $ret {
+                Self::$method(self $( , $arg )* )
+            }
+        )*};
+    ($( $base:ident :: $method:ident ( self $( , $arg:ident : $ty:ty )* ) -> $ret:ty ; )*)
+        => {$(
+            #[inline]
+            fn $method(self $( , $arg : $ty )* ) -> $ret {
+                <Self as $base>::$method(self $( , $arg )* )
+            }
+        )*};
+    ($( $base:ident :: $method:ident ( $( $arg:ident : $ty:ty ),* ) -> $ret:ty ; )*)
+        => {$(
+            #[inline]
+            fn $method( $( $arg : $ty ),* ) -> $ret {
+                <Self as $base>::$method( $( $arg ),* )
+            }
+        )*};
+    ($( $imp:path as $method:ident ( self $( , $arg:ident : $ty:ty )* ) -> $ret:ty ; )*)
+        => {$(
+            #[inline]
+            fn $method(self $( , $arg : $ty )* ) -> $ret {
+                $imp(self $( , $arg )* )
+            }
+        )*};
+}
+
+macro_rules! constant {
+    ($( $method:ident () -> $ret:expr ; )*)
+        => {$(
+            #[inline]
+            fn $method() -> Self {
+                $ret
+            }
+        )*};
+}
+
\ No newline at end of file diff --git a/src/num_traits/ops/bytes.rs.html b/src/num_traits/ops/bytes.rs.html new file mode 100644 index 0000000..5c11481 --- /dev/null +++ b/src/num_traits/ops/bytes.rs.html @@ -0,0 +1,635 @@ +bytes.rs - source

num_traits/ops/
bytes.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
use core::borrow::{Borrow, BorrowMut};
+use core::cmp::{Eq, Ord, PartialEq, PartialOrd};
+use core::fmt::Debug;
+use core::hash::Hash;
+
+pub trait NumBytes:
+    Debug
+    + AsRef<[u8]>
+    + AsMut<[u8]>
+    + PartialEq
+    + Eq
+    + PartialOrd
+    + Ord
+    + Hash
+    + Borrow<[u8]>
+    + BorrowMut<[u8]>
+{
+}
+
+impl<T> NumBytes for T where
+    T: Debug
+        + AsRef<[u8]>
+        + AsMut<[u8]>
+        + PartialEq
+        + Eq
+        + PartialOrd
+        + Ord
+        + Hash
+        + Borrow<[u8]>
+        + BorrowMut<[u8]>
+        + ?Sized
+{
+}
+
+pub trait ToBytes {
+    type Bytes: NumBytes;
+
+    /// Return the memory representation of this number as a byte array in big-endian byte order.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::ToBytes;
+    ///
+    /// let bytes = ToBytes::to_be_bytes(&0x12345678u32);
+    /// assert_eq!(bytes, [0x12, 0x34, 0x56, 0x78]);
+    /// ```
+    fn to_be_bytes(&self) -> Self::Bytes;
+
+    /// Return the memory representation of this number as a byte array in little-endian byte order.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::ToBytes;
+    ///
+    /// let bytes = ToBytes::to_le_bytes(&0x12345678u32);
+    /// assert_eq!(bytes, [0x78, 0x56, 0x34, 0x12]);
+    /// ```
+    fn to_le_bytes(&self) -> Self::Bytes;
+
+    /// Return the memory representation of this number as a byte array in native byte order.
+    ///
+    /// As the target platform's native endianness is used,
+    /// portable code should use [`to_be_bytes`] or [`to_le_bytes`], as appropriate, instead.
+    ///
+    /// [`to_be_bytes`]: #method.to_be_bytes
+    /// [`to_le_bytes`]: #method.to_le_bytes
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::ToBytes;
+    ///
+    /// #[cfg(target_endian = "big")]
+    /// let expected = [0x12, 0x34, 0x56, 0x78];
+    ///
+    /// #[cfg(target_endian = "little")]
+    /// let expected = [0x78, 0x56, 0x34, 0x12];
+    ///
+    /// let bytes = ToBytes::to_ne_bytes(&0x12345678u32);
+    /// assert_eq!(bytes, expected)
+    /// ```
+    fn to_ne_bytes(&self) -> Self::Bytes {
+        #[cfg(target_endian = "big")]
+        let bytes = self.to_be_bytes();
+        #[cfg(target_endian = "little")]
+        let bytes = self.to_le_bytes();
+        bytes
+    }
+}
+
+pub trait FromBytes: Sized {
+    type Bytes: NumBytes + ?Sized;
+
+    /// Create a number from its representation as a byte array in big endian.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::FromBytes;
+    ///
+    /// let value: u32 = FromBytes::from_be_bytes(&[0x12, 0x34, 0x56, 0x78]);
+    /// assert_eq!(value, 0x12345678);
+    /// ```
+    fn from_be_bytes(bytes: &Self::Bytes) -> Self;
+
+    /// Create a number from its representation as a byte array in little endian.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::FromBytes;
+    ///
+    /// let value: u32 = FromBytes::from_le_bytes(&[0x78, 0x56, 0x34, 0x12]);
+    /// assert_eq!(value, 0x12345678);
+    /// ```
+    fn from_le_bytes(bytes: &Self::Bytes) -> Self;
+
+    /// Create a number from its memory representation as a byte array in native endianness.
+    ///
+    /// As the target platform's native endianness is used,
+    /// portable code likely wants to use [`from_be_bytes`] or [`from_le_bytes`], as appropriate instead.
+    ///
+    /// [`from_be_bytes`]: #method.from_be_bytes
+    /// [`from_le_bytes`]: #method.from_le_bytes
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::FromBytes;
+    ///
+    /// #[cfg(target_endian = "big")]
+    /// let bytes = [0x12, 0x34, 0x56, 0x78];
+    ///
+    /// #[cfg(target_endian = "little")]
+    /// let bytes = [0x78, 0x56, 0x34, 0x12];
+    ///
+    /// let value: u32 = FromBytes::from_ne_bytes(&bytes);
+    /// assert_eq!(value, 0x12345678)
+    /// ```
+    fn from_ne_bytes(bytes: &Self::Bytes) -> Self {
+        #[cfg(target_endian = "big")]
+        let this = Self::from_be_bytes(bytes);
+        #[cfg(target_endian = "little")]
+        let this = Self::from_le_bytes(bytes);
+        this
+    }
+}
+
+macro_rules! float_to_from_bytes_impl {
+    ($T:ty, $L:expr) => {
+        impl ToBytes for $T {
+            type Bytes = [u8; $L];
+
+            #[inline]
+            fn to_be_bytes(&self) -> Self::Bytes {
+                <$T>::to_be_bytes(*self)
+            }
+
+            #[inline]
+            fn to_le_bytes(&self) -> Self::Bytes {
+                <$T>::to_le_bytes(*self)
+            }
+
+            #[inline]
+            fn to_ne_bytes(&self) -> Self::Bytes {
+                <$T>::to_ne_bytes(*self)
+            }
+        }
+
+        impl FromBytes for $T {
+            type Bytes = [u8; $L];
+
+            #[inline]
+            fn from_be_bytes(bytes: &Self::Bytes) -> Self {
+                <$T>::from_be_bytes(*bytes)
+            }
+
+            #[inline]
+            fn from_le_bytes(bytes: &Self::Bytes) -> Self {
+                <$T>::from_le_bytes(*bytes)
+            }
+
+            #[inline]
+            fn from_ne_bytes(bytes: &Self::Bytes) -> Self {
+                <$T>::from_ne_bytes(*bytes)
+            }
+        }
+    };
+}
+
+macro_rules! int_to_from_bytes_impl {
+    ($T:ty, $L:expr) => {
+        impl ToBytes for $T {
+            type Bytes = [u8; $L];
+
+            #[inline]
+            fn to_be_bytes(&self) -> Self::Bytes {
+                <$T>::to_be_bytes(*self)
+            }
+
+            #[inline]
+            fn to_le_bytes(&self) -> Self::Bytes {
+                <$T>::to_le_bytes(*self)
+            }
+
+            #[inline]
+            fn to_ne_bytes(&self) -> Self::Bytes {
+                <$T>::to_ne_bytes(*self)
+            }
+        }
+
+        impl FromBytes for $T {
+            type Bytes = [u8; $L];
+
+            #[inline]
+            fn from_be_bytes(bytes: &Self::Bytes) -> Self {
+                <$T>::from_be_bytes(*bytes)
+            }
+
+            #[inline]
+            fn from_le_bytes(bytes: &Self::Bytes) -> Self {
+                <$T>::from_le_bytes(*bytes)
+            }
+
+            #[inline]
+            fn from_ne_bytes(bytes: &Self::Bytes) -> Self {
+                <$T>::from_ne_bytes(*bytes)
+            }
+        }
+    };
+}
+
+int_to_from_bytes_impl!(u8, 1);
+int_to_from_bytes_impl!(u16, 2);
+int_to_from_bytes_impl!(u32, 4);
+int_to_from_bytes_impl!(u64, 8);
+int_to_from_bytes_impl!(u128, 16);
+#[cfg(target_pointer_width = "64")]
+int_to_from_bytes_impl!(usize, 8);
+#[cfg(target_pointer_width = "32")]
+int_to_from_bytes_impl!(usize, 4);
+
+int_to_from_bytes_impl!(i8, 1);
+int_to_from_bytes_impl!(i16, 2);
+int_to_from_bytes_impl!(i32, 4);
+int_to_from_bytes_impl!(i64, 8);
+int_to_from_bytes_impl!(i128, 16);
+#[cfg(target_pointer_width = "64")]
+int_to_from_bytes_impl!(isize, 8);
+#[cfg(target_pointer_width = "32")]
+int_to_from_bytes_impl!(isize, 4);
+
+float_to_from_bytes_impl!(f32, 4);
+float_to_from_bytes_impl!(f64, 8);
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    macro_rules! check_to_from_bytes {
+        ($( $ty:ty )+) => {$({
+            let n = 1;
+            let be = <$ty as ToBytes>::to_be_bytes(&n);
+            let le = <$ty as ToBytes>::to_le_bytes(&n);
+            let ne = <$ty as ToBytes>::to_ne_bytes(&n);
+
+            assert_eq!(*be.last().unwrap(), 1);
+            assert_eq!(*le.first().unwrap(), 1);
+            if cfg!(target_endian = "big") {
+                assert_eq!(*ne.last().unwrap(), 1);
+            } else {
+                assert_eq!(*ne.first().unwrap(), 1);
+            }
+
+            assert_eq!(<$ty as FromBytes>::from_be_bytes(&be), n);
+            assert_eq!(<$ty as FromBytes>::from_le_bytes(&le), n);
+            if cfg!(target_endian = "big") {
+                assert_eq!(<$ty as FromBytes>::from_ne_bytes(&be), n);
+            } else {
+                assert_eq!(<$ty as FromBytes>::from_ne_bytes(&le), n);
+            }
+        })+}
+    }
+
+    #[test]
+    fn convert_between_int_and_bytes() {
+        check_to_from_bytes!(u8 u16 u32 u64 u128 usize);
+        check_to_from_bytes!(i8 i16 i32 i64 i128 isize);
+    }
+
+    #[test]
+    fn convert_between_float_and_bytes() {
+        macro_rules! check_to_from_bytes {
+            ($( $ty:ty )+) => {$(
+                let n: $ty = 3.14;
+
+                let be = <$ty as ToBytes>::to_be_bytes(&n);
+                let le = <$ty as ToBytes>::to_le_bytes(&n);
+                let ne = <$ty as ToBytes>::to_ne_bytes(&n);
+
+                assert_eq!(<$ty as FromBytes>::from_be_bytes(&be), n);
+                assert_eq!(<$ty as FromBytes>::from_le_bytes(&le), n);
+                if cfg!(target_endian = "big") {
+                    assert_eq!(ne, be);
+                    assert_eq!(<$ty as FromBytes>::from_ne_bytes(&be), n);
+                } else {
+                    assert_eq!(ne, le);
+                    assert_eq!(<$ty as FromBytes>::from_ne_bytes(&le), n);
+                }
+            )+}
+        }
+
+        check_to_from_bytes!(f32 f64);
+    }
+}
+
\ No newline at end of file diff --git a/src/num_traits/ops/checked.rs.html b/src/num_traits/ops/checked.rs.html new file mode 100644 index 0000000..60719a4 --- /dev/null +++ b/src/num_traits/ops/checked.rs.html @@ -0,0 +1,523 @@ +checked.rs - source

num_traits/ops/
checked.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
use core::ops::{Add, Div, Mul, Rem, Shl, Shr, Sub};
+
+/// Performs addition that returns `None` instead of wrapping around on
+/// overflow.
+pub trait CheckedAdd: Sized + Add<Self, Output = Self> {
+    /// Adds two numbers, checking for overflow. If overflow happens, `None` is
+    /// returned.
+    fn checked_add(&self, v: &Self) -> Option<Self>;
+}
+
+macro_rules! checked_impl {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self, v: &$t) -> Option<$t> {
+                <$t>::$method(*self, *v)
+            }
+        }
+    };
+}
+
+checked_impl!(CheckedAdd, checked_add, u8);
+checked_impl!(CheckedAdd, checked_add, u16);
+checked_impl!(CheckedAdd, checked_add, u32);
+checked_impl!(CheckedAdd, checked_add, u64);
+checked_impl!(CheckedAdd, checked_add, usize);
+checked_impl!(CheckedAdd, checked_add, u128);
+
+checked_impl!(CheckedAdd, checked_add, i8);
+checked_impl!(CheckedAdd, checked_add, i16);
+checked_impl!(CheckedAdd, checked_add, i32);
+checked_impl!(CheckedAdd, checked_add, i64);
+checked_impl!(CheckedAdd, checked_add, isize);
+checked_impl!(CheckedAdd, checked_add, i128);
+
+/// Performs subtraction that returns `None` instead of wrapping around on underflow.
+pub trait CheckedSub: Sized + Sub<Self, Output = Self> {
+    /// Subtracts two numbers, checking for underflow. If underflow happens,
+    /// `None` is returned.
+    fn checked_sub(&self, v: &Self) -> Option<Self>;
+}
+
+checked_impl!(CheckedSub, checked_sub, u8);
+checked_impl!(CheckedSub, checked_sub, u16);
+checked_impl!(CheckedSub, checked_sub, u32);
+checked_impl!(CheckedSub, checked_sub, u64);
+checked_impl!(CheckedSub, checked_sub, usize);
+checked_impl!(CheckedSub, checked_sub, u128);
+
+checked_impl!(CheckedSub, checked_sub, i8);
+checked_impl!(CheckedSub, checked_sub, i16);
+checked_impl!(CheckedSub, checked_sub, i32);
+checked_impl!(CheckedSub, checked_sub, i64);
+checked_impl!(CheckedSub, checked_sub, isize);
+checked_impl!(CheckedSub, checked_sub, i128);
+
+/// Performs multiplication that returns `None` instead of wrapping around on underflow or
+/// overflow.
+pub trait CheckedMul: Sized + Mul<Self, Output = Self> {
+    /// Multiplies two numbers, checking for underflow or overflow. If underflow
+    /// or overflow happens, `None` is returned.
+    fn checked_mul(&self, v: &Self) -> Option<Self>;
+}
+
+checked_impl!(CheckedMul, checked_mul, u8);
+checked_impl!(CheckedMul, checked_mul, u16);
+checked_impl!(CheckedMul, checked_mul, u32);
+checked_impl!(CheckedMul, checked_mul, u64);
+checked_impl!(CheckedMul, checked_mul, usize);
+checked_impl!(CheckedMul, checked_mul, u128);
+
+checked_impl!(CheckedMul, checked_mul, i8);
+checked_impl!(CheckedMul, checked_mul, i16);
+checked_impl!(CheckedMul, checked_mul, i32);
+checked_impl!(CheckedMul, checked_mul, i64);
+checked_impl!(CheckedMul, checked_mul, isize);
+checked_impl!(CheckedMul, checked_mul, i128);
+
+/// Performs division that returns `None` instead of panicking on division by zero and instead of
+/// wrapping around on underflow and overflow.
+pub trait CheckedDiv: Sized + Div<Self, Output = Self> {
+    /// Divides two numbers, checking for underflow, overflow and division by
+    /// zero. If any of that happens, `None` is returned.
+    fn checked_div(&self, v: &Self) -> Option<Self>;
+}
+
+checked_impl!(CheckedDiv, checked_div, u8);
+checked_impl!(CheckedDiv, checked_div, u16);
+checked_impl!(CheckedDiv, checked_div, u32);
+checked_impl!(CheckedDiv, checked_div, u64);
+checked_impl!(CheckedDiv, checked_div, usize);
+checked_impl!(CheckedDiv, checked_div, u128);
+
+checked_impl!(CheckedDiv, checked_div, i8);
+checked_impl!(CheckedDiv, checked_div, i16);
+checked_impl!(CheckedDiv, checked_div, i32);
+checked_impl!(CheckedDiv, checked_div, i64);
+checked_impl!(CheckedDiv, checked_div, isize);
+checked_impl!(CheckedDiv, checked_div, i128);
+
+/// Performs an integral remainder that returns `None` instead of panicking on division by zero and
+/// instead of wrapping around on underflow and overflow.
+pub trait CheckedRem: Sized + Rem<Self, Output = Self> {
+    /// Finds the remainder of dividing two numbers, checking for underflow, overflow and division
+    /// by zero. If any of that happens, `None` is returned.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::CheckedRem;
+    /// use std::i32::MIN;
+    ///
+    /// assert_eq!(CheckedRem::checked_rem(&10, &7), Some(3));
+    /// assert_eq!(CheckedRem::checked_rem(&10, &-7), Some(3));
+    /// assert_eq!(CheckedRem::checked_rem(&-10, &7), Some(-3));
+    /// assert_eq!(CheckedRem::checked_rem(&-10, &-7), Some(-3));
+    ///
+    /// assert_eq!(CheckedRem::checked_rem(&10, &0), None);
+    ///
+    /// assert_eq!(CheckedRem::checked_rem(&MIN, &1), Some(0));
+    /// assert_eq!(CheckedRem::checked_rem(&MIN, &-1), None);
+    /// ```
+    fn checked_rem(&self, v: &Self) -> Option<Self>;
+}
+
+checked_impl!(CheckedRem, checked_rem, u8);
+checked_impl!(CheckedRem, checked_rem, u16);
+checked_impl!(CheckedRem, checked_rem, u32);
+checked_impl!(CheckedRem, checked_rem, u64);
+checked_impl!(CheckedRem, checked_rem, usize);
+checked_impl!(CheckedRem, checked_rem, u128);
+
+checked_impl!(CheckedRem, checked_rem, i8);
+checked_impl!(CheckedRem, checked_rem, i16);
+checked_impl!(CheckedRem, checked_rem, i32);
+checked_impl!(CheckedRem, checked_rem, i64);
+checked_impl!(CheckedRem, checked_rem, isize);
+checked_impl!(CheckedRem, checked_rem, i128);
+
+macro_rules! checked_impl_unary {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self) -> Option<$t> {
+                <$t>::$method(*self)
+            }
+        }
+    };
+}
+
+/// Performs negation that returns `None` if the result can't be represented.
+pub trait CheckedNeg: Sized {
+    /// Negates a number, returning `None` for results that can't be represented, like signed `MIN`
+    /// values that can't be positive, or non-zero unsigned values that can't be negative.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::CheckedNeg;
+    /// use std::i32::MIN;
+    ///
+    /// assert_eq!(CheckedNeg::checked_neg(&1_i32), Some(-1));
+    /// assert_eq!(CheckedNeg::checked_neg(&-1_i32), Some(1));
+    /// assert_eq!(CheckedNeg::checked_neg(&MIN), None);
+    ///
+    /// assert_eq!(CheckedNeg::checked_neg(&0_u32), Some(0));
+    /// assert_eq!(CheckedNeg::checked_neg(&1_u32), None);
+    /// ```
+    fn checked_neg(&self) -> Option<Self>;
+}
+
+checked_impl_unary!(CheckedNeg, checked_neg, u8);
+checked_impl_unary!(CheckedNeg, checked_neg, u16);
+checked_impl_unary!(CheckedNeg, checked_neg, u32);
+checked_impl_unary!(CheckedNeg, checked_neg, u64);
+checked_impl_unary!(CheckedNeg, checked_neg, usize);
+checked_impl_unary!(CheckedNeg, checked_neg, u128);
+
+checked_impl_unary!(CheckedNeg, checked_neg, i8);
+checked_impl_unary!(CheckedNeg, checked_neg, i16);
+checked_impl_unary!(CheckedNeg, checked_neg, i32);
+checked_impl_unary!(CheckedNeg, checked_neg, i64);
+checked_impl_unary!(CheckedNeg, checked_neg, isize);
+checked_impl_unary!(CheckedNeg, checked_neg, i128);
+
+/// Performs a left shift that returns `None` on shifts larger than
+/// or equal to the type width.
+pub trait CheckedShl: Sized + Shl<u32, Output = Self> {
+    /// Checked shift left. Computes `self << rhs`, returning `None`
+    /// if `rhs` is larger than or equal to the number of bits in `self`.
+    ///
+    /// ```
+    /// use num_traits::CheckedShl;
+    ///
+    /// let x: u16 = 0x0001;
+    ///
+    /// assert_eq!(CheckedShl::checked_shl(&x, 0),  Some(0x0001));
+    /// assert_eq!(CheckedShl::checked_shl(&x, 1),  Some(0x0002));
+    /// assert_eq!(CheckedShl::checked_shl(&x, 15), Some(0x8000));
+    /// assert_eq!(CheckedShl::checked_shl(&x, 16), None);
+    /// ```
+    fn checked_shl(&self, rhs: u32) -> Option<Self>;
+}
+
+macro_rules! checked_shift_impl {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self, rhs: u32) -> Option<$t> {
+                <$t>::$method(*self, rhs)
+            }
+        }
+    };
+}
+
+checked_shift_impl!(CheckedShl, checked_shl, u8);
+checked_shift_impl!(CheckedShl, checked_shl, u16);
+checked_shift_impl!(CheckedShl, checked_shl, u32);
+checked_shift_impl!(CheckedShl, checked_shl, u64);
+checked_shift_impl!(CheckedShl, checked_shl, usize);
+checked_shift_impl!(CheckedShl, checked_shl, u128);
+
+checked_shift_impl!(CheckedShl, checked_shl, i8);
+checked_shift_impl!(CheckedShl, checked_shl, i16);
+checked_shift_impl!(CheckedShl, checked_shl, i32);
+checked_shift_impl!(CheckedShl, checked_shl, i64);
+checked_shift_impl!(CheckedShl, checked_shl, isize);
+checked_shift_impl!(CheckedShl, checked_shl, i128);
+
+/// Performs a right shift that returns `None` on shifts larger than
+/// or equal to the type width.
+pub trait CheckedShr: Sized + Shr<u32, Output = Self> {
+    /// Checked shift right. Computes `self >> rhs`, returning `None`
+    /// if `rhs` is larger than or equal to the number of bits in `self`.
+    ///
+    /// ```
+    /// use num_traits::CheckedShr;
+    ///
+    /// let x: u16 = 0x8000;
+    ///
+    /// assert_eq!(CheckedShr::checked_shr(&x, 0),  Some(0x8000));
+    /// assert_eq!(CheckedShr::checked_shr(&x, 1),  Some(0x4000));
+    /// assert_eq!(CheckedShr::checked_shr(&x, 15), Some(0x0001));
+    /// assert_eq!(CheckedShr::checked_shr(&x, 16), None);
+    /// ```
+    fn checked_shr(&self, rhs: u32) -> Option<Self>;
+}
+
+checked_shift_impl!(CheckedShr, checked_shr, u8);
+checked_shift_impl!(CheckedShr, checked_shr, u16);
+checked_shift_impl!(CheckedShr, checked_shr, u32);
+checked_shift_impl!(CheckedShr, checked_shr, u64);
+checked_shift_impl!(CheckedShr, checked_shr, usize);
+checked_shift_impl!(CheckedShr, checked_shr, u128);
+
+checked_shift_impl!(CheckedShr, checked_shr, i8);
+checked_shift_impl!(CheckedShr, checked_shr, i16);
+checked_shift_impl!(CheckedShr, checked_shr, i32);
+checked_shift_impl!(CheckedShr, checked_shr, i64);
+checked_shift_impl!(CheckedShr, checked_shr, isize);
+checked_shift_impl!(CheckedShr, checked_shr, i128);
+
\ No newline at end of file diff --git a/src/num_traits/ops/euclid.rs.html b/src/num_traits/ops/euclid.rs.html new file mode 100644 index 0000000..5569c02 --- /dev/null +++ b/src/num_traits/ops/euclid.rs.html @@ -0,0 +1,557 @@ +euclid.rs - source

num_traits/ops/
euclid.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
use core::ops::{Div, Rem};
+
+pub trait Euclid: Sized + Div<Self, Output = Self> + Rem<Self, Output = Self> {
+    /// Calculates Euclidean division, the matching method for `rem_euclid`.
+    ///
+    /// This computes the integer `n` such that
+    /// `self = n * v + self.rem_euclid(v)`.
+    /// In other words, the result is `self / v` rounded to the integer `n`
+    /// such that `self >= n * v`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::Euclid;
+    ///
+    /// let a: i32 = 7;
+    /// let b: i32 = 4;
+    /// assert_eq!(Euclid::div_euclid(&a, &b), 1); // 7 > 4 * 1
+    /// assert_eq!(Euclid::div_euclid(&-a, &b), -2); // -7 >= 4 * -2
+    /// assert_eq!(Euclid::div_euclid(&a, &-b), -1); // 7 >= -4 * -1
+    /// assert_eq!(Euclid::div_euclid(&-a, &-b), 2); // -7 >= -4 * 2
+    /// ```
+    fn div_euclid(&self, v: &Self) -> Self;
+
+    /// Calculates the least nonnegative remainder of `self (mod v)`.
+    ///
+    /// In particular, the return value `r` satisfies `0.0 <= r < v.abs()` in
+    /// most cases. However, due to a floating point round-off error it can
+    /// result in `r == v.abs()`, violating the mathematical definition, if
+    /// `self` is much smaller than `v.abs()` in magnitude and `self < 0.0`.
+    /// This result is not an element of the function's codomain, but it is the
+    /// closest floating point number in the real numbers and thus fulfills the
+    /// property `self == self.div_euclid(v) * v + self.rem_euclid(v)`
+    /// approximatively.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::Euclid;
+    ///
+    /// let a: i32 = 7;
+    /// let b: i32 = 4;
+    /// assert_eq!(Euclid::rem_euclid(&a, &b), 3);
+    /// assert_eq!(Euclid::rem_euclid(&-a, &b), 1);
+    /// assert_eq!(Euclid::rem_euclid(&a, &-b), 3);
+    /// assert_eq!(Euclid::rem_euclid(&-a, &-b), 1);
+    /// ```
+    fn rem_euclid(&self, v: &Self) -> Self;
+
+    /// Returns both the quotient and remainder from Euclidean division.
+    ///
+    /// By default, it internally calls both `Euclid::div_euclid` and `Euclid::rem_euclid`,
+    /// but it can be overridden in order to implement some optimization.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// # use num_traits::Euclid;
+    /// let x = 5u8;
+    /// let y = 3u8;
+    ///
+    /// let div = Euclid::div_euclid(&x, &y);
+    /// let rem = Euclid::rem_euclid(&x, &y);
+    ///
+    /// assert_eq!((div, rem), Euclid::div_rem_euclid(&x, &y));
+    /// ```
+    fn div_rem_euclid(&self, v: &Self) -> (Self, Self) {
+        (self.div_euclid(v), self.rem_euclid(v))
+    }
+}
+
+macro_rules! euclid_forward_impl {
+    ($($t:ty)*) => {$(
+        impl Euclid for $t {
+            #[inline]
+            fn div_euclid(&self, v: &$t) -> Self {
+                <$t>::div_euclid(*self, *v)
+            }
+
+            #[inline]
+            fn rem_euclid(&self, v: &$t) -> Self {
+                <$t>::rem_euclid(*self, *v)
+            }
+        }
+    )*}
+}
+
+euclid_forward_impl!(isize i8 i16 i32 i64 i128);
+euclid_forward_impl!(usize u8 u16 u32 u64 u128);
+
+#[cfg(feature = "std")]
+euclid_forward_impl!(f32 f64);
+
+#[cfg(not(feature = "std"))]
+impl Euclid for f32 {
+    #[inline]
+    fn div_euclid(&self, v: &f32) -> f32 {
+        let q = <f32 as crate::float::FloatCore>::trunc(self / v);
+        if self % v < 0.0 {
+            return if *v > 0.0 { q - 1.0 } else { q + 1.0 };
+        }
+        q
+    }
+
+    #[inline]
+    fn rem_euclid(&self, v: &f32) -> f32 {
+        let r = self % v;
+        if r < 0.0 {
+            r + <f32 as crate::float::FloatCore>::abs(*v)
+        } else {
+            r
+        }
+    }
+}
+
+#[cfg(not(feature = "std"))]
+impl Euclid for f64 {
+    #[inline]
+    fn div_euclid(&self, v: &f64) -> f64 {
+        let q = <f64 as crate::float::FloatCore>::trunc(self / v);
+        if self % v < 0.0 {
+            return if *v > 0.0 { q - 1.0 } else { q + 1.0 };
+        }
+        q
+    }
+
+    #[inline]
+    fn rem_euclid(&self, v: &f64) -> f64 {
+        let r = self % v;
+        if r < 0.0 {
+            r + <f64 as crate::float::FloatCore>::abs(*v)
+        } else {
+            r
+        }
+    }
+}
+
+pub trait CheckedEuclid: Euclid {
+    /// Performs euclid division that returns `None` instead of panicking on division by zero
+    /// and instead of wrapping around on underflow and overflow.
+    fn checked_div_euclid(&self, v: &Self) -> Option<Self>;
+
+    /// Finds the euclid remainder of dividing two numbers, checking for underflow, overflow and
+    /// division by zero. If any of that happens, `None` is returned.
+    fn checked_rem_euclid(&self, v: &Self) -> Option<Self>;
+
+    /// Returns both the quotient and remainder from checked Euclidean division.
+    ///
+    /// By default, it internally calls both `CheckedEuclid::checked_div_euclid` and `CheckedEuclid::checked_rem_euclid`,
+    /// but it can be overridden in order to implement some optimization.
+    /// # Examples
+    ///
+    /// ```
+    /// # use num_traits::CheckedEuclid;
+    /// let x = 5u8;
+    /// let y = 3u8;
+    ///
+    /// let div = CheckedEuclid::checked_div_euclid(&x, &y);
+    /// let rem = CheckedEuclid::checked_rem_euclid(&x, &y);
+    ///
+    /// assert_eq!(Some((div.unwrap(), rem.unwrap())), CheckedEuclid::checked_div_rem_euclid(&x, &y));
+    /// ```
+    fn checked_div_rem_euclid(&self, v: &Self) -> Option<(Self, Self)> {
+        Some((self.checked_div_euclid(v)?, self.checked_rem_euclid(v)?))
+    }
+}
+
+macro_rules! checked_euclid_forward_impl {
+    ($($t:ty)*) => {$(
+        impl CheckedEuclid for $t {
+            #[inline]
+            fn checked_div_euclid(&self, v: &$t) -> Option<Self> {
+                <$t>::checked_div_euclid(*self, *v)
+            }
+
+            #[inline]
+            fn checked_rem_euclid(&self, v: &$t) -> Option<Self> {
+                <$t>::checked_rem_euclid(*self, *v)
+            }
+        }
+    )*}
+}
+
+checked_euclid_forward_impl!(isize i8 i16 i32 i64 i128);
+checked_euclid_forward_impl!(usize u8 u16 u32 u64 u128);
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn euclid_unsigned() {
+        macro_rules! test_euclid {
+            ($($t:ident)+) => {
+                $(
+                    {
+                        let x: $t = 10;
+                        let y: $t = 3;
+                        let div = Euclid::div_euclid(&x, &y);
+                        let rem = Euclid::rem_euclid(&x, &y);
+                        assert_eq!(div, 3);
+                        assert_eq!(rem, 1);
+                        assert_eq!((div, rem), Euclid::div_rem_euclid(&x, &y));
+                    }
+                )+
+            };
+        }
+
+        test_euclid!(usize u8 u16 u32 u64);
+    }
+
+    #[test]
+    fn euclid_signed() {
+        macro_rules! test_euclid {
+            ($($t:ident)+) => {
+                $(
+                    {
+                        let x: $t = 10;
+                        let y: $t = -3;
+                        assert_eq!(Euclid::div_euclid(&x, &y), -3);
+                        assert_eq!(Euclid::div_euclid(&-x, &y), 4);
+                        assert_eq!(Euclid::rem_euclid(&x, &y), 1);
+                        assert_eq!(Euclid::rem_euclid(&-x, &y), 2);
+                        assert_eq!((Euclid::div_euclid(&x, &y), Euclid::rem_euclid(&x, &y)), Euclid::div_rem_euclid(&x, &y));
+                        let x: $t = $t::min_value() + 1;
+                        let y: $t = -1;
+                        assert_eq!(Euclid::div_euclid(&x, &y), $t::max_value());
+                    }
+                )+
+            };
+        }
+
+        test_euclid!(isize i8 i16 i32 i64 i128);
+    }
+
+    #[test]
+    fn euclid_float() {
+        macro_rules! test_euclid {
+            ($($t:ident)+) => {
+                $(
+                    {
+                        let x: $t = 12.1;
+                        let y: $t = 3.2;
+                        assert!(Euclid::div_euclid(&x, &y) * y + Euclid::rem_euclid(&x, &y) - x
+                        <= 46.4 * <$t as crate::float::FloatCore>::epsilon());
+                        assert!(Euclid::div_euclid(&x, &-y) * -y + Euclid::rem_euclid(&x, &-y) - x
+                        <= 46.4 * <$t as crate::float::FloatCore>::epsilon());
+                        assert!(Euclid::div_euclid(&-x, &y) * y + Euclid::rem_euclid(&-x, &y) + x
+                        <= 46.4 * <$t as crate::float::FloatCore>::epsilon());
+                        assert!(Euclid::div_euclid(&-x, &-y) * -y + Euclid::rem_euclid(&-x, &-y) + x
+                        <= 46.4 * <$t as crate::float::FloatCore>::epsilon());
+                        assert_eq!((Euclid::div_euclid(&x, &y), Euclid::rem_euclid(&x, &y)), Euclid::div_rem_euclid(&x, &y));
+                    }
+                )+
+            };
+        }
+
+        test_euclid!(f32 f64);
+    }
+
+    #[test]
+    fn euclid_checked() {
+        macro_rules! test_euclid_checked {
+            ($($t:ident)+) => {
+                $(
+                    {
+                        assert_eq!(CheckedEuclid::checked_div_euclid(&$t::min_value(), &-1), None);
+                        assert_eq!(CheckedEuclid::checked_rem_euclid(&$t::min_value(), &-1), None);
+                        assert_eq!(CheckedEuclid::checked_div_euclid(&1, &0), None);
+                        assert_eq!(CheckedEuclid::checked_rem_euclid(&1, &0), None);
+                    }
+                )+
+            };
+        }
+
+        test_euclid_checked!(isize i8 i16 i32 i64 i128);
+    }
+}
+
\ No newline at end of file diff --git a/src/num_traits/ops/inv.rs.html b/src/num_traits/ops/inv.rs.html new file mode 100644 index 0000000..a60fbef --- /dev/null +++ b/src/num_traits/ops/inv.rs.html @@ -0,0 +1,95 @@ +inv.rs - source

num_traits/ops/
inv.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
/// Unary operator for retrieving the multiplicative inverse, or reciprocal, of a value.
+pub trait Inv {
+    /// The result after applying the operator.
+    type Output;
+
+    /// Returns the multiplicative inverse of `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use std::f64::INFINITY;
+    /// use num_traits::Inv;
+    ///
+    /// assert_eq!(7.0.inv() * 7.0, 1.0);
+    /// assert_eq!((-0.0).inv(), -INFINITY);
+    /// ```
+    fn inv(self) -> Self::Output;
+}
+
+impl Inv for f32 {
+    type Output = f32;
+    #[inline]
+    fn inv(self) -> f32 {
+        1.0 / self
+    }
+}
+impl Inv for f64 {
+    type Output = f64;
+    #[inline]
+    fn inv(self) -> f64 {
+        1.0 / self
+    }
+}
+impl<'a> Inv for &'a f32 {
+    type Output = f32;
+    #[inline]
+    fn inv(self) -> f32 {
+        1.0 / *self
+    }
+}
+impl<'a> Inv for &'a f64 {
+    type Output = f64;
+    #[inline]
+    fn inv(self) -> f64 {
+        1.0 / *self
+    }
+}
+
\ No newline at end of file diff --git a/src/num_traits/ops/mod.rs.html b/src/num_traits/ops/mod.rs.html new file mode 100644 index 0000000..8b825e5 --- /dev/null +++ b/src/num_traits/ops/mod.rs.html @@ -0,0 +1,17 @@ +mod.rs - source

num_traits/ops/
mod.rs

+1
+2
+3
+4
+5
+6
+7
+8
pub mod bytes;
+pub mod checked;
+pub mod euclid;
+pub mod inv;
+pub mod mul_add;
+pub mod overflowing;
+pub mod saturating;
+pub mod wrapping;
+
\ No newline at end of file diff --git a/src/num_traits/ops/mul_add.rs.html b/src/num_traits/ops/mul_add.rs.html new file mode 100644 index 0000000..edb8ea5 --- /dev/null +++ b/src/num_traits/ops/mul_add.rs.html @@ -0,0 +1,299 @@ +mul_add.rs - source

num_traits/ops/
mul_add.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
/// Fused multiply-add. Computes `(self * a) + b` with only one rounding
+/// error, yielding a more accurate result than an unfused multiply-add.
+///
+/// Using `mul_add` can be more performant than an unfused multiply-add if
+/// the target architecture has a dedicated `fma` CPU instruction.
+///
+/// Note that `A` and `B` are `Self` by default, but this is not mandatory.
+///
+/// # Example
+///
+/// ```
+/// use std::f32;
+///
+/// let m = 10.0_f32;
+/// let x = 4.0_f32;
+/// let b = 60.0_f32;
+///
+/// // 100.0
+/// let abs_difference = (m.mul_add(x, b) - (m*x + b)).abs();
+///
+/// assert!(abs_difference <= 100.0 * f32::EPSILON);
+/// ```
+pub trait MulAdd<A = Self, B = Self> {
+    /// The resulting type after applying the fused multiply-add.
+    type Output;
+
+    /// Performs the fused multiply-add operation `(self * a) + b`
+    fn mul_add(self, a: A, b: B) -> Self::Output;
+}
+
+/// The fused multiply-add assignment operation `*self = (*self * a) + b`
+pub trait MulAddAssign<A = Self, B = Self> {
+    /// Performs the fused multiply-add assignment operation `*self = (*self * a) + b`
+    fn mul_add_assign(&mut self, a: A, b: B);
+}
+
+#[cfg(any(feature = "std", feature = "libm"))]
+impl MulAdd<f32, f32> for f32 {
+    type Output = Self;
+
+    #[inline]
+    fn mul_add(self, a: Self, b: Self) -> Self::Output {
+        <Self as crate::Float>::mul_add(self, a, b)
+    }
+}
+
+#[cfg(any(feature = "std", feature = "libm"))]
+impl MulAdd<f64, f64> for f64 {
+    type Output = Self;
+
+    #[inline]
+    fn mul_add(self, a: Self, b: Self) -> Self::Output {
+        <Self as crate::Float>::mul_add(self, a, b)
+    }
+}
+
+macro_rules! mul_add_impl {
+    ($trait_name:ident for $($t:ty)*) => {$(
+        impl $trait_name for $t {
+            type Output = Self;
+
+            #[inline]
+            fn mul_add(self, a: Self, b: Self) -> Self::Output {
+                (self * a) + b
+            }
+        }
+    )*}
+}
+
+mul_add_impl!(MulAdd for isize i8 i16 i32 i64 i128);
+mul_add_impl!(MulAdd for usize u8 u16 u32 u64 u128);
+
+#[cfg(any(feature = "std", feature = "libm"))]
+impl MulAddAssign<f32, f32> for f32 {
+    #[inline]
+    fn mul_add_assign(&mut self, a: Self, b: Self) {
+        *self = <Self as crate::Float>::mul_add(*self, a, b)
+    }
+}
+
+#[cfg(any(feature = "std", feature = "libm"))]
+impl MulAddAssign<f64, f64> for f64 {
+    #[inline]
+    fn mul_add_assign(&mut self, a: Self, b: Self) {
+        *self = <Self as crate::Float>::mul_add(*self, a, b)
+    }
+}
+
+macro_rules! mul_add_assign_impl {
+    ($trait_name:ident for $($t:ty)*) => {$(
+        impl $trait_name for $t {
+            #[inline]
+            fn mul_add_assign(&mut self, a: Self, b: Self) {
+                *self = (*self * a) + b
+            }
+        }
+    )*}
+}
+
+mul_add_assign_impl!(MulAddAssign for isize i8 i16 i32 i64 i128);
+mul_add_assign_impl!(MulAddAssign for usize u8 u16 u32 u64 u128);
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn mul_add_integer() {
+        macro_rules! test_mul_add {
+            ($($t:ident)+) => {
+                $(
+                    {
+                        let m: $t = 2;
+                        let x: $t = 3;
+                        let b: $t = 4;
+
+                        assert_eq!(MulAdd::mul_add(m, x, b), (m*x + b));
+                    }
+                )+
+            };
+        }
+
+        test_mul_add!(usize u8 u16 u32 u64 isize i8 i16 i32 i64);
+    }
+
+    #[test]
+    #[cfg(feature = "std")]
+    fn mul_add_float() {
+        macro_rules! test_mul_add {
+            ($($t:ident)+) => {
+                $(
+                    {
+                        use core::$t;
+
+                        let m: $t = 12.0;
+                        let x: $t = 3.4;
+                        let b: $t = 5.6;
+
+                        let abs_difference = (MulAdd::mul_add(m, x, b) - (m*x + b)).abs();
+
+                        assert!(abs_difference <= 46.4 * $t::EPSILON);
+                    }
+                )+
+            };
+        }
+
+        test_mul_add!(f32 f64);
+    }
+}
+
\ No newline at end of file diff --git a/src/num_traits/ops/overflowing.rs.html b/src/num_traits/ops/overflowing.rs.html new file mode 100644 index 0000000..522e7a2 --- /dev/null +++ b/src/num_traits/ops/overflowing.rs.html @@ -0,0 +1,193 @@ +overflowing.rs - source

num_traits/ops/
overflowing.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
use core::ops::{Add, Mul, Sub};
+use core::{i128, i16, i32, i64, i8, isize};
+use core::{u128, u16, u32, u64, u8, usize};
+
+macro_rules! overflowing_impl {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self, v: &Self) -> (Self, bool) {
+                <$t>::$method(*self, *v)
+            }
+        }
+    };
+}
+
+/// Performs addition with a flag for overflow.
+pub trait OverflowingAdd: Sized + Add<Self, Output = Self> {
+    /// Returns a tuple of the sum along with a boolean indicating whether an arithmetic overflow would occur.
+    /// If an overflow would have occurred then the wrapped value is returned.
+    fn overflowing_add(&self, v: &Self) -> (Self, bool);
+}
+
+overflowing_impl!(OverflowingAdd, overflowing_add, u8);
+overflowing_impl!(OverflowingAdd, overflowing_add, u16);
+overflowing_impl!(OverflowingAdd, overflowing_add, u32);
+overflowing_impl!(OverflowingAdd, overflowing_add, u64);
+overflowing_impl!(OverflowingAdd, overflowing_add, usize);
+overflowing_impl!(OverflowingAdd, overflowing_add, u128);
+
+overflowing_impl!(OverflowingAdd, overflowing_add, i8);
+overflowing_impl!(OverflowingAdd, overflowing_add, i16);
+overflowing_impl!(OverflowingAdd, overflowing_add, i32);
+overflowing_impl!(OverflowingAdd, overflowing_add, i64);
+overflowing_impl!(OverflowingAdd, overflowing_add, isize);
+overflowing_impl!(OverflowingAdd, overflowing_add, i128);
+
+/// Performs substraction with a flag for overflow.
+pub trait OverflowingSub: Sized + Sub<Self, Output = Self> {
+    /// Returns a tuple of the difference along with a boolean indicating whether an arithmetic overflow would occur.
+    /// If an overflow would have occurred then the wrapped value is returned.
+    fn overflowing_sub(&self, v: &Self) -> (Self, bool);
+}
+
+overflowing_impl!(OverflowingSub, overflowing_sub, u8);
+overflowing_impl!(OverflowingSub, overflowing_sub, u16);
+overflowing_impl!(OverflowingSub, overflowing_sub, u32);
+overflowing_impl!(OverflowingSub, overflowing_sub, u64);
+overflowing_impl!(OverflowingSub, overflowing_sub, usize);
+overflowing_impl!(OverflowingSub, overflowing_sub, u128);
+
+overflowing_impl!(OverflowingSub, overflowing_sub, i8);
+overflowing_impl!(OverflowingSub, overflowing_sub, i16);
+overflowing_impl!(OverflowingSub, overflowing_sub, i32);
+overflowing_impl!(OverflowingSub, overflowing_sub, i64);
+overflowing_impl!(OverflowingSub, overflowing_sub, isize);
+overflowing_impl!(OverflowingSub, overflowing_sub, i128);
+
+/// Performs multiplication with a flag for overflow.
+pub trait OverflowingMul: Sized + Mul<Self, Output = Self> {
+    /// Returns a tuple of the product along with a boolean indicating whether an arithmetic overflow would occur.
+    /// If an overflow would have occurred then the wrapped value is returned.
+    fn overflowing_mul(&self, v: &Self) -> (Self, bool);
+}
+
+overflowing_impl!(OverflowingMul, overflowing_mul, u8);
+overflowing_impl!(OverflowingMul, overflowing_mul, u16);
+overflowing_impl!(OverflowingMul, overflowing_mul, u32);
+overflowing_impl!(OverflowingMul, overflowing_mul, u64);
+overflowing_impl!(OverflowingMul, overflowing_mul, usize);
+overflowing_impl!(OverflowingMul, overflowing_mul, u128);
+
+overflowing_impl!(OverflowingMul, overflowing_mul, i8);
+overflowing_impl!(OverflowingMul, overflowing_mul, i16);
+overflowing_impl!(OverflowingMul, overflowing_mul, i32);
+overflowing_impl!(OverflowingMul, overflowing_mul, i64);
+overflowing_impl!(OverflowingMul, overflowing_mul, isize);
+overflowing_impl!(OverflowingMul, overflowing_mul, i128);
+
+#[test]
+fn test_overflowing_traits() {
+    fn overflowing_add<T: OverflowingAdd>(a: T, b: T) -> (T, bool) {
+        a.overflowing_add(&b)
+    }
+    fn overflowing_sub<T: OverflowingSub>(a: T, b: T) -> (T, bool) {
+        a.overflowing_sub(&b)
+    }
+    fn overflowing_mul<T: OverflowingMul>(a: T, b: T) -> (T, bool) {
+        a.overflowing_mul(&b)
+    }
+    assert_eq!(overflowing_add(5i16, 2), (7, false));
+    assert_eq!(overflowing_add(i16::MAX, 1), (i16::MIN, true));
+    assert_eq!(overflowing_sub(5i16, 2), (3, false));
+    assert_eq!(overflowing_sub(i16::MIN, 1), (i16::MAX, true));
+    assert_eq!(overflowing_mul(5i16, 2), (10, false));
+    assert_eq!(overflowing_mul(1_000_000_000i32, 10), (1410065408, true));
+}
+
\ No newline at end of file diff --git a/src/num_traits/ops/saturating.rs.html b/src/num_traits/ops/saturating.rs.html new file mode 100644 index 0000000..dd63d03 --- /dev/null +++ b/src/num_traits/ops/saturating.rs.html @@ -0,0 +1,261 @@ +saturating.rs - source

num_traits/ops/
saturating.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
use core::ops::{Add, Mul, Sub};
+
+/// Saturating math operations. Deprecated, use `SaturatingAdd`, `SaturatingSub` and
+/// `SaturatingMul` instead.
+pub trait Saturating {
+    /// Saturating addition operator.
+    /// Returns a+b, saturating at the numeric bounds instead of overflowing.
+    fn saturating_add(self, v: Self) -> Self;
+
+    /// Saturating subtraction operator.
+    /// Returns a-b, saturating at the numeric bounds instead of overflowing.
+    fn saturating_sub(self, v: Self) -> Self;
+}
+
+macro_rules! deprecated_saturating_impl {
+    ($trait_name:ident for $($t:ty)*) => {$(
+        impl $trait_name for $t {
+            #[inline]
+            fn saturating_add(self, v: Self) -> Self {
+                Self::saturating_add(self, v)
+            }
+
+            #[inline]
+            fn saturating_sub(self, v: Self) -> Self {
+                Self::saturating_sub(self, v)
+            }
+        }
+    )*}
+}
+
+deprecated_saturating_impl!(Saturating for isize i8 i16 i32 i64 i128);
+deprecated_saturating_impl!(Saturating for usize u8 u16 u32 u64 u128);
+
+macro_rules! saturating_impl {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self, v: &Self) -> Self {
+                <$t>::$method(*self, *v)
+            }
+        }
+    };
+}
+
+/// Performs addition that saturates at the numeric bounds instead of overflowing.
+pub trait SaturatingAdd: Sized + Add<Self, Output = Self> {
+    /// Saturating addition. Computes `self + other`, saturating at the relevant high or low boundary of
+    /// the type.
+    fn saturating_add(&self, v: &Self) -> Self;
+}
+
+saturating_impl!(SaturatingAdd, saturating_add, u8);
+saturating_impl!(SaturatingAdd, saturating_add, u16);
+saturating_impl!(SaturatingAdd, saturating_add, u32);
+saturating_impl!(SaturatingAdd, saturating_add, u64);
+saturating_impl!(SaturatingAdd, saturating_add, usize);
+saturating_impl!(SaturatingAdd, saturating_add, u128);
+
+saturating_impl!(SaturatingAdd, saturating_add, i8);
+saturating_impl!(SaturatingAdd, saturating_add, i16);
+saturating_impl!(SaturatingAdd, saturating_add, i32);
+saturating_impl!(SaturatingAdd, saturating_add, i64);
+saturating_impl!(SaturatingAdd, saturating_add, isize);
+saturating_impl!(SaturatingAdd, saturating_add, i128);
+
+/// Performs subtraction that saturates at the numeric bounds instead of overflowing.
+pub trait SaturatingSub: Sized + Sub<Self, Output = Self> {
+    /// Saturating subtraction. Computes `self - other`, saturating at the relevant high or low boundary of
+    /// the type.
+    fn saturating_sub(&self, v: &Self) -> Self;
+}
+
+saturating_impl!(SaturatingSub, saturating_sub, u8);
+saturating_impl!(SaturatingSub, saturating_sub, u16);
+saturating_impl!(SaturatingSub, saturating_sub, u32);
+saturating_impl!(SaturatingSub, saturating_sub, u64);
+saturating_impl!(SaturatingSub, saturating_sub, usize);
+saturating_impl!(SaturatingSub, saturating_sub, u128);
+
+saturating_impl!(SaturatingSub, saturating_sub, i8);
+saturating_impl!(SaturatingSub, saturating_sub, i16);
+saturating_impl!(SaturatingSub, saturating_sub, i32);
+saturating_impl!(SaturatingSub, saturating_sub, i64);
+saturating_impl!(SaturatingSub, saturating_sub, isize);
+saturating_impl!(SaturatingSub, saturating_sub, i128);
+
+/// Performs multiplication that saturates at the numeric bounds instead of overflowing.
+pub trait SaturatingMul: Sized + Mul<Self, Output = Self> {
+    /// Saturating multiplication. Computes `self * other`, saturating at the relevant high or low boundary of
+    /// the type.
+    fn saturating_mul(&self, v: &Self) -> Self;
+}
+
+saturating_impl!(SaturatingMul, saturating_mul, u8);
+saturating_impl!(SaturatingMul, saturating_mul, u16);
+saturating_impl!(SaturatingMul, saturating_mul, u32);
+saturating_impl!(SaturatingMul, saturating_mul, u64);
+saturating_impl!(SaturatingMul, saturating_mul, usize);
+saturating_impl!(SaturatingMul, saturating_mul, u128);
+
+saturating_impl!(SaturatingMul, saturating_mul, i8);
+saturating_impl!(SaturatingMul, saturating_mul, i16);
+saturating_impl!(SaturatingMul, saturating_mul, i32);
+saturating_impl!(SaturatingMul, saturating_mul, i64);
+saturating_impl!(SaturatingMul, saturating_mul, isize);
+saturating_impl!(SaturatingMul, saturating_mul, i128);
+
+// TODO: add SaturatingNeg for signed integer primitives once the saturating_neg() API is stable.
+
+#[test]
+fn test_saturating_traits() {
+    fn saturating_add<T: SaturatingAdd>(a: T, b: T) -> T {
+        a.saturating_add(&b)
+    }
+    fn saturating_sub<T: SaturatingSub>(a: T, b: T) -> T {
+        a.saturating_sub(&b)
+    }
+    fn saturating_mul<T: SaturatingMul>(a: T, b: T) -> T {
+        a.saturating_mul(&b)
+    }
+    assert_eq!(saturating_add(255, 1), 255u8);
+    assert_eq!(saturating_add(127, 1), 127i8);
+    assert_eq!(saturating_add(-128, -1), -128i8);
+    assert_eq!(saturating_sub(0, 1), 0u8);
+    assert_eq!(saturating_sub(-128, 1), -128i8);
+    assert_eq!(saturating_sub(127, -1), 127i8);
+    assert_eq!(saturating_mul(255, 2), 255u8);
+    assert_eq!(saturating_mul(127, 2), 127i8);
+    assert_eq!(saturating_mul(-128, 2), -128i8);
+}
+
\ No newline at end of file diff --git a/src/num_traits/ops/wrapping.rs.html b/src/num_traits/ops/wrapping.rs.html new file mode 100644 index 0000000..c3b7077 --- /dev/null +++ b/src/num_traits/ops/wrapping.rs.html @@ -0,0 +1,655 @@ +wrapping.rs - source

num_traits/ops/
wrapping.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
use core::num::Wrapping;
+use core::ops::{Add, Mul, Neg, Shl, Shr, Sub};
+
+macro_rules! wrapping_impl {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self, v: &Self) -> Self {
+                <$t>::$method(*self, *v)
+            }
+        }
+    };
+    ($trait_name:ident, $method:ident, $t:ty, $rhs:ty) => {
+        impl $trait_name<$rhs> for $t {
+            #[inline]
+            fn $method(&self, v: &$rhs) -> Self {
+                <$t>::$method(*self, *v)
+            }
+        }
+    };
+}
+
+/// Performs addition that wraps around on overflow.
+pub trait WrappingAdd: Sized + Add<Self, Output = Self> {
+    /// Wrapping (modular) addition. Computes `self + other`, wrapping around at the boundary of
+    /// the type.
+    fn wrapping_add(&self, v: &Self) -> Self;
+}
+
+wrapping_impl!(WrappingAdd, wrapping_add, u8);
+wrapping_impl!(WrappingAdd, wrapping_add, u16);
+wrapping_impl!(WrappingAdd, wrapping_add, u32);
+wrapping_impl!(WrappingAdd, wrapping_add, u64);
+wrapping_impl!(WrappingAdd, wrapping_add, usize);
+wrapping_impl!(WrappingAdd, wrapping_add, u128);
+
+wrapping_impl!(WrappingAdd, wrapping_add, i8);
+wrapping_impl!(WrappingAdd, wrapping_add, i16);
+wrapping_impl!(WrappingAdd, wrapping_add, i32);
+wrapping_impl!(WrappingAdd, wrapping_add, i64);
+wrapping_impl!(WrappingAdd, wrapping_add, isize);
+wrapping_impl!(WrappingAdd, wrapping_add, i128);
+
+/// Performs subtraction that wraps around on overflow.
+pub trait WrappingSub: Sized + Sub<Self, Output = Self> {
+    /// Wrapping (modular) subtraction. Computes `self - other`, wrapping around at the boundary
+    /// of the type.
+    fn wrapping_sub(&self, v: &Self) -> Self;
+}
+
+wrapping_impl!(WrappingSub, wrapping_sub, u8);
+wrapping_impl!(WrappingSub, wrapping_sub, u16);
+wrapping_impl!(WrappingSub, wrapping_sub, u32);
+wrapping_impl!(WrappingSub, wrapping_sub, u64);
+wrapping_impl!(WrappingSub, wrapping_sub, usize);
+wrapping_impl!(WrappingSub, wrapping_sub, u128);
+
+wrapping_impl!(WrappingSub, wrapping_sub, i8);
+wrapping_impl!(WrappingSub, wrapping_sub, i16);
+wrapping_impl!(WrappingSub, wrapping_sub, i32);
+wrapping_impl!(WrappingSub, wrapping_sub, i64);
+wrapping_impl!(WrappingSub, wrapping_sub, isize);
+wrapping_impl!(WrappingSub, wrapping_sub, i128);
+
+/// Performs multiplication that wraps around on overflow.
+pub trait WrappingMul: Sized + Mul<Self, Output = Self> {
+    /// Wrapping (modular) multiplication. Computes `self * other`, wrapping around at the boundary
+    /// of the type.
+    fn wrapping_mul(&self, v: &Self) -> Self;
+}
+
+wrapping_impl!(WrappingMul, wrapping_mul, u8);
+wrapping_impl!(WrappingMul, wrapping_mul, u16);
+wrapping_impl!(WrappingMul, wrapping_mul, u32);
+wrapping_impl!(WrappingMul, wrapping_mul, u64);
+wrapping_impl!(WrappingMul, wrapping_mul, usize);
+wrapping_impl!(WrappingMul, wrapping_mul, u128);
+
+wrapping_impl!(WrappingMul, wrapping_mul, i8);
+wrapping_impl!(WrappingMul, wrapping_mul, i16);
+wrapping_impl!(WrappingMul, wrapping_mul, i32);
+wrapping_impl!(WrappingMul, wrapping_mul, i64);
+wrapping_impl!(WrappingMul, wrapping_mul, isize);
+wrapping_impl!(WrappingMul, wrapping_mul, i128);
+
+macro_rules! wrapping_unary_impl {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self) -> $t {
+                <$t>::$method(*self)
+            }
+        }
+    };
+}
+
+/// Performs a negation that does not panic.
+pub trait WrappingNeg: Sized {
+    /// Wrapping (modular) negation. Computes `-self`,
+    /// wrapping around at the boundary of the type.
+    ///
+    /// Since unsigned types do not have negative equivalents
+    /// all applications of this function will wrap (except for `-0`).
+    /// For values smaller than the corresponding signed type's maximum
+    /// the result is the same as casting the corresponding signed value.
+    /// Any larger values are equivalent to `MAX + 1 - (val - MAX - 1)` where
+    /// `MAX` is the corresponding signed type's maximum.
+    ///
+    /// ```
+    /// use num_traits::WrappingNeg;
+    ///
+    /// assert_eq!(100i8.wrapping_neg(), -100);
+    /// assert_eq!((-100i8).wrapping_neg(), 100);
+    /// assert_eq!((-128i8).wrapping_neg(), -128); // wrapped!
+    /// ```
+    fn wrapping_neg(&self) -> Self;
+}
+
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, u8);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, u16);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, u32);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, u64);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, usize);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, u128);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, i8);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, i16);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, i32);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, i64);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, isize);
+wrapping_unary_impl!(WrappingNeg, wrapping_neg, i128);
+
+macro_rules! wrapping_shift_impl {
+    ($trait_name:ident, $method:ident, $t:ty) => {
+        impl $trait_name for $t {
+            #[inline]
+            fn $method(&self, rhs: u32) -> $t {
+                <$t>::$method(*self, rhs)
+            }
+        }
+    };
+}
+
+/// Performs a left shift that does not panic.
+pub trait WrappingShl: Sized + Shl<usize, Output = Self> {
+    /// Panic-free bitwise shift-left; yields `self << mask(rhs)`,
+    /// where `mask` removes any high order bits of `rhs` that would
+    /// cause the shift to exceed the bitwidth of the type.
+    ///
+    /// ```
+    /// use num_traits::WrappingShl;
+    ///
+    /// let x: u16 = 0x0001;
+    ///
+    /// assert_eq!(WrappingShl::wrapping_shl(&x, 0),  0x0001);
+    /// assert_eq!(WrappingShl::wrapping_shl(&x, 1),  0x0002);
+    /// assert_eq!(WrappingShl::wrapping_shl(&x, 15), 0x8000);
+    /// assert_eq!(WrappingShl::wrapping_shl(&x, 16), 0x0001);
+    /// ```
+    fn wrapping_shl(&self, rhs: u32) -> Self;
+}
+
+wrapping_shift_impl!(WrappingShl, wrapping_shl, u8);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, u16);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, u32);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, u64);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, usize);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, u128);
+
+wrapping_shift_impl!(WrappingShl, wrapping_shl, i8);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, i16);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, i32);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, i64);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, isize);
+wrapping_shift_impl!(WrappingShl, wrapping_shl, i128);
+
+/// Performs a right shift that does not panic.
+pub trait WrappingShr: Sized + Shr<usize, Output = Self> {
+    /// Panic-free bitwise shift-right; yields `self >> mask(rhs)`,
+    /// where `mask` removes any high order bits of `rhs` that would
+    /// cause the shift to exceed the bitwidth of the type.
+    ///
+    /// ```
+    /// use num_traits::WrappingShr;
+    ///
+    /// let x: u16 = 0x8000;
+    ///
+    /// assert_eq!(WrappingShr::wrapping_shr(&x, 0),  0x8000);
+    /// assert_eq!(WrappingShr::wrapping_shr(&x, 1),  0x4000);
+    /// assert_eq!(WrappingShr::wrapping_shr(&x, 15), 0x0001);
+    /// assert_eq!(WrappingShr::wrapping_shr(&x, 16), 0x8000);
+    /// ```
+    fn wrapping_shr(&self, rhs: u32) -> Self;
+}
+
+wrapping_shift_impl!(WrappingShr, wrapping_shr, u8);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, u16);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, u32);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, u64);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, usize);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, u128);
+
+wrapping_shift_impl!(WrappingShr, wrapping_shr, i8);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, i16);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, i32);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, i64);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, isize);
+wrapping_shift_impl!(WrappingShr, wrapping_shr, i128);
+
+// Well this is a bit funny, but all the more appropriate.
+impl<T: WrappingAdd> WrappingAdd for Wrapping<T>
+where
+    Wrapping<T>: Add<Output = Wrapping<T>>,
+{
+    fn wrapping_add(&self, v: &Self) -> Self {
+        Wrapping(self.0.wrapping_add(&v.0))
+    }
+}
+impl<T: WrappingSub> WrappingSub for Wrapping<T>
+where
+    Wrapping<T>: Sub<Output = Wrapping<T>>,
+{
+    fn wrapping_sub(&self, v: &Self) -> Self {
+        Wrapping(self.0.wrapping_sub(&v.0))
+    }
+}
+impl<T: WrappingMul> WrappingMul for Wrapping<T>
+where
+    Wrapping<T>: Mul<Output = Wrapping<T>>,
+{
+    fn wrapping_mul(&self, v: &Self) -> Self {
+        Wrapping(self.0.wrapping_mul(&v.0))
+    }
+}
+impl<T: WrappingNeg> WrappingNeg for Wrapping<T>
+where
+    Wrapping<T>: Neg<Output = Wrapping<T>>,
+{
+    fn wrapping_neg(&self) -> Self {
+        Wrapping(self.0.wrapping_neg())
+    }
+}
+impl<T: WrappingShl> WrappingShl for Wrapping<T>
+where
+    Wrapping<T>: Shl<usize, Output = Wrapping<T>>,
+{
+    fn wrapping_shl(&self, rhs: u32) -> Self {
+        Wrapping(self.0.wrapping_shl(rhs))
+    }
+}
+impl<T: WrappingShr> WrappingShr for Wrapping<T>
+where
+    Wrapping<T>: Shr<usize, Output = Wrapping<T>>,
+{
+    fn wrapping_shr(&self, rhs: u32) -> Self {
+        Wrapping(self.0.wrapping_shr(rhs))
+    }
+}
+
+#[test]
+fn test_wrapping_traits() {
+    fn wrapping_add<T: WrappingAdd>(a: T, b: T) -> T {
+        a.wrapping_add(&b)
+    }
+    fn wrapping_sub<T: WrappingSub>(a: T, b: T) -> T {
+        a.wrapping_sub(&b)
+    }
+    fn wrapping_mul<T: WrappingMul>(a: T, b: T) -> T {
+        a.wrapping_mul(&b)
+    }
+    fn wrapping_neg<T: WrappingNeg>(a: T) -> T {
+        a.wrapping_neg()
+    }
+    fn wrapping_shl<T: WrappingShl>(a: T, b: u32) -> T {
+        a.wrapping_shl(b)
+    }
+    fn wrapping_shr<T: WrappingShr>(a: T, b: u32) -> T {
+        a.wrapping_shr(b)
+    }
+    assert_eq!(wrapping_add(255, 1), 0u8);
+    assert_eq!(wrapping_sub(0, 1), 255u8);
+    assert_eq!(wrapping_mul(255, 2), 254u8);
+    assert_eq!(wrapping_neg(255), 1u8);
+    assert_eq!(wrapping_shl(255, 8), 255u8);
+    assert_eq!(wrapping_shr(255, 8), 255u8);
+    assert_eq!(wrapping_add(255, 1), (Wrapping(255u8) + Wrapping(1u8)).0);
+    assert_eq!(wrapping_sub(0, 1), (Wrapping(0u8) - Wrapping(1u8)).0);
+    assert_eq!(wrapping_mul(255, 2), (Wrapping(255u8) * Wrapping(2u8)).0);
+    assert_eq!(wrapping_neg(255), (-Wrapping(255u8)).0);
+    assert_eq!(wrapping_shl(255, 8), (Wrapping(255u8) << 8).0);
+    assert_eq!(wrapping_shr(255, 8), (Wrapping(255u8) >> 8).0);
+}
+
+#[test]
+fn wrapping_is_wrappingadd() {
+    fn require_wrappingadd<T: WrappingAdd>(_: &T) {}
+    require_wrappingadd(&Wrapping(42));
+}
+
+#[test]
+fn wrapping_is_wrappingsub() {
+    fn require_wrappingsub<T: WrappingSub>(_: &T) {}
+    require_wrappingsub(&Wrapping(42));
+}
+
+#[test]
+fn wrapping_is_wrappingmul() {
+    fn require_wrappingmul<T: WrappingMul>(_: &T) {}
+    require_wrappingmul(&Wrapping(42));
+}
+
+#[test]
+fn wrapping_is_wrappingneg() {
+    fn require_wrappingneg<T: WrappingNeg>(_: &T) {}
+    require_wrappingneg(&Wrapping(42));
+}
+
+#[test]
+fn wrapping_is_wrappingshl() {
+    fn require_wrappingshl<T: WrappingShl>(_: &T) {}
+    require_wrappingshl(&Wrapping(42));
+}
+
+#[test]
+fn wrapping_is_wrappingshr() {
+    fn require_wrappingshr<T: WrappingShr>(_: &T) {}
+    require_wrappingshr(&Wrapping(42));
+}
+
\ No newline at end of file diff --git a/src/num_traits/pow.rs.html b/src/num_traits/pow.rs.html new file mode 100644 index 0000000..c06a817 --- /dev/null +++ b/src/num_traits/pow.rs.html @@ -0,0 +1,485 @@ +pow.rs - source

num_traits/
pow.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
use crate::{CheckedMul, One};
+use core::num::Wrapping;
+use core::ops::Mul;
+
+/// Binary operator for raising a value to a power.
+pub trait Pow<RHS> {
+    /// The result after applying the operator.
+    type Output;
+
+    /// Returns `self` to the power `rhs`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use num_traits::Pow;
+    /// assert_eq!(Pow::pow(10u32, 2u32), 100);
+    /// ```
+    fn pow(self, rhs: RHS) -> Self::Output;
+}
+
+macro_rules! pow_impl {
+    ($t:ty) => {
+        pow_impl!($t, u8);
+        pow_impl!($t, usize);
+
+        // FIXME: these should be possible
+        // pow_impl!($t, u16);
+        // pow_impl!($t, u32);
+        // pow_impl!($t, u64);
+    };
+    ($t:ty, $rhs:ty) => {
+        pow_impl!($t, $rhs, usize, pow);
+    };
+    ($t:ty, $rhs:ty, $desired_rhs:ty, $method:expr) => {
+        impl Pow<$rhs> for $t {
+            type Output = $t;
+            #[inline]
+            fn pow(self, rhs: $rhs) -> $t {
+                ($method)(self, <$desired_rhs>::from(rhs))
+            }
+        }
+
+        impl<'a> Pow<&'a $rhs> for $t {
+            type Output = $t;
+            #[inline]
+            fn pow(self, rhs: &'a $rhs) -> $t {
+                ($method)(self, <$desired_rhs>::from(*rhs))
+            }
+        }
+
+        impl<'a> Pow<$rhs> for &'a $t {
+            type Output = $t;
+            #[inline]
+            fn pow(self, rhs: $rhs) -> $t {
+                ($method)(*self, <$desired_rhs>::from(rhs))
+            }
+        }
+
+        impl<'a, 'b> Pow<&'a $rhs> for &'b $t {
+            type Output = $t;
+            #[inline]
+            fn pow(self, rhs: &'a $rhs) -> $t {
+                ($method)(*self, <$desired_rhs>::from(*rhs))
+            }
+        }
+    };
+}
+
+pow_impl!(u8, u8, u32, u8::pow);
+pow_impl!(u8, u16, u32, u8::pow);
+pow_impl!(u8, u32, u32, u8::pow);
+pow_impl!(u8, usize);
+pow_impl!(i8, u8, u32, i8::pow);
+pow_impl!(i8, u16, u32, i8::pow);
+pow_impl!(i8, u32, u32, i8::pow);
+pow_impl!(i8, usize);
+pow_impl!(u16, u8, u32, u16::pow);
+pow_impl!(u16, u16, u32, u16::pow);
+pow_impl!(u16, u32, u32, u16::pow);
+pow_impl!(u16, usize);
+pow_impl!(i16, u8, u32, i16::pow);
+pow_impl!(i16, u16, u32, i16::pow);
+pow_impl!(i16, u32, u32, i16::pow);
+pow_impl!(i16, usize);
+pow_impl!(u32, u8, u32, u32::pow);
+pow_impl!(u32, u16, u32, u32::pow);
+pow_impl!(u32, u32, u32, u32::pow);
+pow_impl!(u32, usize);
+pow_impl!(i32, u8, u32, i32::pow);
+pow_impl!(i32, u16, u32, i32::pow);
+pow_impl!(i32, u32, u32, i32::pow);
+pow_impl!(i32, usize);
+pow_impl!(u64, u8, u32, u64::pow);
+pow_impl!(u64, u16, u32, u64::pow);
+pow_impl!(u64, u32, u32, u64::pow);
+pow_impl!(u64, usize);
+pow_impl!(i64, u8, u32, i64::pow);
+pow_impl!(i64, u16, u32, i64::pow);
+pow_impl!(i64, u32, u32, i64::pow);
+pow_impl!(i64, usize);
+
+pow_impl!(u128, u8, u32, u128::pow);
+pow_impl!(u128, u16, u32, u128::pow);
+pow_impl!(u128, u32, u32, u128::pow);
+pow_impl!(u128, usize);
+
+pow_impl!(i128, u8, u32, i128::pow);
+pow_impl!(i128, u16, u32, i128::pow);
+pow_impl!(i128, u32, u32, i128::pow);
+pow_impl!(i128, usize);
+
+pow_impl!(usize, u8, u32, usize::pow);
+pow_impl!(usize, u16, u32, usize::pow);
+pow_impl!(usize, u32, u32, usize::pow);
+pow_impl!(usize, usize);
+pow_impl!(isize, u8, u32, isize::pow);
+pow_impl!(isize, u16, u32, isize::pow);
+pow_impl!(isize, u32, u32, isize::pow);
+pow_impl!(isize, usize);
+pow_impl!(Wrapping<u8>);
+pow_impl!(Wrapping<i8>);
+pow_impl!(Wrapping<u16>);
+pow_impl!(Wrapping<i16>);
+pow_impl!(Wrapping<u32>);
+pow_impl!(Wrapping<i32>);
+pow_impl!(Wrapping<u64>);
+pow_impl!(Wrapping<i64>);
+pow_impl!(Wrapping<u128>);
+pow_impl!(Wrapping<i128>);
+pow_impl!(Wrapping<usize>);
+pow_impl!(Wrapping<isize>);
+
+// FIXME: these should be possible
+// pow_impl!(u8, u64);
+// pow_impl!(i16, u64);
+// pow_impl!(i8, u64);
+// pow_impl!(u16, u64);
+// pow_impl!(u32, u64);
+// pow_impl!(i32, u64);
+// pow_impl!(u64, u64);
+// pow_impl!(i64, u64);
+// pow_impl!(usize, u64);
+// pow_impl!(isize, u64);
+
+#[cfg(any(feature = "std", feature = "libm"))]
+mod float_impls {
+    use super::Pow;
+    use crate::Float;
+
+    pow_impl!(f32, i8, i32, <f32 as Float>::powi);
+    pow_impl!(f32, u8, i32, <f32 as Float>::powi);
+    pow_impl!(f32, i16, i32, <f32 as Float>::powi);
+    pow_impl!(f32, u16, i32, <f32 as Float>::powi);
+    pow_impl!(f32, i32, i32, <f32 as Float>::powi);
+    pow_impl!(f64, i8, i32, <f64 as Float>::powi);
+    pow_impl!(f64, u8, i32, <f64 as Float>::powi);
+    pow_impl!(f64, i16, i32, <f64 as Float>::powi);
+    pow_impl!(f64, u16, i32, <f64 as Float>::powi);
+    pow_impl!(f64, i32, i32, <f64 as Float>::powi);
+    pow_impl!(f32, f32, f32, <f32 as Float>::powf);
+    pow_impl!(f64, f32, f64, <f64 as Float>::powf);
+    pow_impl!(f64, f64, f64, <f64 as Float>::powf);
+}
+
+/// Raises a value to the power of exp, using exponentiation by squaring.
+///
+/// Note that `0⁰` (`pow(0, 0)`) returns `1`. Mathematically this is undefined.
+///
+/// # Example
+///
+/// ```rust
+/// use num_traits::pow;
+///
+/// assert_eq!(pow(2i8, 4), 16);
+/// assert_eq!(pow(6u8, 3), 216);
+/// assert_eq!(pow(0u8, 0), 1); // Be aware if this case affects you
+/// ```
+#[inline]
+pub fn pow<T: Clone + One + Mul<T, Output = T>>(mut base: T, mut exp: usize) -> T {
+    if exp == 0 {
+        return T::one();
+    }
+
+    while exp & 1 == 0 {
+        base = base.clone() * base;
+        exp >>= 1;
+    }
+    if exp == 1 {
+        return base;
+    }
+
+    let mut acc = base.clone();
+    while exp > 1 {
+        exp >>= 1;
+        base = base.clone() * base;
+        if exp & 1 == 1 {
+            acc = acc * base.clone();
+        }
+    }
+    acc
+}
+
+/// Raises a value to the power of exp, returning `None` if an overflow occurred.
+///
+/// Note that `0⁰` (`checked_pow(0, 0)`) returns `Some(1)`. Mathematically this is undefined.
+///
+/// Otherwise same as the `pow` function.
+///
+/// # Example
+///
+/// ```rust
+/// use num_traits::checked_pow;
+///
+/// assert_eq!(checked_pow(2i8, 4), Some(16));
+/// assert_eq!(checked_pow(7i8, 8), None);
+/// assert_eq!(checked_pow(7u32, 8), Some(5_764_801));
+/// assert_eq!(checked_pow(0u32, 0), Some(1)); // Be aware if this case affect you
+/// ```
+#[inline]
+pub fn checked_pow<T: Clone + One + CheckedMul>(mut base: T, mut exp: usize) -> Option<T> {
+    if exp == 0 {
+        return Some(T::one());
+    }
+
+    while exp & 1 == 0 {
+        base = base.checked_mul(&base)?;
+        exp >>= 1;
+    }
+    if exp == 1 {
+        return Some(base);
+    }
+
+    let mut acc = base.clone();
+    while exp > 1 {
+        exp >>= 1;
+        base = base.checked_mul(&base)?;
+        if exp & 1 == 1 {
+            acc = acc.checked_mul(&base)?;
+        }
+    }
+    Some(acc)
+}
+
\ No newline at end of file diff --git a/src/num_traits/sign.rs.html b/src/num_traits/sign.rs.html new file mode 100644 index 0000000..ccede74 --- /dev/null +++ b/src/num_traits/sign.rs.html @@ -0,0 +1,433 @@ +sign.rs - source

num_traits/
sign.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
use core::num::Wrapping;
+use core::ops::Neg;
+
+use crate::float::FloatCore;
+use crate::Num;
+
+/// Useful functions for signed numbers (i.e. numbers that can be negative).
+pub trait Signed: Sized + Num + Neg<Output = Self> {
+    /// Computes the absolute value.
+    ///
+    /// For `f32` and `f64`, `NaN` will be returned if the number is `NaN`.
+    ///
+    /// For signed integers, `::MIN` will be returned if the number is `::MIN`.
+    fn abs(&self) -> Self;
+
+    /// The positive difference of two numbers.
+    ///
+    /// Returns `zero` if the number is less than or equal to `other`, otherwise the difference
+    /// between `self` and `other` is returned.
+    fn abs_sub(&self, other: &Self) -> Self;
+
+    /// Returns the sign of the number.
+    ///
+    /// For `f32` and `f64`:
+    ///
+    /// * `1.0` if the number is positive, `+0.0` or `INFINITY`
+    /// * `-1.0` if the number is negative, `-0.0` or `NEG_INFINITY`
+    /// * `NaN` if the number is `NaN`
+    ///
+    /// For signed integers:
+    ///
+    /// * `0` if the number is zero
+    /// * `1` if the number is positive
+    /// * `-1` if the number is negative
+    fn signum(&self) -> Self;
+
+    /// Returns true if the number is positive and false if the number is zero or negative.
+    fn is_positive(&self) -> bool;
+
+    /// Returns true if the number is negative and false if the number is zero or positive.
+    fn is_negative(&self) -> bool;
+}
+
+macro_rules! signed_impl {
+    ($($t:ty)*) => ($(
+        impl Signed for $t {
+            #[inline]
+            fn abs(&self) -> $t {
+                if self.is_negative() { -*self } else { *self }
+            }
+
+            #[inline]
+            fn abs_sub(&self, other: &$t) -> $t {
+                if *self <= *other { 0 } else { *self - *other }
+            }
+
+            #[inline]
+            fn signum(&self) -> $t {
+                match *self {
+                    n if n > 0 => 1,
+                    0 => 0,
+                    _ => -1,
+                }
+            }
+
+            #[inline]
+            fn is_positive(&self) -> bool { *self > 0 }
+
+            #[inline]
+            fn is_negative(&self) -> bool { *self < 0 }
+        }
+    )*)
+}
+
+signed_impl!(isize i8 i16 i32 i64 i128);
+
+impl<T: Signed> Signed for Wrapping<T>
+where
+    Wrapping<T>: Num + Neg<Output = Wrapping<T>>,
+{
+    #[inline]
+    fn abs(&self) -> Self {
+        Wrapping(self.0.abs())
+    }
+
+    #[inline]
+    fn abs_sub(&self, other: &Self) -> Self {
+        Wrapping(self.0.abs_sub(&other.0))
+    }
+
+    #[inline]
+    fn signum(&self) -> Self {
+        Wrapping(self.0.signum())
+    }
+
+    #[inline]
+    fn is_positive(&self) -> bool {
+        self.0.is_positive()
+    }
+
+    #[inline]
+    fn is_negative(&self) -> bool {
+        self.0.is_negative()
+    }
+}
+
+macro_rules! signed_float_impl {
+    ($t:ty) => {
+        impl Signed for $t {
+            /// Computes the absolute value. Returns `NAN` if the number is `NAN`.
+            #[inline]
+            fn abs(&self) -> $t {
+                FloatCore::abs(*self)
+            }
+
+            /// The positive difference of two numbers. Returns `0.0` if the number is
+            /// less than or equal to `other`, otherwise the difference between`self`
+            /// and `other` is returned.
+            #[inline]
+            fn abs_sub(&self, other: &$t) -> $t {
+                if *self <= *other {
+                    0.
+                } else {
+                    *self - *other
+                }
+            }
+
+            /// # Returns
+            ///
+            /// - `1.0` if the number is positive, `+0.0` or `INFINITY`
+            /// - `-1.0` if the number is negative, `-0.0` or `NEG_INFINITY`
+            /// - `NAN` if the number is NaN
+            #[inline]
+            fn signum(&self) -> $t {
+                FloatCore::signum(*self)
+            }
+
+            /// Returns `true` if the number is positive, including `+0.0` and `INFINITY`
+            #[inline]
+            fn is_positive(&self) -> bool {
+                FloatCore::is_sign_positive(*self)
+            }
+
+            /// Returns `true` if the number is negative, including `-0.0` and `NEG_INFINITY`
+            #[inline]
+            fn is_negative(&self) -> bool {
+                FloatCore::is_sign_negative(*self)
+            }
+        }
+    };
+}
+
+signed_float_impl!(f32);
+signed_float_impl!(f64);
+
+/// Computes the absolute value.
+///
+/// For `f32` and `f64`, `NaN` will be returned if the number is `NaN`
+///
+/// For signed integers, `::MIN` will be returned if the number is `::MIN`.
+#[inline(always)]
+pub fn abs<T: Signed>(value: T) -> T {
+    value.abs()
+}
+
+/// The positive difference of two numbers.
+///
+/// Returns zero if `x` is less than or equal to `y`, otherwise the difference
+/// between `x` and `y` is returned.
+#[inline(always)]
+pub fn abs_sub<T: Signed>(x: T, y: T) -> T {
+    x.abs_sub(&y)
+}
+
+/// Returns the sign of the number.
+///
+/// For `f32` and `f64`:
+///
+/// * `1.0` if the number is positive, `+0.0` or `INFINITY`
+/// * `-1.0` if the number is negative, `-0.0` or `NEG_INFINITY`
+/// * `NaN` if the number is `NaN`
+///
+/// For signed integers:
+///
+/// * `0` if the number is zero
+/// * `1` if the number is positive
+/// * `-1` if the number is negative
+#[inline(always)]
+pub fn signum<T: Signed>(value: T) -> T {
+    value.signum()
+}
+
+/// A trait for values which cannot be negative
+pub trait Unsigned: Num {}
+
+macro_rules! empty_trait_impl {
+    ($name:ident for $($t:ty)*) => ($(
+        impl $name for $t {}
+    )*)
+}
+
+empty_trait_impl!(Unsigned for usize u8 u16 u32 u64 u128);
+
+impl<T: Unsigned> Unsigned for Wrapping<T> where Wrapping<T>: Num {}
+
+#[test]
+fn unsigned_wrapping_is_unsigned() {
+    fn require_unsigned<T: Unsigned>(_: &T) {}
+    require_unsigned(&Wrapping(42_u32));
+}
+
+#[test]
+fn signed_wrapping_is_signed() {
+    fn require_signed<T: Signed>(_: &T) {}
+    require_signed(&Wrapping(-42));
+}
+
\ No newline at end of file diff --git a/src/rbitset/lib.rs.html b/src/rbitset/lib.rs.html new file mode 100644 index 0000000..ab25117 --- /dev/null +++ b/src/rbitset/lib.rs.html @@ -0,0 +1,3943 @@ +lib.rs - source

rbitset/
lib.rs

+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+861
+862
+863
+864
+865
+866
+867
+868
+869
+870
+871
+872
+873
+874
+875
+876
+877
+878
+879
+880
+881
+882
+883
+884
+885
+886
+887
+888
+889
+890
+891
+892
+893
+894
+895
+896
+897
+898
+899
+900
+901
+902
+903
+904
+905
+906
+907
+908
+909
+910
+911
+912
+913
+914
+915
+916
+917
+918
+919
+920
+921
+922
+923
+924
+925
+926
+927
+928
+929
+930
+931
+932
+933
+934
+935
+936
+937
+938
+939
+940
+941
+942
+943
+944
+945
+946
+947
+948
+949
+950
+951
+952
+953
+954
+955
+956
+957
+958
+959
+960
+961
+962
+963
+964
+965
+966
+967
+968
+969
+970
+971
+972
+973
+974
+975
+976
+977
+978
+979
+980
+981
+982
+983
+984
+985
+986
+987
+988
+989
+990
+991
+992
+993
+994
+995
+996
+997
+998
+999
+1000
+1001
+1002
+1003
+1004
+1005
+1006
+1007
+1008
+1009
+1010
+1011
+1012
+1013
+1014
+1015
+1016
+1017
+1018
+1019
+1020
+1021
+1022
+1023
+1024
+1025
+1026
+1027
+1028
+1029
+1030
+1031
+1032
+1033
+1034
+1035
+1036
+1037
+1038
+1039
+1040
+1041
+1042
+1043
+1044
+1045
+1046
+1047
+1048
+1049
+1050
+1051
+1052
+1053
+1054
+1055
+1056
+1057
+1058
+1059
+1060
+1061
+1062
+1063
+1064
+1065
+1066
+1067
+1068
+1069
+1070
+1071
+1072
+1073
+1074
+1075
+1076
+1077
+1078
+1079
+1080
+1081
+1082
+1083
+1084
+1085
+1086
+1087
+1088
+1089
+1090
+1091
+1092
+1093
+1094
+1095
+1096
+1097
+1098
+1099
+1100
+1101
+1102
+1103
+1104
+1105
+1106
+1107
+1108
+1109
+1110
+1111
+1112
+1113
+1114
+1115
+1116
+1117
+1118
+1119
+1120
+1121
+1122
+1123
+1124
+1125
+1126
+1127
+1128
+1129
+1130
+1131
+1132
+1133
+1134
+1135
+1136
+1137
+1138
+1139
+1140
+1141
+1142
+1143
+1144
+1145
+1146
+1147
+1148
+1149
+1150
+1151
+1152
+1153
+1154
+1155
+1156
+1157
+1158
+1159
+1160
+1161
+1162
+1163
+1164
+1165
+1166
+1167
+1168
+1169
+1170
+1171
+1172
+1173
+1174
+1175
+1176
+1177
+1178
+1179
+1180
+1181
+1182
+1183
+1184
+1185
+1186
+1187
+1188
+1189
+1190
+1191
+1192
+1193
+1194
+1195
+1196
+1197
+1198
+1199
+1200
+1201
+1202
+1203
+1204
+1205
+1206
+1207
+1208
+1209
+1210
+1211
+1212
+1213
+1214
+1215
+1216
+1217
+1218
+1219
+1220
+1221
+1222
+1223
+1224
+1225
+1226
+1227
+1228
+1229
+1230
+1231
+1232
+1233
+1234
+1235
+1236
+1237
+1238
+1239
+1240
+1241
+1242
+1243
+1244
+1245
+1246
+1247
+1248
+1249
+1250
+1251
+1252
+1253
+1254
+1255
+1256
+1257
+1258
+1259
+1260
+1261
+1262
+1263
+1264
+1265
+1266
+1267
+1268
+1269
+1270
+1271
+1272
+1273
+1274
+1275
+1276
+1277
+1278
+1279
+1280
+1281
+1282
+1283
+1284
+1285
+1286
+1287
+1288
+1289
+1290
+1291
+1292
+1293
+1294
+1295
+1296
+1297
+1298
+1299
+1300
+1301
+1302
+1303
+1304
+1305
+1306
+1307
+1308
+1309
+1310
+1311
+1312
+1313
+1314
+1315
+1316
+1317
+1318
+1319
+1320
+1321
+1322
+1323
+1324
+1325
+1326
+1327
+1328
+1329
+1330
+1331
+1332
+1333
+1334
+1335
+1336
+1337
+1338
+1339
+1340
+1341
+1342
+1343
+1344
+1345
+1346
+1347
+1348
+1349
+1350
+1351
+1352
+1353
+1354
+1355
+1356
+1357
+1358
+1359
+1360
+1361
+1362
+1363
+1364
+1365
+1366
+1367
+1368
+1369
+1370
+1371
+1372
+1373
+1374
+1375
+1376
+1377
+1378
+1379
+1380
+1381
+1382
+1383
+1384
+1385
+1386
+1387
+1388
+1389
+1390
+1391
+1392
+1393
+1394
+1395
+1396
+1397
+1398
+1399
+1400
+1401
+1402
+1403
+1404
+1405
+1406
+1407
+1408
+1409
+1410
+1411
+1412
+1413
+1414
+1415
+1416
+1417
+1418
+1419
+1420
+1421
+1422
+1423
+1424
+1425
+1426
+1427
+1428
+1429
+1430
+1431
+1432
+1433
+1434
+1435
+1436
+1437
+1438
+1439
+1440
+1441
+1442
+1443
+1444
+1445
+1446
+1447
+1448
+1449
+1450
+1451
+1452
+1453
+1454
+1455
+1456
+1457
+1458
+1459
+1460
+1461
+1462
+1463
+1464
+1465
+1466
+1467
+1468
+1469
+1470
+1471
+1472
+1473
+1474
+1475
+1476
+1477
+1478
+1479
+1480
+1481
+1482
+1483
+1484
+1485
+1486
+1487
+1488
+1489
+1490
+1491
+1492
+1493
+1494
+1495
+1496
+1497
+1498
+1499
+1500
+1501
+1502
+1503
+1504
+1505
+1506
+1507
+1508
+1509
+1510
+1511
+1512
+1513
+1514
+1515
+1516
+1517
+1518
+1519
+1520
+1521
+1522
+1523
+1524
+1525
+1526
+1527
+1528
+1529
+1530
+1531
+1532
+1533
+1534
+1535
+1536
+1537
+1538
+1539
+1540
+1541
+1542
+1543
+1544
+1545
+1546
+1547
+1548
+1549
+1550
+1551
+1552
+1553
+1554
+1555
+1556
+1557
+1558
+1559
+1560
+1561
+1562
+1563
+1564
+1565
+1566
+1567
+1568
+1569
+1570
+1571
+1572
+1573
+1574
+1575
+1576
+1577
+1578
+1579
+1580
+1581
+1582
+1583
+1584
+1585
+1586
+1587
+1588
+1589
+1590
+1591
+1592
+1593
+1594
+1595
+1596
+1597
+1598
+1599
+1600
+1601
+1602
+1603
+1604
+1605
+1606
+1607
+1608
+1609
+1610
+1611
+1612
+1613
+1614
+1615
+1616
+1617
+1618
+1619
+1620
+1621
+1622
+1623
+1624
+1625
+1626
+1627
+1628
+1629
+1630
+1631
+1632
+1633
+1634
+1635
+1636
+1637
+1638
+1639
+1640
+1641
+1642
+1643
+1644
+1645
+1646
+1647
+1648
+1649
+1650
+1651
+1652
+1653
+1654
+1655
+1656
+1657
+1658
+1659
+1660
+1661
+1662
+1663
+1664
+1665
+1666
+1667
+1668
+1669
+1670
+1671
+1672
+1673
+1674
+1675
+1676
+1677
+1678
+1679
+1680
+1681
+1682
+1683
+1684
+1685
+1686
+1687
+1688
+1689
+1690
+1691
+1692
+1693
+1694
+1695
+1696
+1697
+1698
+1699
+1700
+1701
+1702
+1703
+1704
+1705
+1706
+1707
+1708
+1709
+1710
+1711
+1712
+1713
+1714
+1715
+1716
+1717
+1718
+1719
+1720
+1721
+1722
+1723
+1724
+1725
+1726
+1727
+1728
+1729
+1730
+1731
+1732
+1733
+1734
+1735
+1736
+1737
+1738
+1739
+1740
+1741
+1742
+1743
+1744
+1745
+1746
+1747
+1748
+1749
+1750
+1751
+1752
+1753
+1754
+1755
+1756
+1757
+1758
+1759
+1760
+1761
+1762
+1763
+1764
+1765
+1766
+1767
+1768
+1769
+1770
+1771
+1772
+1773
+1774
+1775
+1776
+1777
+1778
+1779
+1780
+1781
+1782
+1783
+1784
+1785
+1786
+1787
+1788
+1789
+1790
+1791
+1792
+1793
+1794
+1795
+1796
+1797
+1798
+1799
+1800
+1801
+1802
+1803
+1804
+1805
+1806
+1807
+1808
+1809
+1810
+1811
+1812
+1813
+1814
+1815
+1816
+1817
+1818
+1819
+1820
+1821
+1822
+1823
+1824
+1825
+1826
+1827
+1828
+1829
+1830
+1831
+1832
+1833
+1834
+1835
+1836
+1837
+1838
+1839
+1840
+1841
+1842
+1843
+1844
+1845
+1846
+1847
+1848
+1849
+1850
+1851
+1852
+1853
+1854
+1855
+1856
+1857
+1858
+1859
+1860
+1861
+1862
+1863
+1864
+1865
+1866
+1867
+1868
+1869
+1870
+1871
+1872
+1873
+1874
+1875
+1876
+1877
+1878
+1879
+1880
+1881
+1882
+1883
+1884
+1885
+1886
+1887
+1888
+1889
+1890
+1891
+1892
+1893
+1894
+1895
+1896
+1897
+1898
+1899
+1900
+1901
+1902
+1903
+1904
+1905
+1906
+1907
+1908
+1909
+1910
+1911
+1912
+1913
+1914
+1915
+1916
+1917
+1918
+1919
+1920
+1921
+1922
+1923
+1924
+1925
+1926
+1927
+1928
+1929
+1930
+1931
+1932
+1933
+1934
+1935
+1936
+1937
+1938
+1939
+1940
+1941
+1942
+1943
+1944
+1945
+1946
+1947
+1948
+1949
+1950
+1951
+1952
+1953
+1954
+1955
+1956
+1957
+1958
+1959
+1960
+1961
+1962
+1963
+1964
+1965
+1966
+1967
+1968
+1969
+1970
+1971
#![no_std]
+#![cfg_attr(docsrs, feature(doc_cfg))]
+
+use core::{
+    fmt,
+    iter::{Chain, FusedIterator},
+    mem,
+    ops::{Bound, Not, RangeBounds},
+};
+
+use num_traits::{Bounded, PrimInt};
+
+#[cfg(feature = "serde")]
+use serde::{Deserialize, Serialize, de::Visitor, ser::SerializeSeq};
+
+/// A bit set able to hold up to 8 elements.
+pub type BitSet8 = BitSet<u8, 1>;
+/// A bit set able to hold up to 16 elements.
+pub type BitSet16 = BitSet<u16, 1>;
+/// A bit set able to hold up to 32 elements.
+pub type BitSet32 = BitSet<u32, 1>;
+/// A bit set able to hold up to 64 elements.
+pub type BitSet64 = BitSet<u64, 1>;
+/// A bit set able to hold up to 128 elements.
+pub type BitSet128 = BitSet<u64, 2>;
+/// A bit set able to hold up to 256 elements.
+pub type BitSet256 = BitSet<u64, 4>;
+/// A bit set able to hold up to 512 elements.
+pub type BitSet512 = BitSet<u64, 8>;
+/// A bit set able to hold up to 1024 elements.
+pub type BitSet1024 = BitSet<u64, 16>;
+
+/// The bit set itself.
+///
+/// This wrapper is `#![repr(transparent)]` and guaranteed to have the same memory
+/// representation as the inner bit array
+///
+/// # Panics
+/// All non-try functions taking a bit parameter panics if the bit is bigger
+/// than the capacity of the set. For non-panicking versions, use `try_`.
+#[repr(transparent)]
+#[derive(Clone, Copy, PartialEq, Eq)]
+pub struct BitSet<T, const N: usize> {
+    inner: [T; N],
+}
+
+impl<T: PrimInt + Default, const N: usize> Default for BitSet<T, N> {
+    fn default() -> Self {
+        Self {
+            inner: [Default::default(); N],
+        }
+    }
+}
+
+impl<T: PrimInt, const N: usize> From<[T; N]> for BitSet<T, N> {
+    fn from(inner: [T; N]) -> Self {
+        Self { inner }
+    }
+}
+
+impl<T, const N: usize> fmt::Debug for BitSet<T, N>
+where T: PrimInt
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_set().entries(self.iter()).finish()
+    }
+}
+
+impl<T, const N: usize> fmt::Binary for BitSet<T, N>
+where T: Copy + fmt::Binary
+{
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "BitSet ")?;
+        let mut list = f.debug_list();
+
+        for item in self.inner.iter() {
+            list.entry(&format_args!(
+                "{:#0width$b}",
+                item,
+                width = 2 /* 0b */ + Self::item_size()
+            ));
+        }
+
+        list.finish()
+    }
+}
+
+/// Removed hacking macros just to add another one LOL
+/// FIXME: Use const trait implementation when that is stabilized
+macro_rules! impl_new {
+    ($($t:ty)+) => {
+        $(
+        impl<const N: usize> BitSet<$t, N> {
+            /// Create an empty instance of [`BitSet`].
+            ///
+            /// # Examples
+            ///
+            /// ```
+            /// use rbitset::BitSet;
+            ///
+            /// let set = BitSet::<u8, 1>::new();
+            /// ```
+            pub const fn new() -> Self {
+                Self { inner: [0; N] }
+            }
+        }
+        )+
+    };
+}
+
+impl_new!(i8 i16 i32 i64 i128 isize);
+impl_new!(u8 u16 u32 u64 u128 usize);
+
+impl<T: PrimInt + Default, const N: usize> BitSet<T, N> {
+    /// Create an empty instance with default value.
+    ///
+    /// This function is the same as [`new`](BitSet::new) but without the constness.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet;
+    ///
+    /// let set = BitSet::<u32, 7>::new();
+    /// ```
+    pub fn with_default() -> Self {
+        Self::default()
+    }
+
+    /// Clears the set, disabling all bits, removing all elements.
+    ///
+    /// Probably faster than what `fill(.., false)` would be.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let mut set = BitSet8::new();
+    /// set.insert(1);
+    /// assert!(!set.is_empty());
+    /// set.clear();
+    /// assert!(set.is_empty());
+    /// ```
+    pub fn clear(&mut self) {
+        for item in self.inner.iter_mut() {
+            *item = Default::default()
+        }
+    }
+}
+
+impl<T, const N: usize> BitSet<T, N> {
+    /// Return the inner integer array.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let set = BitSet8::from_iter([1u8, 2, 3]);
+    /// assert_eq!(set.into_inner(), [0b00001110]);
+    /// ```
+    pub fn into_inner(self) -> [T; N] {
+        self.inner
+    }
+
+    /// Returns the capacity of the set, in other words how many bits it can hold.
+    ///
+    /// This function may very well overflow if the size or length is too big, but if you're making
+    /// that big allocations you probably got bigger things to worry about.
+    ///
+    /// # Examples
+    /// ```
+    /// use rbitset::BitSet;
+    ///
+    /// let capacity = BitSet::<u32, 3>::capacity();
+    /// assert_eq!(capacity, 32 * 3);
+    /// ```
+    pub const fn capacity() -> usize {
+        N * Self::item_size()
+    }
+
+    /// Returns the bit size of each item.
+    const fn item_size() -> usize {
+        mem::size_of::<T>() * 8
+    }
+}
+
+impl<T: PrimInt, const N: usize> BitSet<T, N> {
+    /// Transmutes a reference to a borrowed bit array to a borrowed BitSet with the same lifetime.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet;
+    ///
+    /// let mut raw = [0b00001110, 0u8];
+    /// let set = BitSet::from_ref(&mut raw);
+    /// assert!(set.contains(1));
+    /// assert!(set.contains(2));
+    /// assert!(set.contains(3));
+    /// ```
+    pub fn from_ref(inner: &mut [T; N]) -> &mut Self {
+        // This should be completely safe as the memory representation is the same
+        unsafe { mem::transmute(inner) }
+    }
+
+    /// Returns slot index along with the bitmask for the bit index to the slot this item was in.
+    fn location(bit: usize) -> (usize, T) {
+        let index = bit / Self::item_size();
+        let bitmask = T::one() << (bit & (Self::item_size() - 1));
+        (index, bitmask)
+    }
+
+    /// Tries to move all elements from `other` into `self`, leaving `other` empty.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet16;
+    ///
+    /// let mut a = BitSet16::new();
+    /// a.insert(1);
+    /// a.insert(2);
+    /// a.insert(3);
+    ///
+    /// let mut b = BitSet16::new();
+    /// b.insert(3);
+    /// b.insert(4);
+    /// b.insert(5);
+    ///
+    /// a.try_append(&mut b).expect("An error occurred");
+    ///
+    /// assert_eq!(a.len(), 5);
+    /// assert_eq!(b.len(), 0);
+    ///
+    /// assert!(a.contains(1));
+    /// assert!(a.contains(2));
+    /// assert!(a.contains(3));
+    /// assert!(a.contains(4));
+    /// assert!(a.contains(5));
+    /// ```
+    pub fn try_append<U, const M: usize>(
+        &mut self, other: &mut BitSet<U, M>,
+    ) -> Result<(), BitSetError>
+    where U: PrimInt {
+        for item in other.drain() {
+            self.try_insert(item)?;
+        }
+        Ok(())
+    }
+
+    /// Tries to add a value to the set.
+    ///
+    /// If the set did not have this value present, `true` is returned.
+    ///
+    /// If the set did have this value present, `false` is returned.
+    ///
+    /// # Examples
+    /// ```
+    /// use rbitset::{BitSet16, BitSetError};
+    ///
+    /// let mut set = BitSet16::new();
+    ///
+    /// assert_eq!(set.try_insert(2), Ok(true));
+    /// assert_eq!(set.try_insert(2), Ok(false));
+    /// assert_eq!(set.try_insert(16), Err(BitSetError::BiggerThanCapacity));
+    /// ```
+    #[inline]
+    pub fn try_insert(&mut self, bit: usize) -> Result<bool, BitSetError> {
+        if bit >= Self::capacity() {
+            return Err(BitSetError::BiggerThanCapacity);
+        }
+        let (index, bitmask) = Self::location(bit);
+        Ok(match self.inner.get_mut(index) {
+            Some(v) => {
+                let contains = *v & bitmask == bitmask;
+                // Set the value
+                *v = (*v) | bitmask;
+                !contains
+            },
+            None => false,
+        })
+    }
+
+    /// Inserts a value to the set without making any checks.
+    ///
+    /// If the set did not have this value present, `true` is returned.
+    ///
+    /// If the set did have this value present, `false` is returned.
+    ///
+    /// # Safety
+    /// Behavior is undefined if any of the following conditions are violated:
+    ///   - The `bit` value is bigger than the capacity of the bitset
+    pub unsafe fn insert_unchecked(&mut self, bit: usize) -> bool {
+        let (index, bitmask) = Self::location(bit);
+        let v = self.inner.get_unchecked_mut(index);
+        let contains = *v & bitmask == bitmask;
+        *v = (*v) | bitmask;
+        !contains
+    }
+
+    /// Removes a value from the set. Returns whether the value was present in the set.
+    ///
+    /// If the bit is already disabled this is a no-op.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let mut set = BitSet8::new();
+    ///
+    /// set.insert(2);
+    /// assert_eq!(set.remove(2), true);
+    /// assert_eq!(set.remove(2), false);
+    /// ```
+    pub fn try_remove(&mut self, bit: usize) -> Result<bool, BitSetError> {
+        if bit >= Self::capacity() {
+            return Err(BitSetError::BiggerThanCapacity);
+        }
+        let (index, bitmask) = Self::location(bit);
+        Ok(match self.inner.get_mut(index) {
+            Some(v) => {
+                let was_present = *v & bitmask == bitmask;
+                *v = (*v) & !bitmask;
+                was_present
+            },
+            None => false,
+        })
+    }
+
+    /// Removes a value from the set without any checking. Returns whether the value was present in
+    /// the set.
+    ///
+    /// If the bit is already disabled this is a no-op.
+    ///
+    /// # Safety
+    /// Behavior is undefined if any of the following conditions are violated:
+    ///   - The `bit` value is bigger than the capacity of the bitset
+    pub unsafe fn remove_unchecked(&mut self, bit: usize) -> bool {
+        let (index, bitmask) = Self::location(bit);
+        let v = self.inner.get_unchecked_mut(index);
+        let was_present = *v & bitmask == bitmask;
+        *v = (*v) & !bitmask;
+        was_present
+    }
+
+    /// Move all elements from `other` into `self`, leaving `other` empty.
+    ///
+    /// # Panics
+    ///
+    /// This function may panic if `other` contains activated bits bigger than what `self` capacity.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet16;
+    ///
+    /// let mut a = BitSet16::new();
+    /// a.insert(1);
+    /// a.insert(2);
+    /// a.insert(3);
+    ///
+    /// let mut b = BitSet16::new();
+    /// b.insert(3);
+    /// b.insert(4);
+    /// b.insert(5);
+    ///
+    /// a.append(&mut b);
+    ///
+    /// assert_eq!(a.len(), 5);
+    /// assert_eq!(b.len(), 0);
+    ///
+    /// assert!(a.contains(1));
+    /// assert!(a.contains(2));
+    /// assert!(a.contains(3));
+    /// assert!(a.contains(4));
+    /// assert!(a.contains(5));
+    /// ```
+    pub fn append<U, const M: usize>(&mut self, other: &mut BitSet<U, M>)
+    where U: PrimInt {
+        for item in other.drain() {
+            self.insert(item);
+        }
+    }
+
+    /// Adds a value to the set.
+    ///
+    /// If the set did not have this value present, `true` is returned.
+    ///
+    /// If the set did have this value present, `false` is returned.
+    ///
+    /// # Panics
+    /// This function may panic if `bit` value trying to be inserted is bigger than the
+    /// [`capacity`](BitSet::capacity) of the [`BitSet`]. Check [`try_insert`](BitSet::try_insert)
+    /// for a non-panicking version
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet16;
+    ///
+    /// let mut set = BitSet16::new();
+    ///
+    /// assert_eq!(set.insert(2), true);
+    /// assert_eq!(set.insert(2), false);
+    /// assert_eq!(set.len(), 1);
+    /// ```
+    #[inline]
+    pub fn insert(&mut self, bit: usize) -> bool {
+        self.try_insert(bit)
+            .expect("BitSet::insert called on an integer bigger than capacity")
+    }
+
+    /// Removes a value from the set. Returns whether the value was present in the set.
+    ///
+    /// If the bit is already disabled this is a no-op.
+    ///
+    /// # Panics
+    /// This function may panic if `bit` value trying to be removed is bigger than the
+    /// [`capacity`](BitSet::capacity) of the [`BitSet`]. Check [`try_remove`](BitSet::try_remove)
+    /// for a non-panicking version
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let mut set = BitSet8::new();
+    ///
+    /// set.insert(2);
+    /// assert_eq!(set.remove(2), true);
+    /// assert_eq!(set.remove(2), false);
+    /// ```
+    pub fn remove(&mut self, bit: usize) -> bool {
+        self.try_remove(bit)
+            .expect("BitSet::remove called on an integer bigger than capacity")
+    }
+
+    /// Retains only the elements specified by the predicate.
+    ///
+    /// In other words, remove all elements `e` for which `f(&e)` returns `false`.
+    /// The elements are visited in ascending order.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet16;
+    ///
+    /// let mut set = BitSet16::from_iter([1u8, 2, 3, 4, 5, 6]);
+    /// // Keep only the even numbers.
+    /// set.retain(|k| k % 2 == 0);
+    /// let res = BitSet16::from_iter([2u8, 4, 6]);
+    /// assert_eq!(set, res);
+    /// ```
+    pub fn retain<F>(&mut self, mut f: F)
+    where F: FnMut(usize) -> bool {
+        for value in self.clone().iter() {
+            if !f(value) {
+                // Since we are iteration over the values of the self itself, remove should never
+                // panic. Consider to use an unchecked function for removal if the panic code slow
+                // it down too much
+                self.remove(value);
+            }
+        }
+    }
+
+    /// Returns `true` if the specified `bit` is enabled, in other words, if the set contains a
+    /// value.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let set = BitSet8::from_iter([1u8, 2, 3]);
+    /// assert_eq!(set.contains(1), true);
+    /// assert_eq!(set.contains(4), false);
+    /// ```
+    pub fn contains(&self, bit: usize) -> bool {
+        if bit >= Self::capacity() {
+            return false;
+        }
+
+        let (index, bitmask) = Self::location(bit);
+        match self.inner.get(index) {
+            Some(&v) => v & bitmask == bitmask,
+            None => false,
+        }
+    }
+
+    /// Returns `true` if the specified `bit` is enabled, in other words, if the set contains a
+    /// value.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let set = BitSet8::from_iter([1u8, 2, 3]);
+    /// assert_eq!(set.try_contains(1), Ok(true));
+    /// assert_eq!(set.try_contains(4), Ok(false));
+    /// ```
+    pub fn try_contains(&self, bit: usize) -> Result<bool, BitSetError> {
+        if bit >= Self::capacity() {
+            return Err(BitSetError::BiggerThanCapacity);
+        }
+
+        let (index, bitmask) = Self::location(bit);
+
+        match self.inner.get(index) {
+            Some(&v) => Ok(v & bitmask == bitmask),
+            None => Err(BitSetError::BiggerThanCapacity),
+        }
+    }
+
+    /// Returns the number of elements in the set.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet16;
+    ///
+    /// let mut set = BitSet16::new();
+    /// assert_eq!(set.len(), 0);
+    /// set.insert(1);
+    /// assert_eq!(set.len(), 1);
+    /// ```
+    #[inline]
+    pub fn len(&self) -> usize {
+        self.count_ones() as usize
+    }
+
+    /// Returns `true` if the set contains no elements.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet16;
+    ///
+    /// let mut set = BitSet16::new();
+    /// assert!(set.is_empty());
+    /// set.insert(1);
+    /// assert!(!set.is_empty());
+    /// ```
+    pub fn is_empty(&self) -> bool {
+        self.len() == 0
+    }
+
+    /// Returns `true` if `self` has no elements in common with `other`. This is equivalent to
+    /// checking for an empty intersection.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet128;
+    ///
+    /// let a = BitSet128::from_iter([1u8, 2, 3]);
+    /// let mut b = BitSet128::new();
+    ///
+    /// assert!(a.is_disjoint(&b));
+    /// b.insert(4);
+    /// assert!(a.is_disjoint(&b));
+    /// b.insert(1);
+    /// assert!(!a.is_disjoint(&b));
+    /// ```
+    pub fn is_disjoint<U: PrimInt, const M: usize>(&self, other: &BitSet<U, M>) -> bool {
+        if self.len() <= other.len() {
+            self.iter().all(|v| !other.contains(v))
+        } else {
+            other.iter().all(|v| !self.contains(v))
+        }
+    }
+
+    /// Returns `true` if the set is a subset of another, i.e., `other` contains at least all the
+    /// values in `self`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let sup = BitSet8::from_iter([1u8, 2, 3]);
+    /// let mut set = BitSet8::new();
+    ///
+    /// assert!(set.is_subset(&sup));
+    /// set.insert(2);
+    /// assert!(set.is_subset(&sup));
+    /// set.insert(4);
+    /// assert!(!set.is_subset(&sup));
+    /// ```
+    pub fn is_subset<U: PrimInt, const M: usize>(&self, other: &BitSet<U, M>) -> bool {
+        if self.len() <= other.len() {
+            self.iter().all(|v| other.contains(v))
+        } else {
+            false
+        }
+    }
+
+    /// Returns `true` if the set is a superset of another, i.e., `self` contains at least all the
+    /// values in `other`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let sub = BitSet8::from_iter([1u8, 2]);
+    /// let mut set = BitSet8::new();
+    ///
+    /// assert!(!set.is_superset(&sub));
+    ///
+    /// set.insert(0);
+    /// set.insert(1);
+    /// assert!(!set.is_superset(&sub));
+    ///
+    /// set.insert(2);
+    /// assert!(set.is_superset(&sub));
+    /// ```
+    #[inline]
+    pub fn is_superset<U: PrimInt, const M: usize>(&self, other: &BitSet<U, M>) -> bool {
+        other.is_subset(self)
+    }
+
+    /// Returns the total number of enabled bits.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let set = BitSet8::from_iter([1u8, 2, 3]);
+    /// assert_eq!(set.count_ones(), 3);
+    /// ```
+    pub fn count_ones(&self) -> u32 {
+        let mut total = 0;
+        for item in self.inner.iter() {
+            total += item.count_ones();
+        }
+        total
+    }
+
+    /// Returns the total number of disabled bits.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let set = BitSet8::from_iter([1u8, 2, 3]);
+    /// assert_eq!(set.count_zeros(), 5);
+    /// ```
+    pub fn count_zeros(&self) -> u32 {
+        let mut total = 0;
+
+        for item in self.inner.iter() {
+            total += item.count_zeros();
+        }
+
+        total
+    }
+
+    /// Clears the set, returning all elements as an iterator. Keeps the allocated memory for reuse.
+    ///
+    /// If the returned iterator is dropped before being fully consumed, it drops the remaining
+    /// elements. The returned iterator keeps a mutable borrow on the vector to optimize its
+    /// implementation.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let mut set = BitSet8::from_iter([1u8, 2, 3]);
+    /// assert!(!set.is_empty());
+    ///
+    /// for i in set.drain() {
+    ///     println!("{i}");
+    /// }
+    ///
+    /// assert!(set.is_empty());
+    /// ```
+    pub fn drain(&mut self) -> Drain<'_, T, N> {
+        Drain { inner: self }
+    }
+
+    /// Visits the values representing the difference, i.e., the values that are in `self` but not
+    /// in `other`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let a = BitSet8::from_iter([1u8, 2, 3]);
+    /// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+    ///
+    /// // Can be seen as `a - b`.
+    /// for x in a.difference(&b) {
+    ///     println!("{x}"); // Print 1
+    /// }
+    ///
+    /// let diff: BitSet8 = a.difference(&b).collect();
+    /// let res = BitSet8::from_iter([1u8]);
+    /// assert_eq!(diff, res);
+    ///
+    /// // Note that difference is not symmetric,
+    /// // and `b - a` means something else:
+    /// let diff: BitSet8 = b.difference(&a).collect();
+    /// let res = BitSet8::from_iter([4u8]);
+    /// assert_eq!(diff, res);
+    /// ```
+    pub fn difference<'a, U: PrimInt, const M: usize>(
+        &'a self, other: &'a BitSet<U, M>,
+    ) -> Difference<'a, T, U, N, M> {
+        Difference {
+            iter: self.iter(),
+            other,
+        }
+    }
+
+    /// Visits the values representing the intersection, i.e., the values that are both in `self`
+    /// and `other`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let a = BitSet8::from_iter([1u8, 2, 3]);
+    /// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+    ///
+    /// for x in a.intersection(&b) {
+    ///     println!("{x}");
+    /// }
+    ///
+    /// let intersection: BitSet8 = a.intersection(&b).collect();
+    /// let test = BitSet8::from_iter([2u8, 3]);
+    /// assert_eq!(intersection, test);
+    /// ```
+    pub fn intersection<'a, U: PrimInt, const M: usize>(
+        &'a self, other: &'a BitSet<U, M>,
+    ) -> Intersection<'a, T, U, N, M> {
+        Intersection {
+            iter: self.iter(),
+            other,
+        }
+    }
+
+    /// Visits the values representing the symmetric difference, i.e., the values that are in `self`
+    /// or in `other` but not in both.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let a = BitSet8::from_iter([1u8, 2, 3]);
+    /// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+    ///
+    /// for x in a.symmetric_difference(&b) {
+    ///     println!("{x}");
+    /// }
+    ///
+    /// let diff1: BitSet8 = a.symmetric_difference(&b).collect();
+    /// let diff2: BitSet8 = b.symmetric_difference(&a).collect();
+    ///
+    /// assert_eq!(diff1, diff2);
+    /// let res = BitSet8::from_iter([1u8, 4]);
+    /// assert_eq!(diff1, res);
+    /// ```
+    pub fn symmetric_difference<'a, U: PrimInt, const M: usize>(
+        &'a self, other: &'a BitSet<U, M>,
+    ) -> SymmetricDifference<'a, T, U, N, M> {
+        SymmetricDifference {
+            iter: self.difference(other).chain(other.difference(self)),
+        }
+    }
+
+    /// Visits the values representing the union, i.e., all the values in `self` or `other`, without
+    /// duplicates.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let a = BitSet8::from_iter([1u8, 2, 3]);
+    /// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+    ///
+    /// for x in a.union(&b) {
+    ///     println!("{x}");
+    /// }
+    ///
+    /// let union: BitSet8 = a.union(&b).collect();
+    /// let res = BitSet8::from_iter([1u8, 2, 3, 4]);
+    /// assert_eq!(union, res);
+    /// ```
+    pub fn union<'a, U: PrimInt, const M: usize>(
+        &'a self, other: &'a BitSet<U, M>,
+    ) -> Union<'a, T, U, N, M> {
+        if self.len() >= other.len() {
+            Union {
+                iter: UnionChoose::SelfBiggerThanOther(self.iter().chain(other.difference(self))),
+            }
+        } else {
+            Union {
+                iter: UnionChoose::SelfSmallerThanOther(other.iter().chain(self.difference(other))),
+            }
+        }
+    }
+
+    /// An iterator visiting all elements in the set.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// use rbitset::BitSet8;
+    ///
+    /// let mut set = BitSet8::new();
+    /// set.insert(1);
+    /// set.insert(2);
+    ///
+    /// for x in set.iter() {
+    ///     println!("{x}");
+    /// }
+    /// ```
+    pub fn iter(&self) -> Iter<'_, T, N> {
+        Iter::new(self)
+    }
+}
+
+impl<T: Default + PrimInt, const N: usize> BitSet<T, N> {
+    /// Set all bits in a range. `fill(.., false)` is effectively the same as `clear()`.
+    ///
+    /// # Panics
+    /// Panics if the start or end bounds are more than the capacity.
+    pub fn fill<R: RangeBounds<usize>>(&mut self, range: R, on: bool) {
+        let mut start = match range.start_bound() {
+            Bound::Unbounded => 0,
+            Bound::Included(&i) => {
+                assert!(i <= Self::capacity(), "start bound is too big for capacity");
+                i
+            },
+            Bound::Excluded(&i) => {
+                assert!(i < Self::capacity(), "start bound is too big for capacity");
+                i + 1
+            },
+        };
+        let end = match range.end_bound() {
+            Bound::Unbounded => Self::capacity(),
+            Bound::Included(0) => return,
+            Bound::Included(&i) => {
+                assert!(
+                    i - 1 <= Self::capacity(),
+                    "end bound is too big for capacity"
+                );
+                i - 1
+            },
+            Bound::Excluded(&i) => {
+                assert!(i <= Self::capacity(), "end bound is too big for capacity");
+                i
+            },
+        };
+
+        if start >= end {
+            return;
+        }
+
+        let end_first = start - (start % Self::item_size()) + Self::item_size();
+        if start % Self::item_size() != 0 || end < end_first {
+            // Unaligned write to either the end or the start of next integer
+            let end_first = end_first.min(end);
+            // println!("Doing initial unaligned from {} to {}", start, end_first);
+            for bit in start..end_first {
+                if on {
+                    self.insert(bit);
+                } else {
+                    self.remove(bit);
+                }
+            }
+
+            if end == end_first {
+                return;
+            }
+
+            start = end_first + 1;
+        }
+
+        // Fast way to fill all bits in all integers: Just set them to the min/max value.
+        let start_last = end - (end % Self::item_size());
+        // println!("Doing aligned from {} to {}", start, start_last);
+        for i in start / Self::item_size()..start_last / Self::item_size() {
+            self.inner[i] = if on {
+                Bounded::max_value()
+            } else {
+                Default::default()
+            };
+        }
+
+        // Unaligned write to the end
+        // println!("Doing unaligned from {} to {}", start_last, end);
+        for bit in start_last..end {
+            if on {
+                self.insert(bit);
+            } else {
+                self.remove(bit);
+            }
+        }
+    }
+}
+
+impl<T: PrimInt + Default, U: Into<usize>, const N: usize> FromIterator<U> for BitSet<T, N> {
+    fn from_iter<I>(iter: I) -> Self
+    where I: IntoIterator<Item = U> {
+        let mut set = BitSet::with_default();
+        for bit in iter.into_iter() {
+            set.insert(bit.into());
+        }
+        set
+    }
+}
+
+impl<T: PrimInt, U: Into<usize>, const N: usize> Extend<U> for BitSet<T, N> {
+    fn extend<I: IntoIterator<Item = U>>(&mut self, iter: I) {
+        for bit in iter.into_iter() {
+            self.insert(bit.into());
+        }
+    }
+}
+
+impl<T: PrimInt, const N: usize> IntoIterator for BitSet<T, N> {
+    type IntoIter = IntoIter<T, N>;
+    type Item = usize;
+
+    fn into_iter(self) -> Self::IntoIter {
+        IntoIter(self)
+    }
+}
+
+impl<'a, T: PrimInt, const N: usize> IntoIterator for &'a BitSet<T, N> {
+    type IntoIter = Iter<'a, T, N>;
+    type Item = usize;
+
+    fn into_iter(self) -> Self::IntoIter {
+        Iter::new(self)
+    }
+}
+
+impl<T: PrimInt, const N: usize> Not for BitSet<T, N> {
+    type Output = Self;
+
+    fn not(mut self) -> Self::Output {
+        for item in self.inner.iter_mut() {
+            *item = !(*item);
+        }
+
+        self
+    }
+}
+
+#[cfg(feature = "serde")]
+#[cfg_attr(_doc, doc(cfg(feature = "serde")))]
+impl<T: PrimInt, const N: usize> Serialize for BitSet<T, N> {
+    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+    where S: serde::Serializer {
+        let mut seq = serializer.serialize_seq(Some(self.len()))?;
+        for ref e in self {
+            seq.serialize_element(e)?;
+        }
+        seq.end()
+    }
+}
+
+#[cfg(feature = "serde")]
+#[cfg_attr(_doc, doc(cfg(feature = "serde")))]
+impl<'de, T: PrimInt + Default, const N: usize> Deserialize<'de> for BitSet<T, N> {
+    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+    where D: serde::Deserializer<'de> {
+        use core::marker::PhantomData;
+
+        struct BitSetVisitor<T: PrimInt, const N: usize>(PhantomData<BitSet<T, N>>);
+
+        impl<'de, T: PrimInt + Default, const N: usize> Visitor<'de> for BitSetVisitor<T, N> {
+            type Value = BitSet<T, N>;
+
+            fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result {
+                f.write_str("a sequence")
+            }
+
+            fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>
+            where A: serde::de::SeqAccess<'de> {
+                let mut set = BitSet::with_default();
+
+                // While there are entries remaining in the input, add them into our set.
+                while let Some(value) = seq.next_element()? {
+                    set.insert(value);
+                }
+
+                Ok(set)
+            }
+        }
+
+        let visitor = BitSetVisitor(PhantomData);
+        deserializer.deserialize_seq(visitor)
+    }
+}
+
+/// Possible errors on the [`BitSet`] operations.
+#[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Hash)]
+#[non_exhaustive]
+pub enum BitSetError {
+    /// Happens when trying to insert or remove a value bigger than the capacity of the bitset.
+    BiggerThanCapacity,
+}
+
+impl fmt::Display for BitSetError {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        match self {
+            Self::BiggerThanCapacity => f.pad("tried to insert value bigger than capacity"),
+        }
+    }
+}
+
+/// A draining iterator over the items of a `BitSet`.
+///
+/// This `struct` is created by the [`drain`] method on [`BitSet`]. See its documentation for more.
+///
+/// [`drain`]: BitSet::drain
+///
+/// # Examples
+///
+/// ```
+/// use rbitset::BitSet8;
+///
+/// let mut a = BitSet8::from_iter([1u8, 2, 3]);
+///
+/// let mut drain = a.drain();
+/// ```
+pub struct Drain<'a, T: PrimInt + 'a, const N: usize> {
+    inner: &'a mut BitSet<T, N>,
+}
+
+impl<T: PrimInt, const N: usize> fmt::Debug for Drain<'_, T, N> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        fmt::Debug::fmt(&self.inner, f)
+    }
+}
+
+impl<T: PrimInt, const N: usize> Iterator for Drain<'_, T, N> {
+    type Item = usize;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        for (index, item) in self.inner.inner.iter_mut().enumerate() {
+            if !item.is_zero() {
+                let bitindex = item.trailing_zeros() as usize;
+
+                // E.g. 1010 & 1001 = 1000
+                *item = *item & (*item - T::one());
+
+                // Safe from overflows because one couldn't possibly add an item with this index if
+                // it did overflow
+                return Some(index * BitSet::<T, N>::item_size() + bitindex);
+            }
+        }
+
+        None
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        let len = self.inner.count_ones() as usize;
+        (len, Some(len))
+    }
+}
+
+impl<T: PrimInt, const N: usize> ExactSizeIterator for Drain<'_, T, N> {
+    #[inline]
+    fn len(&self) -> usize {
+        self.inner.len()
+    }
+}
+
+impl<T: PrimInt, const N: usize> FusedIterator for Drain<'_, T, N> {}
+
+/// An owning iterator over the items of a `BitSet`.
+///
+/// This `struct` is created by the [`into_iter`] method on [`BitSet`] (provided by the
+/// [`IntoIterator`] trait). See its documentation for more.
+///
+/// [`into_iter`]: IntoIterator::into_iter
+/// [`IntoIterator`]: IntoIterator
+///
+/// # Examples
+///
+/// ```
+/// use rbitset::BitSet16;
+///
+/// let a = BitSet16::from_iter([1u8, 2, 3]);
+///
+/// let mut iter = a.into_iter();
+/// ```
+#[derive(Clone)]
+#[repr(transparent)]
+pub struct IntoIter<T, const N: usize>(BitSet<T, N>);
+
+impl<T: PrimInt, const N: usize> fmt::Debug for IntoIter<T, N> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_set().entries(self.clone()).finish()
+    }
+}
+
+impl<T: PrimInt, const N: usize> Iterator for IntoIter<T, N> {
+    type Item = usize;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        for (index, item) in self.0.inner.iter_mut().enumerate() {
+            if !item.is_zero() {
+                let bitindex = item.trailing_zeros() as usize;
+
+                // E.g. 1010 & 1001 = 1000
+                *item = *item & (*item - T::one());
+
+                // Safe from overflows because one couldn't possibly add an item with this index if
+                // it did overflow
+                return Some(index * BitSet::<T, N>::item_size() + bitindex);
+            }
+        }
+
+        None
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        let len = self.0.count_ones() as usize;
+        (len, Some(len))
+    }
+}
+
+impl<T: PrimInt, const N: usize> DoubleEndedIterator for IntoIter<T, N> {
+    fn next_back(&mut self) -> Option<Self::Item> {
+        for (index, item) in self.0.inner.iter_mut().enumerate().rev() {
+            if !item.is_zero() {
+                let bitindex = BitSet::<T, N>::item_size() - 1 - item.leading_zeros() as usize;
+
+                // E.g. 00101 & 11011 = 00001, same as remove procedure but using relative index
+                *item = *item & !(T::one() << bitindex);
+
+                // Safe from overflows because one couldn't possibly add an item with this index if
+                // it did overflow
+                return Some(index * BitSet::<T, N>::item_size() + bitindex);
+            }
+        }
+        None
+    }
+}
+
+impl<T: PrimInt, const N: usize> FusedIterator for IntoIter<T, N> {}
+impl<T: PrimInt, const N: usize> ExactSizeIterator for IntoIter<T, N> {}
+
+/// An iterator over the items of a `BitSet`.
+///
+/// This `struct` is created by the [`iter`] method on [`BitSet`]. See its documentation for more.
+///
+/// [`iter`]: BitSet::iter
+///
+/// # Examples
+///
+/// ```
+/// use rbitset::BitSet8;
+///
+/// let a = BitSet8::from_iter([1u8, 2, 3]);
+///
+/// let mut iter = a.iter();
+/// ```
+#[derive(Clone)]
+pub struct Iter<'a, T, const N: usize> {
+    borrow: &'a BitSet<T, N>,
+    bit: usize,
+    passed_count: usize,
+}
+
+impl<'a, T: PrimInt, const N: usize> Iter<'a, T, N> {
+    fn new(bitset: &'a BitSet<T, N>) -> Self {
+        Self {
+            borrow: bitset,
+            bit: 0,
+            passed_count: 0,
+        }
+    }
+}
+
+impl<T: PrimInt, const N: usize> fmt::Debug for Iter<'_, T, N> {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_set().entries(self.clone()).finish()
+    }
+}
+
+impl<T: PrimInt, const N: usize> Iterator for Iter<'_, T, N> {
+    type Item = usize;
+
+    /// Iterator implementation for BitSet, guaranteed to remove and
+    /// return the items in ascending order
+    fn next(&mut self) -> Option<Self::Item> {
+        while !self.borrow.try_contains(self.bit).ok()? {
+            self.bit = self.bit.saturating_add(1);
+        }
+
+        let res = self.bit;
+
+        self.bit = self.bit.saturating_add(1);
+        self.passed_count = self.passed_count.saturating_add(1);
+
+        Some(res)
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        let len = self.borrow.len() - self.passed_count;
+        (len, Some(len))
+    }
+}
+
+impl<T: PrimInt, const N: usize> DoubleEndedIterator for Iter<'_, T, N> {
+    fn next_back(&mut self) -> Option<Self::Item> {
+        self.bit = self.bit.saturating_sub(2);
+        while !self.borrow.try_contains(self.bit).ok()? {
+            self.bit = self.bit.saturating_sub(1);
+        }
+
+        let res = self.bit;
+
+        self.bit = self.bit.saturating_sub(1);
+        self.passed_count = self.passed_count.saturating_sub(1);
+
+        Some(res)
+    }
+}
+
+impl<T: PrimInt, const N: usize> FusedIterator for Iter<'_, T, N> {}
+impl<T: PrimInt, const N: usize> ExactSizeIterator for Iter<'_, T, N> {}
+
+/// A lazy iterator producing elements in the difference of `BitSet`s.
+///
+/// This `struct` is created by the [`difference`] method on [`BitSet`]. See its documentation for
+/// more.
+///
+/// [`difference`]: BitSet::difference
+///
+/// # Examples
+///
+/// ```
+/// use rbitset::BitSet8;
+///
+/// let a = BitSet8::from_iter([1u8, 2, 3]);
+/// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+///
+/// let mut difference = a.difference(&b);
+/// ```
+#[must_use = "this returns the difference as an iterator, without modifying either input set"]
+#[derive(Clone)]
+pub struct Difference<'a, T: PrimInt + 'a, U: PrimInt + 'a, const N: usize, const M: usize> {
+    // iterator of the first set
+    iter:  Iter<'a, T, N>,
+    // the second set
+    other: &'a BitSet<U, M>,
+}
+
+impl<T, U, const N: usize, const M: usize> fmt::Debug for Difference<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_set().entries(self.clone()).finish()
+    }
+}
+
+impl<'a, T, U, const N: usize, const M: usize> Iterator for Difference<'a, T, U, N, M>
+where
+    T: PrimInt + 'a,
+    U: PrimInt + 'a,
+{
+    type Item = usize;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        loop {
+            let elt = self.iter.next()?;
+            if !self.other.contains(elt) {
+                return Some(elt);
+            }
+        }
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        let (_, upper) = self.iter.size_hint();
+        (0, upper)
+    }
+}
+
+impl<T, U, const N: usize, const M: usize> FusedIterator for Difference<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+}
+
+/// A lazy iterator producing elements in the intersection of `BitSet`s.
+///
+/// This `struct` is created by the [`intersection`] method on [`BitSet`]. See its documentation for
+/// more.
+///
+/// [`intersection`]: BitSet::intersection
+///
+/// # Examples
+///
+/// ```
+/// use rbitset::BitSet8;
+///
+/// let a = BitSet8::from_iter([1u8, 2, 3]);
+/// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+///
+/// let mut intersection = a.intersection(&b);
+/// ```
+#[must_use = "this returns the intersection as an iterator, without modifying either input set"]
+#[derive(Clone)]
+pub struct Intersection<'a, T, U, const N: usize, const M: usize>
+where
+    T: PrimInt + 'a,
+    U: PrimInt + 'a,
+{
+    // iterator of the first set
+    iter:  Iter<'a, T, N>,
+    // the second set
+    other: &'a BitSet<U, M>,
+}
+
+impl<T, U, const N: usize, const M: usize> fmt::Debug for Intersection<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_set().entries(self.clone()).finish()
+    }
+}
+
+impl<'a, T, U, const N: usize, const M: usize> Iterator for Intersection<'a, T, U, N, M>
+where
+    T: PrimInt + 'a,
+    U: PrimInt + 'a,
+{
+    type Item = usize;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        loop {
+            let elt = self.iter.next()?;
+            if self.other.contains(elt) {
+                return Some(elt);
+            }
+        }
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        let (_, upper) = self.iter.size_hint();
+        (0, upper)
+    }
+}
+
+impl<T, U, const N: usize, const M: usize> FusedIterator for Intersection<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+}
+
+/// A lazy iterator producing elements in the union of `BitSet`s.
+///
+/// This `struct` is created by the [`union`] method on [`BitSet`]. See its documentation for more.
+///
+/// [`union`]: BitSet::union
+///
+/// # Examples
+///
+/// ```
+/// use rbitset::BitSet8;
+///
+/// let a = BitSet8::from_iter([1u8, 2, 3]);
+/// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+///
+/// let mut union_iter = a.union(&b);
+/// ```
+#[must_use = "this returns the union as an iterator, without modifying either input set"]
+#[derive(Clone)]
+pub struct Union<'a, T: PrimInt + 'a, U: PrimInt + 'a, const N: usize, const M: usize> {
+    iter: UnionChoose<'a, T, U, N, M>,
+}
+
+impl<T, U, const N: usize, const M: usize> fmt::Debug for Union<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_set().entries(self.clone()).finish()
+    }
+}
+
+impl<'a, T, U, const N: usize, const M: usize> Iterator for Union<'a, T, U, N, M>
+where
+    T: PrimInt + 'a,
+    U: PrimInt + 'a,
+{
+    type Item = usize;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        self.iter.next()
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        self.iter.size_hint()
+    }
+}
+
+impl<T, U, const N: usize, const M: usize> FusedIterator for Union<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+}
+
+/// Helper enum to create a [`Union`] for [`BitSet`]
+#[derive(Clone)]
+enum UnionChoose<'a, T: PrimInt, U: PrimInt, const N: usize, const M: usize> {
+    SelfBiggerThanOther(Chain<Iter<'a, T, N>, Difference<'a, U, T, M, N>>),
+    SelfSmallerThanOther(Chain<Iter<'a, U, M>, Difference<'a, T, U, N, M>>),
+}
+
+impl<'a, T, U, const N: usize, const M: usize> Iterator for UnionChoose<'a, T, U, N, M>
+where
+    T: PrimInt + 'a,
+    U: PrimInt + 'a,
+{
+    type Item = usize;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        match self {
+            Self::SelfBiggerThanOther(iter) => iter.next(),
+            Self::SelfSmallerThanOther(iter) => iter.next(),
+        }
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        match self {
+            Self::SelfBiggerThanOther(iter) => iter.size_hint(),
+            Self::SelfSmallerThanOther(iter) => iter.size_hint(),
+        }
+    }
+}
+
+impl<T, U, const N: usize, const M: usize> FusedIterator for UnionChoose<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+}
+
+/// A lazy iterator producing elements in the symmetric difference of `BitSet`s.
+///
+/// This `struct` is created by the [`symmetric_difference`] method on [`BitSet`]. See its
+/// documentation for more.
+///
+/// [`symmetric_difference`]: BitSet::symmetric_difference
+///
+/// # Examples
+///
+/// ```
+/// use rbitset::BitSet8;
+///
+/// let a = BitSet8::from_iter([1u8, 2, 3]);
+/// let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+///
+/// let mut intersection = a.symmetric_difference(&b);
+/// ```
+#[must_use = "this returns the difference as an iterator, without modifying either input set"]
+#[derive(Clone)]
+pub struct SymmetricDifference<'a, T, U, const N: usize, const M: usize>
+where
+    T: PrimInt + 'a,
+    U: PrimInt + 'a,
+{
+    iter: Chain<Difference<'a, T, U, N, M>, Difference<'a, U, T, M, N>>,
+}
+
+impl<T, U, const N: usize, const M: usize> fmt::Debug for SymmetricDifference<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        f.debug_set().entries(self.clone()).finish()
+    }
+}
+
+impl<'a, T, U, const N: usize, const M: usize> Iterator for SymmetricDifference<'a, T, U, N, M>
+where
+    T: PrimInt + 'a,
+    U: PrimInt + 'a,
+{
+    type Item = usize;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        self.iter.next()
+    }
+
+    fn size_hint(&self) -> (usize, Option<usize>) {
+        self.iter.size_hint()
+    }
+}
+
+impl<T, U, const N: usize, const M: usize> FusedIterator for SymmetricDifference<'_, T, U, N, M>
+where
+    T: PrimInt,
+    U: PrimInt,
+{
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    extern crate alloc;
+
+    #[test]
+    fn repr() {
+        assert_eq!(mem::size_of::<BitSet8>(), 1);
+        assert_eq!(mem::size_of::<BitSet16>(), 2);
+        assert_eq!(mem::size_of::<BitSet32>(), 4);
+        assert_eq!(mem::size_of::<BitSet64>(), 8);
+        assert_eq!(mem::size_of::<BitSet128>(), 16);
+        assert_eq!(mem::size_of::<BitSet256>(), 32);
+        assert_eq!(mem::size_of::<BitSet512>(), 64);
+    }
+
+    #[test]
+    fn capacity() {
+        assert_eq!(BitSet8::capacity(), 8);
+        assert_eq!(BitSet16::capacity(), 16);
+        assert_eq!(BitSet32::capacity(), 32);
+        assert_eq!(BitSet64::capacity(), 64);
+        assert_eq!(BitSet128::capacity(), 128);
+        assert_eq!(BitSet256::capacity(), 256);
+        assert_eq!(BitSet512::capacity(), 512);
+    }
+
+    #[test]
+    fn contains() {
+        let mut b = BitSet8::new();
+        b.insert(0);
+        b.insert(1);
+        b.insert(2);
+        b.insert(3);
+        b.insert(4);
+        b.insert(5);
+        b.insert(6);
+        b.insert(7);
+        assert!(b.contains(0));
+        assert!(b.contains(1));
+        assert!(b.contains(2));
+        assert!(b.contains(3));
+        assert!(b.contains(4));
+        assert!(b.contains(5));
+        assert!(b.contains(6));
+        assert!(b.contains(7));
+        assert!(!b.contains(8));
+        assert!(!b.contains(9));
+        assert!(!b.contains(10));
+        assert!(!b.contains(11));
+        assert!(!b.contains(12));
+        assert!(!b.contains(13));
+        assert!(!b.contains(14));
+        assert!(!b.contains(15));
+    }
+
+    #[test]
+    fn try_too_big() {
+        let mut set = BitSet8::new();
+        assert_eq!(set.try_insert(8), Err(BitSetError::BiggerThanCapacity));
+    }
+
+    #[test]
+    #[should_panic]
+    fn panic_too_big() {
+        let mut set = BitSet128::new();
+        set.insert(128);
+    }
+
+    #[test]
+    fn insert() {
+        let mut set = BitSet128::new();
+        set.insert(0);
+        set.insert(12);
+        set.insert(67);
+        set.insert(82);
+        assert!(set.insert(127));
+        assert!(!set.insert(127));
+
+        assert!(set.contains(0));
+        assert!(set.contains(12));
+        assert!(!set.contains(51));
+        assert!(!set.contains(63));
+        assert!(set.contains(67));
+        assert!(!set.contains(73));
+        assert!(set.contains(82));
+        assert!(set.contains(127));
+    }
+
+    #[test]
+    fn insert_unchecked() {
+        let mut set = BitSet128::new();
+        unsafe {
+            set.insert_unchecked(0);
+            set.insert_unchecked(12);
+            set.insert_unchecked(67);
+            set.insert_unchecked(82);
+            assert!(set.insert_unchecked(127));
+            assert!(!set.insert_unchecked(127));
+        }
+
+        assert!(set.contains(0));
+        assert!(set.contains(12));
+        assert!(!set.contains(51));
+        assert!(!set.contains(63));
+        assert!(set.contains(67));
+        assert!(!set.contains(73));
+        assert!(set.contains(82));
+        assert!(set.contains(127));
+    }
+
+    #[test]
+    fn remove() {
+        let mut set = BitSet32::new();
+        set.insert(12);
+        set.insert(17);
+        assert!(set.contains(12));
+        assert!(set.contains(17));
+        set.remove(17);
+        assert!(set.contains(12));
+        assert!(!set.contains(17));
+    }
+
+    #[test]
+    fn remove_unchecked() {
+        let mut set = BitSet32::new();
+        set.insert(12);
+        set.insert(17);
+        assert!(set.contains(12));
+        assert!(set.contains(17));
+        unsafe { set.remove_unchecked(17) };
+        assert!(set.contains(12));
+        assert!(!set.contains(17));
+    }
+
+    #[test]
+    fn clear() {
+        let mut set = BitSet64::new();
+        set.insert(35);
+        set.insert(42);
+        assert!(set.contains(35));
+        assert!(set.contains(42));
+        set.clear();
+        assert!(!set.contains(35));
+        assert!(!set.contains(42));
+    }
+
+    #[test]
+    fn count_ones_and_zeros() {
+        let mut set = BitSet8::new();
+        set.insert(5);
+        set.insert(7);
+        assert_eq!(set.count_ones(), 2);
+        assert_eq!(set.count_zeros(), 8 - 2);
+    }
+
+    #[test]
+    fn retain() {
+        let mut set = BitSet16::from_iter([1u8, 2, 3, 4, 5, 6]);
+        // Keep only the even numbers.
+        set.retain(|k| k % 2 == 0);
+        let res = BitSet16::from_iter([2u8, 4, 6]);
+        assert_eq!(set, res);
+    }
+
+    #[test]
+    fn append() {
+        let mut a = BitSet16::new();
+        a.insert(1);
+        a.insert(2);
+        a.insert(3);
+
+        let mut b = BitSet16::new();
+        b.insert(3);
+        b.insert(4);
+        b.insert(5);
+
+        a.append(&mut b);
+
+        assert_eq!(a.len(), 5);
+        assert_eq!(b.len(), 0);
+
+        assert!(a.contains(1));
+        assert!(a.contains(2));
+        assert!(a.contains(3));
+        assert!(a.contains(4));
+        assert!(a.contains(5));
+    }
+
+    #[test]
+    fn disjoint() {
+        let a = BitSet128::from_iter([1u8, 2, 3]);
+        let mut b = BitSet128::new();
+
+        assert!(a.is_disjoint(&b));
+        assert!(b.is_disjoint(&a));
+        b.insert(4);
+        assert!(a.is_disjoint(&b));
+        assert!(b.is_disjoint(&a));
+        b.insert(1);
+        assert!(!a.is_disjoint(&b));
+        assert!(!b.is_disjoint(&a));
+    }
+
+    #[test]
+    fn subset_superset() {
+        let sup = BitSet8::from_iter([1u8, 2, 3]);
+        let mut set = BitSet8::new();
+
+        // A superset is never a subset of it's subsets and vice versa
+        assert!(!sup.is_subset(&set));
+        assert!(!set.is_superset(&sup));
+        assert!(set.is_subset(&sup));
+        assert!(sup.is_superset(&set));
+        set.insert(2);
+        // A superset is never a subset of it's subsets
+        assert!(!sup.is_subset(&set));
+        assert!(!set.is_superset(&sup));
+        assert!(set.is_subset(&sup));
+        assert!(sup.is_superset(&set));
+        set.insert(4);
+        assert!(!set.is_subset(&sup));
+        assert!(!sup.is_superset(&set));
+    }
+
+    #[test]
+    fn fill() {
+        // Care must be taken when changing the `range` function, as this test
+        // won't detect if it actually does as many aligned writes as it can.
+
+        let mut set = BitSet::<u8, 2>::new();
+
+        // Aligned
+        set.fill(.., true);
+        for i in 0..16 {
+            assert!(set.contains(i));
+        }
+
+        // println!("---");
+
+        // Within the same int
+        set.clear();
+        set.fill(1..3, true);
+        assert!(!set.contains(0));
+        assert!(set.contains(1));
+        assert!(set.contains(2));
+        assert!(!set.contains(3));
+
+        // println!("---");
+
+        // Unaligned end
+        set.clear();
+        set.fill(8..10, true);
+        assert!(!set.contains(7));
+        assert!(set.contains(8));
+        assert!(set.contains(9));
+        assert!(!set.contains(10));
+
+        // println!("---");
+
+        // Unaligned start
+        set.clear();
+        set.fill(3..16, true);
+        assert!(!set.contains(2));
+        for i in 3..16 {
+            assert!(set.contains(i));
+        }
+    }
+
+    #[test]
+    fn drain() {
+        let mut set = BitSet8::from_iter([1u8, 2, 3]);
+        assert!(!set.is_empty());
+
+        for _ in set.drain() {}
+
+        assert!(set.is_empty());
+    }
+
+    #[test]
+    fn iter() {
+        let set: BitSet<u8, 4> = [30u8, 0, 4, 2, 12, 22, 23, 29].iter().copied().collect();
+
+        // Back and forth
+        let mut iter = set.iter();
+        assert_eq!(iter.len(), 8);
+        assert_eq!(iter.next(), Some(0));
+        assert_eq!(iter.len(), 7);
+        assert_eq!(iter.next(), Some(2));
+        assert_eq!(iter.len(), 6);
+        assert_eq!(iter.next_back(), Some(0));
+        assert_eq!(iter.len(), 7);
+
+        // One way
+        let mut iter = set.iter();
+        assert_eq!(iter.len(), 8);
+        assert_eq!(iter.next(), Some(0));
+        assert_eq!(iter.len(), 7);
+        assert_eq!(iter.next(), Some(2));
+        assert_eq!(iter.len(), 6);
+        assert_eq!(iter.next(), Some(4));
+        assert_eq!(iter.len(), 5);
+        assert_eq!(iter.next(), Some(12));
+        assert_eq!(iter.len(), 4);
+        assert_eq!(iter.next(), Some(22));
+        assert_eq!(iter.len(), 3);
+        assert_eq!(iter.next(), Some(23));
+        assert_eq!(iter.len(), 2);
+        assert_eq!(iter.next(), Some(29));
+        assert_eq!(iter.len(), 1);
+        assert_eq!(iter.next(), Some(30));
+        assert_eq!(iter.len(), 0);
+        assert_eq!(iter.next(), None);
+        assert_eq!(iter.len(), 0);
+        assert_eq!(iter.next(), None);
+    }
+
+    #[test]
+    fn into_iter() {
+        let set: BitSet<u8, 4> = [30u8, 0, 4, 2, 12, 22, 23, 29].iter().copied().collect();
+        let mut iter = set.into_iter();
+        assert_eq!(iter.len(), 8);
+        assert_eq!(iter.next(), Some(0));
+        assert_eq!(iter.len(), 7);
+        assert_eq!(iter.next_back(), Some(30));
+        assert_eq!(iter.len(), 6);
+        assert_eq!(iter.next(), Some(2));
+        assert_eq!(iter.len(), 5);
+        assert_eq!(iter.next_back(), Some(29));
+        assert_eq!(iter.len(), 4);
+        assert_eq!(iter.next(), Some(4));
+        assert_eq!(iter.len(), 3);
+        assert_eq!(iter.next_back(), Some(23));
+        assert_eq!(iter.len(), 2);
+        assert_eq!(iter.next(), Some(12));
+        assert_eq!(iter.len(), 1);
+        assert_eq!(iter.next_back(), Some(22));
+        assert_eq!(iter.len(), 0);
+        assert_eq!(iter.next_back(), None);
+        assert_eq!(iter.len(), 0);
+        assert_eq!(iter.next(), None);
+    }
+
+    #[test]
+    fn difference() {
+        let a = BitSet8::from_iter([1u8, 2, 3]);
+        let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+        let diff: BitSet8 = a.difference(&b).collect();
+        let res = BitSet8::from_iter([1u8]);
+        assert_eq!(diff, res);
+
+        // Note that difference is not symmetric,
+        // and `b - a` means something else:
+        let diff: BitSet8 = b.difference(&a).collect();
+        let res = BitSet8::from_iter([4u8]);
+        assert_eq!(diff, res);
+    }
+
+    #[test]
+    fn intersect() {
+        let a = BitSet8::from_iter([1u8, 2, 3]);
+        let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+        let intersection: BitSet8 = a.intersection(&b).collect();
+        let test = BitSet8::from_iter([2u8, 3]);
+        assert_eq!(intersection, test);
+    }
+
+    #[test]
+    fn union() {
+        let a = BitSet8::from_iter([1u8, 2, 3]);
+        let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+        let union: BitSet8 = a.union(&b).collect();
+        let res = BitSet8::from_iter([1u8, 2, 3, 4]);
+        assert_eq!(union, res);
+
+        let a = BitSet8::from_iter([1u8, 2, 3]);
+        let b = BitSet8::from_iter([4u8, 2, 3, 4, 5]);
+        let union: BitSet8 = a.union(&b).collect();
+        let res = BitSet8::from_iter([1u8, 2, 3, 4, 5]);
+        assert_eq!(union, res);
+    }
+
+    #[test]
+    fn symmetric_difference() {
+        let a = BitSet8::from_iter([1u8, 2, 3]);
+        let b = BitSet8::from_iter([4u8, 2, 3, 4]);
+
+        let diff1: BitSet8 = a.symmetric_difference(&b).collect();
+        let diff2: BitSet8 = b.symmetric_difference(&a).collect();
+
+        assert_eq!(diff1, diff2);
+        let res = BitSet8::from_iter([1u8, 4]);
+        assert_eq!(diff1, res);
+    }
+
+    #[test]
+    fn debug() {
+        use self::alloc::format;
+        assert_eq!(
+            format!("{:?}", (0u16..10).collect::<BitSet16>()),
+            "{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}"
+        );
+        assert_eq!(
+            format!("{:#?}", (0u16..10).collect::<BitSet16>()),
+            "{\n    0,\n    1,\n    2,\n    3,\n    4,\n    5,\n    6,\n    7,\n    8,\n    9,\n}"
+        );
+    }
+
+    #[test]
+    fn binary() {
+        use self::alloc::format;
+        assert_eq!(
+            format!("{:b}", (0u16..10).collect::<BitSet16>()),
+            "BitSet [0b0000001111111111]"
+        );
+        assert_eq!(
+            format!("{:#b}", (0u16..10).collect::<BitSet16>()),
+            "BitSet [\n    0b0000001111111111,\n]"
+        );
+    }
+
+    #[test]
+    fn not() {
+        assert_eq!(
+            (0u16..10).collect::<BitSet16>(),
+            !(10u16..16).collect::<BitSet16>()
+        );
+        assert_eq!(
+            (10u16..16).collect::<BitSet16>(),
+            !(0u16..10).collect::<BitSet16>()
+        );
+    }
+
+    #[test]
+    fn extend() {
+        let mut set = BitSet16::new();
+        assert!(set.is_empty());
+
+        set.extend(0..10_usize);
+        assert_eq!(set.len(), 10);
+        assert_eq!(set, BitSet16::from_iter(0..10_usize));
+    }
+}
+
\ No newline at end of file diff --git a/static.files/COPYRIGHT-eb44e4cf.txt b/static.files/COPYRIGHT-eb44e4cf.txt new file mode 100644 index 0000000..1447df7 --- /dev/null +++ b/static.files/COPYRIGHT-eb44e4cf.txt @@ -0,0 +1,50 @@ +# REUSE-IgnoreStart + +These documentation pages include resources by third parties. This copyright +file applies only to those resources. The following third party resources are +included, and carry their own copyright notices and license terms: + +* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2): + + Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ + with Reserved Font Name Fira Sans. + + Copyright (c) 2014, Telefonica S.A. + + Licensed under the SIL Open Font License, Version 1.1. + See FiraSans-LICENSE.txt. + +* rustdoc.css, main.js, and playpen.js: + + Copyright 2015 The Rust Developers. + Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or + the MIT license (LICENSE-MIT.txt) at your option. + +* normalize.css: + + Copyright (c) Nicolas Gallagher and Jonathan Neal. + Licensed under the MIT license (see LICENSE-MIT.txt). + +* Source Code Pro (SourceCodePro-Regular.ttf.woff2, + SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2): + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), + with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark + of Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceCodePro-LICENSE.txt. + +* Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2, + SourceSerif4-It.ttf.woff2): + + Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name + 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United + States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceSerif4-LICENSE.md. + +This copyright file is intended to be distributed with rustdoc output. + +# REUSE-IgnoreEnd diff --git a/static.files/FiraSans-LICENSE-05ab6dbd.txt b/static.files/FiraSans-LICENSE-05ab6dbd.txt new file mode 100644 index 0000000..d7e9c14 --- /dev/null +++ b/static.files/FiraSans-LICENSE-05ab6dbd.txt @@ -0,0 +1,98 @@ +// REUSE-IgnoreStart + +Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. +with Reserved Font Name < Fira >, + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/static.files/FiraSans-Medium-e1aa3f0a.woff2 b/static.files/FiraSans-Medium-e1aa3f0a.woff2 new file mode 100644 index 0000000..7a1e5fc Binary files /dev/null and b/static.files/FiraSans-Medium-e1aa3f0a.woff2 differ diff --git a/static.files/FiraSans-Regular-0fe48ade.woff2 b/static.files/FiraSans-Regular-0fe48ade.woff2 new file mode 100644 index 0000000..e766e06 Binary files /dev/null and b/static.files/FiraSans-Regular-0fe48ade.woff2 differ diff --git a/static.files/LICENSE-APACHE-a60eea81.txt b/static.files/LICENSE-APACHE-a60eea81.txt new file mode 100644 index 0000000..16fe87b --- /dev/null +++ b/static.files/LICENSE-APACHE-a60eea81.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/static.files/LICENSE-MIT-23f18e03.txt b/static.files/LICENSE-MIT-23f18e03.txt new file mode 100644 index 0000000..31aa793 --- /dev/null +++ b/static.files/LICENSE-MIT-23f18e03.txt @@ -0,0 +1,23 @@ +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/static.files/NanumBarunGothic-13b3dcba.ttf.woff2 b/static.files/NanumBarunGothic-13b3dcba.ttf.woff2 new file mode 100644 index 0000000..1866ad4 Binary files /dev/null and b/static.files/NanumBarunGothic-13b3dcba.ttf.woff2 differ diff --git a/static.files/NanumBarunGothic-LICENSE-a37d393b.txt b/static.files/NanumBarunGothic-LICENSE-a37d393b.txt new file mode 100644 index 0000000..4b3edc2 --- /dev/null +++ b/static.files/NanumBarunGothic-LICENSE-a37d393b.txt @@ -0,0 +1,103 @@ +// REUSE-IgnoreStart + +Copyright (c) 2010, NAVER Corporation (https://www.navercorp.com/), + +with Reserved Font Name Nanum, Naver Nanum, NanumGothic, Naver NanumGothic, +NanumMyeongjo, Naver NanumMyeongjo, NanumBrush, Naver NanumBrush, NanumPen, +Naver NanumPen, Naver NanumGothicEco, NanumGothicEco, Naver NanumMyeongjoEco, +NanumMyeongjoEco, Naver NanumGothicLight, NanumGothicLight, NanumBarunGothic, +Naver NanumBarunGothic, NanumSquareRound, NanumBarunPen, MaruBuri + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/static.files/SourceCodePro-It-fc8b9304.ttf.woff2 b/static.files/SourceCodePro-It-fc8b9304.ttf.woff2 new file mode 100644 index 0000000..462c34e Binary files /dev/null and b/static.files/SourceCodePro-It-fc8b9304.ttf.woff2 differ diff --git a/static.files/SourceCodePro-LICENSE-67f54ca7.txt b/static.files/SourceCodePro-LICENSE-67f54ca7.txt new file mode 100644 index 0000000..0d2941e --- /dev/null +++ b/static.files/SourceCodePro-LICENSE-67f54ca7.txt @@ -0,0 +1,97 @@ +// REUSE-IgnoreStart + +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + +// REUSE-IgnoreEnd diff --git a/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2 b/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2 new file mode 100644 index 0000000..10b558e Binary files /dev/null and b/static.files/SourceCodePro-Regular-8badfe75.ttf.woff2 differ diff --git a/static.files/SourceCodePro-Semibold-aa29a496.ttf.woff2 b/static.files/SourceCodePro-Semibold-aa29a496.ttf.woff2 new file mode 100644 index 0000000..5ec64ee Binary files /dev/null and b/static.files/SourceCodePro-Semibold-aa29a496.ttf.woff2 differ diff --git a/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2 b/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2 new file mode 100644 index 0000000..181a07f Binary files /dev/null and b/static.files/SourceSerif4-Bold-6d4fd4c0.ttf.woff2 differ diff --git a/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2 b/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2 new file mode 100644 index 0000000..2ae08a7 Binary files /dev/null and b/static.files/SourceSerif4-It-ca3b17ed.ttf.woff2 differ diff --git a/static.files/SourceSerif4-LICENSE-a2cfd9d5.md b/static.files/SourceSerif4-LICENSE-a2cfd9d5.md new file mode 100644 index 0000000..175fa4f --- /dev/null +++ b/static.files/SourceSerif4-LICENSE-a2cfd9d5.md @@ -0,0 +1,98 @@ + + +Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. +Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. + + diff --git a/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2 b/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2 new file mode 100644 index 0000000..0263fc3 Binary files /dev/null and b/static.files/SourceSerif4-Regular-6b053e98.ttf.woff2 differ diff --git a/static.files/favicon-044be391.svg b/static.files/favicon-044be391.svg new file mode 100644 index 0000000..8b34b51 --- /dev/null +++ b/static.files/favicon-044be391.svg @@ -0,0 +1,24 @@ + + + + + diff --git a/static.files/favicon-32x32-6580c154.png b/static.files/favicon-32x32-6580c154.png new file mode 100644 index 0000000..69b8613 Binary files /dev/null and b/static.files/favicon-32x32-6580c154.png differ diff --git a/static.files/main-5f194d8c.js b/static.files/main-5f194d8c.js new file mode 100644 index 0000000..3d672cb --- /dev/null +++ b/static.files/main-5f194d8c.js @@ -0,0 +1,11 @@ +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden");const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.setAttribute("disabled","disabled")}}function showMain(){const main=document.getElementById(MAIN_ID);removeClass(main,"hidden");const mainHeading=main.querySelector(".main-heading");if(mainHeading&&searchState.rustdocToolbar){if(searchState.rustdocToolbar.parentElement){searchState.rustdocToolbar.parentElement.removeChild(searchState.rustdocToolbar)}mainHeading.appendChild(searchState.rustdocToolbar)}const toggle=document.getElementById("toggle-all-docs");if(toggle){toggle.removeAttribute("disabled")}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar){const mobileTitle=document.createElement("h2");mobileTitle.className="location";if(hasClass(document.querySelector(".rustdoc"),"crate")){mobileTitle.innerHTML=`Crate ${window.currentCrate}`}else if(locationTitle){mobileTitle.innerHTML=locationTitle.innerHTML}mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden");const mainHeading=elemToDisplay.querySelector(".main-heading");if(mainHeading&&searchState.rustdocToolbar){if(searchState.rustdocToolbar.parentElement){searchState.rustdocToolbar.parentElement.removeChild(searchState.rustdocToolbar)}mainHeading.appendChild(searchState.rustdocToolbar)}}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url,errorCallback){const script=document.createElement("script");script.src=url;if(errorCallback!==undefined){script.onerror=errorCallback}document.head.append(script)}if(getSettingsButton()){getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)}}window.searchState={rustdocToolbar:document.querySelector("rustdoc-toolbar"),loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=").map(x=>x.replace(/\+/g," "));params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function sendSearchForm(){document.getElementsByClassName("search-form")[0].submit()}function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"),sendSearchForm);loadScript(resourcePath("search-index",".js"),sendSearchForm)}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},descShards:new Map(),loadDesc:async function({descShard,descIndex}){if(descShard.promise===null){descShard.promise=new Promise((resolve,reject)=>{descShard.resolve=resolve;const ds=descShard;const fname=`${ds.crate}-desc-${ds.shard}-`;const url=resourcePath(`search.desc/${descShard.crate}/${fname}`,".js",);loadScript(url,reject)})}const list=await descShard.promise;return list[descIndex]},loadedDescShard:function(crate,shard,data){this.descShards.get(crate)[shard].resolve(data.split("\n"))},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElems=document.querySelectorAll(`details > summary > section[id^="${implId}"]`,);onEachLazy(implElems,implElem=>{const numbered=/^(.+?)-([0-9]+)$/.exec(implElem.id);if(implElem.id!==implId&&(!numbered||numbered[1]!==implId)){return false}return onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/^(.+?)-([0-9]+)$/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id)},0);return true}},)})}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":case"/":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementById("rustdoc-modnav");function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const modpath=hasClass(document.querySelector(".rustdoc"),"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`}else{path=`${modpath}${shortty}.${name}.html`}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html"}const link=document.createElement("a");link.href=path;link.textContent=name;const li=document.createElement("li");if(link.href===current_page){li.classList.add("current")}li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","),);for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return}window.pending_type_impls=null;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header)}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id)}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i}while(document.getElementById(`${el.id}-${i}`)){i+=1}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref}})}idMap.set(el.id,i+1)});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li)}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH)}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block)}if(hasClass(item,"associatedtype")){associatedTypes=block}else if(hasClass(item,"associatedconstant")){associatedConstants=block}else{methods=block}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li)})}outputList.appendChild(template.content)}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0});list.replaceChildren(...newChildren)}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementById("rustdoc-modnav");if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.textContent=crate;const li=document.createElement("li");if(window.rootPath!=="./"&&crate===window.currentCrate){li.className="current"}li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.children[0].innerText="Summary"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.children[0].innerText="Show all"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{if(document.querySelector(".rustdoc.src")){return}onEachLazy(document.querySelectorAll(":not(.scraped-example) > .example-wrap > pre:not(.example-line-numbers)",),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.querySelectorAll(".example-wrap > .example-line-numbers"),x=>{x.parentNode.removeChild(x)})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";document.body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px",)}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!e.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.contains(event.relatedTarget)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(event.relatedTarget)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}document.body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){if(!getHelpButton().contains(document.activeElement)&&!getHelpButton().contains(event.relatedTarget)&&!getSettingsButton().contains(document.activeElement)&&!getSettingsButton().contains(event.relatedTarget)){window.hidePopoverMenus()}}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S / /","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ + restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ + enum, trait, type, macro, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"","Look for functions that accept or return \ + slices and \ + arrays by writing \ + square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll("rustdoc-toolbar .popover"),elem=>{elem.style.display="none"});const button=getHelpButton();if(button){removeClass(button,"help-open")}};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){const button=getHelpButton();addClass(button,"help-open");button.querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}const helpLink=document.querySelector(`#${HELP_BUTTON_ID} > a`);if(isHelpPage){buildHelpMenu()}else if(helpLink){helpLink.addEventListener("click",event=>{if(!helpLink.contains(helpLink)||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){const SIDEBAR_MIN=100;const SIDEBAR_MAX=500;const RUSTDOC_MOBILE_BREAKPOINT=700;const BODY_MIN=400;const SIDEBAR_VANISH_THRESHOLD=SIDEBAR_MIN/2;const sidebarButton=document.getElementById("sidebar-button");if(sidebarButton){sidebarButton.addEventListener("click",e=>{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");if(document.querySelector(".rustdoc.src")){window.rustdocToggleSrcSidebar()}e.preventDefault()})}let currentPointerId=null;let desiredSidebarSize=null;let pendingSidebarResizingFrame=false;const resizer=document.querySelector(".sidebar-resizer");const sidebar=document.querySelector(".sidebar");if(!resizer||!sidebar){return}const isSrcPage=hasClass(document.body,"src");function hideSidebar(){if(isSrcPage){window.rustdocCloseSourceSidebar();updateLocalStorage("src-sidebar-width",null);document.documentElement.style.removeProperty("--src-sidebar-width");sidebar.style.removeProperty("--src-sidebar-width");resizer.style.removeProperty("--src-sidebar-width")}else{addClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","true");updateLocalStorage("desktop-sidebar-width",null);document.documentElement.style.removeProperty("--desktop-sidebar-width");sidebar.style.removeProperty("--desktop-sidebar-width");resizer.style.removeProperty("--desktop-sidebar-width")}}function showSidebar(){if(isSrcPage){window.rustdocShowSourceSidebar()}else{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false")}}function changeSidebarSize(size){if(isSrcPage){updateLocalStorage("src-sidebar-width",size);sidebar.style.setProperty("--src-sidebar-width",size+"px");resizer.style.setProperty("--src-sidebar-width",size+"px")}else{updateLocalStorage("desktop-sidebar-width",size);sidebar.style.setProperty("--desktop-sidebar-width",size+"px");resizer.style.setProperty("--desktop-sidebar-width",size+"px")}}function isSidebarHidden(){return isSrcPage?!hasClass(document.documentElement,"src-sidebar-expanded"):hasClass(document.documentElement,"hide-sidebar")}function resize(e){if(currentPointerId===null||currentPointerId!==e.pointerId){return}e.preventDefault();const pos=e.clientX-3;if(pos=SIDEBAR_MIN){if(isSidebarHidden()){showSidebar()}const constrainedPos=Math.min(pos,window.innerWidth-BODY_MIN,SIDEBAR_MAX);changeSidebarSize(constrainedPos);desiredSidebarSize=constrainedPos;if(pendingSidebarResizingFrame!==false){clearTimeout(pendingSidebarResizingFrame)}pendingSidebarResizingFrame=setTimeout(()=>{if(currentPointerId===null||pendingSidebarResizingFrame===false){return}pendingSidebarResizingFrame=false;document.documentElement.style.setProperty("--resizing-sidebar-width",desiredSidebarSize+"px",)},100)}}window.addEventListener("resize",()=>{if(window.innerWidth=(window.innerWidth-BODY_MIN)){changeSidebarSize(window.innerWidth-BODY_MIN)}else if(desiredSidebarSize!==null&&desiredSidebarSize>SIDEBAR_MIN){changeSidebarSize(desiredSidebarSize)}});function stopResize(e){if(currentPointerId===null){return}if(e){e.preventDefault()}desiredSidebarSize=sidebar.getBoundingClientRect().width;removeClass(resizer,"active");window.removeEventListener("pointermove",resize,false);window.removeEventListener("pointerup",stopResize,false);removeClass(document.documentElement,"sidebar-resizing");document.documentElement.style.removeProperty("--resizing-sidebar-width");if(resizer.releasePointerCapture){resizer.releasePointerCapture(currentPointerId);currentPointerId=null}}function initResize(e){if(currentPointerId!==null||e.altKey||e.ctrlKey||e.metaKey||e.button!==0){return}if(resizer.setPointerCapture){resizer.setPointerCapture(e.pointerId);if(!resizer.hasPointerCapture(e.pointerId)){resizer.releasePointerCapture(e.pointerId);return}currentPointerId=e.pointerId}window.hideAllModals(false);e.preventDefault();window.addEventListener("pointermove",resize,false);window.addEventListener("pointercancel",stopResize,false);window.addEventListener("pointerup",stopResize,false);addClass(resizer,"active");addClass(document.documentElement,"sidebar-resizing");const pos=e.clientX-sidebar.offsetLeft-3;document.documentElement.style.setProperty("--resizing-sidebar-width",pos+"px");desiredSidebarSize=null}resizer.addEventListener("pointerdown",initResize,false)}());(function(){function copyContentToClipboard(content){const el=document.createElement("textarea");el.value=content;el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el)}function copyButtonAnimation(button){button.classList.add("clicked");if(button.reset_button_timeout!==undefined){window.clearTimeout(button.reset_button_timeout)}button.reset_button_timeout=window.setTimeout(()=>{button.reset_button_timeout=undefined;button.classList.remove("clicked")},1000)}const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const title=document.querySelector("title").textContent.replace(" - Rust","");const[item,module]=title.split(" in ");const path=[item];if(module!==undefined){path.unshift(module)}copyContentToClipboard(path.join("::"));copyButtonAnimation(but)};function copyCode(codeElem){if(!codeElem){return}copyContentToClipboard(codeElem.textContent)}function getExampleWrap(event){let elem=event.target;while(!hasClass(elem,"example-wrap")){if(elem===document.body||elem.tagName==="A"||elem.tagName==="BUTTON"||hasClass(elem,"docblock")){return null}elem=elem.parentElement}return elem}function addCopyButton(event){const elem=getExampleWrap(event);if(elem===null){return}elem.removeEventListener("mouseover",addCopyButton);const parent=document.createElement("div");parent.className="button-holder";const runButton=elem.querySelector(".test-arrow");if(runButton!==null){parent.appendChild(runButton)}elem.appendChild(parent);const copyButton=document.createElement("button");copyButton.className="copy-button";copyButton.title="Copy code to clipboard";copyButton.addEventListener("click",()=>{copyCode(elem.querySelector("pre > code"));copyButtonAnimation(copyButton)});parent.appendChild(copyButton);if(!elem.parentElement.classList.contains("scraped-example")){return}const scrapedWrapped=elem.parentElement;window.updateScrapedExample(scrapedWrapped,parent)}function showHideCodeExampleButtons(event){const elem=getExampleWrap(event);if(elem===null){return}let buttons=elem.querySelector(".button-holder");if(buttons===null){addCopyButton(event);buttons=elem.querySelector(".button-holder");if(buttons===null){return}}buttons.classList.toggle("keep-visible")}onEachLazy(document.querySelectorAll(".docblock .example-wrap"),elem=>{elem.addEventListener("mouseover",addCopyButton);elem.addEventListener("click",showHideCodeExampleButtons)})}()) \ No newline at end of file diff --git a/static.files/normalize-9960930a.css b/static.files/normalize-9960930a.css new file mode 100644 index 0000000..469959f --- /dev/null +++ b/static.files/normalize-9960930a.css @@ -0,0 +1,2 @@ + /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} \ No newline at end of file diff --git a/static.files/noscript-893ab5e7.css b/static.files/noscript-893ab5e7.css new file mode 100644 index 0000000..a6c18ec --- /dev/null +++ b/static.files/noscript-893ab5e7.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path,#sidebar-button,.sidebar-resizer{display:none !important;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root,:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}@media (prefers-color-scheme:dark){:root,:root:not([data-theme]){--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}} \ No newline at end of file diff --git a/static.files/rust-logo-9a9549ea.svg b/static.files/rust-logo-9a9549ea.svg new file mode 100644 index 0000000..62424d8 --- /dev/null +++ b/static.files/rust-logo-9a9549ea.svg @@ -0,0 +1,61 @@ + + + diff --git a/static.files/rustdoc-42caa33d.css b/static.files/rustdoc-42caa33d.css new file mode 100644 index 0000000..c1293a8 --- /dev/null +++ b/static.files/rustdoc-42caa33d.css @@ -0,0 +1,53 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;--sidebar-elems-left-padding:24px;--clipboard-image:url('data:image/svg+xml,\ +\ +\ +');--copy-path-height:34px;--copy-path-width:33px;--checkmark-image:url('data:image/svg+xml,\ +\ +');--button-left-margin:4px;--button-border-radius:2px;--toolbar-button-border-radius:6px;--code-block-border-radius:6px;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-0fe48ade.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-e1aa3f0a.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-6b053e98.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-ca3b17ed.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-6d4fd4c0.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-8badfe75.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-fc8b9304.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-aa29a496.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-13b3dcba.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;grid-area:main-heading-h1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{position:relative;display:grid;grid-template-areas:"main-heading-breadcrumbs main-heading-breadcrumbs" "main-heading-h1 main-heading-toolbar" "main-heading-sub-heading main-heading-toolbar";grid-template-columns:minmax(105px,1fr) minmax(0,max-content);grid-template-rows:minmax(25px,min-content) min-content min-content;padding-bottom:6px;margin-bottom:15px;}.rustdoc-breadcrumbs{grid-area:main-heading-breadcrumbs;line-height:1.25;display:flex;flex-wrap:wrap;align-items:end;padding-top:5px;}.rustdoc-breadcrumbs a{padding:4px 0;margin:-4px 0;z-index:1;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}.structfield,.sub-variant-field{margin:0.6em 0;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,.sub-heading,span.since,a.src,rustdoc-toolbar,summary.hideme,.scraped-example-list,.rustdoc-breadcrumbs,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.search-results li,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,.code-header,.type-signature{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap .src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:col-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:calc(var(--desktop-sidebar-width) + 1px);}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing*{cursor:col-resize !important;}.sidebar-resizing .sidebar{position:fixed;}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:var(--desktop-sidebar-width);border-left:solid 1px var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}}.sidebar-resizer.active{padding:0 140px;width:2px;margin-left:-140px;border-left:none;}.sidebar-resizer.active:before{border-left:solid 2px var(--sidebar-resizer-active);display:block;height:100%;content:"";}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li,.block ul{padding:0;margin:0;list-style:none;}.block ul a{padding-left:1rem;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-right:0.25rem;border-left:solid var(--sidebar-elems-left-padding) transparent;margin-left:calc(-0.25rem - var(--sidebar-elems-left-padding));background-clip:border-box;}.hide-toc #rustdoc-toc,.hide-toc .in-crate{display:none;}.hide-modnav #rustdoc-modnav{display:none;}.sidebar h2{text-wrap:balance;overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{text-wrap:balance;overflow-wrap:anywhere;font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:var(--sidebar-elems-left-padding);}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 calc(-16px - var(--sidebar-elems-left-padding));padding:0 var(--sidebar-elems-left-padding);text-align:center;}.sidebar-crate .logo-container img{margin-top:-16px;border-top:solid 16px transparent;box-sizing:content-box;position:relative;background-clip:border-box;z-index:1;}.sidebar-crate h2 a{display:block;border-left:solid var(--sidebar-elems-left-padding) transparent;background-clip:border-box;margin:0 calc(-24px + 0.25rem) 0 calc(-0.2rem - var(--sidebar-elems-left-padding));padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap>pre,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-radius:6px;}.rustdoc .example-wrap>.example-line-numbers,.rustdoc .scraped-example .src-line-numbers,.rustdoc .scraped-example .src-line-numbers>pre{border-top-right-radius:0;border-bottom-right-radius:0;}.rustdoc .example-wrap>.example-line-numbers+pre,.rustdoc .scraped-example .rust{border-top-left-radius:0;border-bottom-left-radius:0;}.rustdoc .scraped-example{position:relative;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .example-wrap{max-height:calc(1.5em * 10 + 10px);}.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers,.rustdoc:not(.src) .scraped-example:not(.expanded) .src-line-numbers>pre,.rustdoc:not(.src) .scraped-example:not(.expanded) pre.rust{padding-bottom:0;overflow:auto hidden;}.rustdoc:not(.src) .scraped-example .src-line-numbers{padding-top:0;}.rustdoc:not(.src) .scraped-example.expanded .src-line-numbers{padding-bottom:0;}.rustdoc:not(.src) .example-wrap pre{overflow:auto;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap .src-line-numbers{min-width:fit-content;flex-grow:0;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;padding-right:2px;color:var(--src-line-numbers-span-color);}.rustdoc .scraped-example .example-wrap .src-line-numbers{padding:0;}.rustdoc .src-line-numbers pre{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.sub-heading{font-size:1rem;flex-grow:0;grid-area:main-heading-sub-heading;line-height:1.25;padding-bottom:4px;}.main-heading rustdoc-toolbar,.main-heading .out-of-band{grid-area:main-heading-toolbar;}rustdoc-toolbar{display:flex;flex-direction:row;flex-wrap:nowrap;min-height:60px;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap,.example-wrap .src-line-numbers{background-color:var(--code-block-background-color);border-radius:var(--code-block-border-radius);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.docblock .stab,.docblock-short .stab,.docblock p code{display:inline-block;}.docblock li{margin-bottom:.4em;}.docblock li p:not(:last-child){margin-bottom:.3em;}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 0 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;margin-bottom:4px;}.src nav.sub{margin:0 0 -10px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:10px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.docblock-short a:not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;width:100%;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}.search-results-title+.sub-heading{color:var(--main-color);display:flex;align-items:baseline;white-space:nowrap;}#crate-search-div{position:relative;min-width:0;}#crate-search{padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;margin:0;padding:0;}.search-results>a{display:grid;grid-template-areas:"search-result-name search-result-desc" "search-result-type-signature search-result-type-signature";grid-template-columns:.6fr .4fr;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);column-gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;grid-area:search-result-desc;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;grid-area:search-result-name;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.search-results .type-signature{grid-area:search-result-type-signature;white-space:pre-wrap;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#settings.popover{--popover-arrow-offset:202px;top:calc(100% - 16px);}#help.popover{max-width:600px;--popover-arrow-offset:118px;top:calc(100% - 16px);}#help dt{float:left;clear:left;margin-right:0.5rem;}#help dd{margin-bottom:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;padding:0 0.5rem;text-wrap-style:balance;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side{display:flex;margin-bottom:20px;}.side-by-side>div{width:50%;padding:0 20px 0 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band,.sub-heading,rustdoc-toolbar{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}.example-wrap>a.test-arrow,.example-wrap .button-holder{visibility:hidden;position:absolute;top:4px;right:4px;z-index:1;}a.test-arrow{height:var(--copy-path-height);padding:6px 4px 0 11px;}a.test-arrow::before{content:url('data:image/svg+xml,');}.example-wrap .button-holder{display:flex;}@media not (pointer:coarse){.example-wrap:hover>a.test-arrow,.example-wrap:hover>.button-holder{visibility:visible;}}.example-wrap .button-holder.keep-visible{visibility:visible;}.example-wrap .button-holder>*{background:var(--main-background-color);cursor:pointer;border-radius:var(--button-border-radius);height:var(--copy-path-height);width:var(--copy-path-width);border:0;color:var(--code-example-button-color);}.example-wrap .button-holder>*:hover{color:var(--code-example-button-hover-color);}.example-wrap .button-holder>*:not(:first-child){margin-left:var(--button-left-margin);}.example-wrap .button-holder .copy-button{padding:2px 0 0 4px;}.example-wrap .button-holder .copy-button::before,.example-wrap .test-arrow::before{filter:var(--copy-path-img-filter);}.example-wrap .button-holder .copy-button::before{content:var(--clipboard-image);}.example-wrap .button-holder .copy-button:hover::before,.example-wrap .test-arrow:hover::before{filter:var(--copy-path-img-hover-filter);}.example-wrap .button-holder .copy-button.clicked::before{content:var(--checkmark-image);padding-right:5px;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.main-heading span.since::before{content:"Since ";}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}@keyframes targetfadein{from{background-color:var(--main-background-color);}10%{background-color:var(--target-border-color);}to{background-color:var(--target-background-color);}}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}@media not (prefers-reduced-motion){:target{animation:0.65s cubic-bezier(0,0,0.1,1.0) 0.1s targetfadein;}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{margin-top:0.25rem;display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button,button#toggle-all-docs{margin-left:var(--button-left-margin);display:flex;line-height:1.25;min-width:14px;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;left:6px;height:34px;width:34px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a,button#toggle-all-docs{display:flex;align-items:center;justify-content:center;flex-direction:column;border:1px solid transparent;border-radius:var(--button-border-radius);color:var(--main-color);}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:80px;border-radius:var(--toolbar-button-border-radius);}#settings-menu>a,#help-button>a{min-width:0;}#sidebar-button>a{background-color:var(--button-background-color);border-color:var(--border-color);width:33px;}#settings-menu>a:hover,#settings-menu>a:focus-visible,#help-button>a:hover,#help-button>a:focus-visible,#sidebar-button>a:hover,#sidebar-button>a:focus-visible,button#toggle-all-docs:hover,button#toggle-all-docs:focus-visible{border-color:var(--settings-button-border-focus);text-decoration:none;}#settings-menu>a:before{content:url('data:image/svg+xml,\ + ');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs:before{content:url('data:image/svg+xml,\ + ');width:18px;height:18px;filter:var(--settings-menu-filter);}#help-button>a:before{content:url('data:image/svg+xml,\ + \ + ?');width:18px;height:18px;filter:var(--settings-menu-filter);}button#toggle-all-docs:before,#help-button>a:before,#settings-menu>a:before{filter:var(--settings-menu-filter);margin:8px;}@media not (pointer:coarse){button#toggle-all-docs:hover:before,#help-button>a:hover:before,#settings-menu>a:hover:before{filter:var(--settings-menu-hover-filter);}}button[disabled]#toggle-all-docs{opacity:0.25;border:solid 1px var(--main-background-color);background-size:cover;}button[disabled]#toggle-all-docs:hover{border:solid 1px var(--main-background-color);cursor:not-allowed;}rustdoc-toolbar span.label{font-size:1rem;flex-grow:1;padding-bottom:4px;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:var(--copy-path-height);width:var(--copy-path-width);margin-left:10px;padding:0;padding-left:2px;border:0;font-size:0;}#copy-path::before{filter:var(--copy-path-img-filter);content:var(--clipboard-image);}#copy-path:hover::before{filter:var(--copy-path-img-hover-filter);}#copy-path.clicked::before{content:var(--checkmark-image);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.big-toggle{contain:inline-size;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,\ + ');content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.big-toggle>summary:not(.hideme)::before{left:-34px;top:9px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,\ + ');}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}.src #sidebar-button>a:before,.sidebar-menu-toggle:before{content:url('data:image/svg+xml,\ + ');opacity:0.75;}.sidebar-menu-toggle:hover:before,.sidebar-menu-toggle:active:before,.sidebar-menu-toggle:focus:before{opacity:1;}.src #sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');opacity:0.75;}@media (max-width:850px){#search-tabs .count{display:block;}.side-by-side{flex-direction:column-reverse;}.side-by-side>div{width:auto;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}#copy-path{width:0;visibility:hidden;}rustdoc-toolbar span.label{display:none;}#settings-menu>a,#help-button>a,button#toggle-all-docs{width:33px;}#settings.popover{--popover-arrow-offset:86px;}#help.popover{--popover-arrow-offset:48px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.sidebar .logo-container,.sidebar .location,.sidebar-resizer{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.src .search-form{margin-left:40px;}.src .main-heading{margin-left:8px;}.hide-sidebar .search-form{margin-left:32px;}.hide-sidebar .src .search-form{margin-left:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;white-space:nowrap;text-overflow:ellipsis;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.hide-sidebar .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;border:none;line-height:0;}.hide-sidebar .sidebar-menu-toggle{display:none;}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}.sidebar-menu-toggle:before{filter:var(--mobile-sidebar-menu-filter);}.sidebar-menu-toggle:hover{background:var(--main-background-color);}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{position:fixed;max-width:100vw;width:100vw;}.src .src-sidebar-title{padding-top:0;}details.toggle:not(.top-doc)>summary,.impl-items>section{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0 0 -25px 0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}.item-table>li>.item-name{width:33%;}.item-table>li>div{overflow-wrap:anywhere;}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example:not(.expanded) .example-wrap::before,.scraped-example:not(.expanded) .example-wrap::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .example-wrap::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .example-wrap::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded){width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded){overflow-x:hidden;}.scraped-example .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"],:root:not([data-theme]){--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#595959;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--code-example-button-color:#7f7f7f;--code-example-button-hover-color:#a5a5a5;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--settings-menu-filter:invert(50%);--settings-menu-hover-filter:invert(65%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--code-example-button-color:#b2b2b2;--code-example-button-hover-color:#fff;--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--settings-menu-filter:invert(70%);--settings-menu-hover-filter:invert(100%);--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);--sidebar-resizer-hover:hsl(34,50%,33%);--sidebar-resizer-active:hsl(34,100%,66%);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar .current a,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img,:root[data-theme="ayu"] #sidebar-button>a:before{filter:invert(100);} \ No newline at end of file diff --git a/static.files/scrape-examples-d508a8a9.js b/static.files/scrape-examples-d508a8a9.js new file mode 100644 index 0000000..87b6065 --- /dev/null +++ b/static.files/scrape-examples-d508a8a9.js @@ -0,0 +1 @@ +"use strict";(function(){const DEFAULT_MAX_LINES=5;const HIDDEN_MAX_LINES=10;function scrollToLoc(elt,loc,isHidden){const lines=elt.querySelector(".src-line-numbers > pre");let scrollOffset;const maxLines=isHidden?HIDDEN_MAX_LINES:DEFAULT_MAX_LINES;if(loc[1]-loc[0]>maxLines){const line=Math.max(0,loc[0]-1);scrollOffset=lines.children[line].offsetTop}else{const halfHeight=elt.offsetHeight/2;const offsetTop=lines.children[loc[0]].offsetTop;const lastLine=lines.children[loc[1]];const offsetBot=lastLine.offsetTop+lastLine.offsetHeight;const offsetMid=(offsetTop+offsetBot)/2;scrollOffset=offsetMid-halfHeight}lines.parentElement.scrollTo(0,scrollOffset);elt.querySelector(".rust").scrollTo(0,scrollOffset)}function createScrapeButton(parent,className,content){const button=document.createElement("button");button.className=className;button.innerText=content;parent.insertBefore(button,parent.firstChild);return button}window.updateScrapedExample=(example,buttonHolder)=>{let locIndex=0;const highlights=Array.prototype.slice.call(example.querySelectorAll(".highlight"));const link=example.querySelector(".scraped-example-title a");let expandButton=null;if(!example.classList.contains("expanded")){expandButton=createScrapeButton(buttonHolder,"expand","↕")}const isHidden=example.parentElement.classList.contains("more-scraped-examples");const locs=example.locs;if(locs.length>1){const next=createScrapeButton(buttonHolder,"next","≻");const prev=createScrapeButton(buttonHolder,"prev","≺");const onChangeLoc=changeIndex=>{removeClass(highlights[locIndex],"focus");changeIndex();scrollToLoc(example,locs[locIndex][0],isHidden);addClass(highlights[locIndex],"focus");const url=locs[locIndex][1];const title=locs[locIndex][2];link.href=url;link.innerHTML=title};prev.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex-1+locs.length)%locs.length})});next.addEventListener("click",()=>{onChangeLoc(()=>{locIndex=(locIndex+1)%locs.length})})}if(expandButton){expandButton.addEventListener("click",()=>{if(hasClass(example,"expanded")){removeClass(example,"expanded");scrollToLoc(example,locs[0][0],isHidden)}else{addClass(example,"expanded")}})}};function setupLoc(example,isHidden){example.locs=JSON.parse(example.attributes.getNamedItem("data-locs").textContent);scrollToLoc(example,example.locs[0][0],isHidden)}const firstExamples=document.querySelectorAll(".scraped-example-list > .scraped-example");onEachLazy(firstExamples,el=>setupLoc(el,false));onEachLazy(document.querySelectorAll(".more-examples-toggle"),toggle=>{onEachLazy(toggle.querySelectorAll(".toggle-line, .hide-more"),button=>{button.addEventListener("click",()=>{toggle.open=false})});const moreExamples=toggle.querySelectorAll(".scraped-example");toggle.querySelector("summary").addEventListener("click",()=>{setTimeout(()=>{onEachLazy(moreExamples,el=>setupLoc(el,true))})},{once:true})})})() \ No newline at end of file diff --git a/static.files/search-53f21e11.js b/static.files/search-53f21e11.js new file mode 100644 index 0000000..f82be83 --- /dev/null +++ b/static.files/search-53f21e11.js @@ -0,0 +1,6 @@ +"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}function onEachBtwn(arr,func,funcBtwn){let skipped=true;for(const value of arr){if(!skipped){funcBtwn(value)}skipped=func(value)}}const itemTypes=["keyword","primitive","mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","associatedtype","constant","associatedconstant","union","foreigntype","existential","attr","derive","traitalias","generic",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_GENERIC=itemTypes.indexOf("generic");const TY_IMPORT=itemTypes.indexOf("import");const TY_TRAIT=itemTypes.indexOf("trait");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";const UNBOXING_LIMIT=5;const REGEX_IDENT=/\p{ID_Start}\p{ID_Continue}*|_\p{ID_Continue}+/uy;const REGEX_INVALID_TYPE_FILTER=/[^a-z]/ui;const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost,);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1,)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function isSeparatorCharacter(c){return c===","||c==="="}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function skipWhitespace(parserState){while(parserState.pos0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function getFilteredNextElem(query,parserState,elems,isInGenerics){const start=parserState.pos;if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){throw["Expected type filter before ",":"]}getNextElem(query,parserState,elems,isInGenerics);if(parserState.userQuery[parserState.pos]===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}if(elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.normalizedPathLast;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;getNextElem(query,parserState,elems,isInGenerics)}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let hofParameters=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"," after ","="]}hofParameters=[...elems];elems.length=0;parserState.pos+=2;foundStopChar=true;foundSeparator=false;continue}else if(c===" "){parserState.pos+=1;continue}else if(isSeparatorCharacter(c)){parserState.pos+=1;foundStopChar=true;foundSeparator=true;continue}else if(c===":"&&isPathStart(parserState)){throw["Unexpected ","::",": paths cannot start with ","::"]}else if(isEndCharacter(c)){throw["Unexpected ",c," after ",extra]}if(!foundStopChar){let extra=[];if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;getFilteredNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;if(hofParameters){foundSeparator=false;if([...elems,...hofParameters].some(x=>x.bindingName)||parserState.isInBinding){throw["Unexpected ","="," within ","->"]}const hofElem=makePrimitiveElement("->",{generics:hofParameters,bindings:new Map([["output",[...elems]]]),typeFilter:null,});elems.length=0;elems[0]=hofElem}parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const bindingName=parserState.isInBinding;parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else if(name==="()"&&generics.length===1&&generics[0].name==="->"){generics[0].typeFilter=typeFilter;elems.push(generics[0])}else{if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push(makePrimitiveElement(name,{bindingName,generics}))}}else if(parserState.userQuery[parserState.pos]==="&"){if(parserState.typeFilter!==null&&parserState.typeFilter!=="primitive"){throw["Invalid search type: primitive ","&"," and ",parserState.typeFilter," both specified",]}parserState.typeFilter=null;parserState.pos+=1;let c=parserState.userQuery[parserState.pos];while(c===" "&&parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}else if(parserState.pos=end){throw["Found generics without a path"]}if(parserState.isInBinding){throw["Unexpected ","("," after ","="]}parserState.pos+=1;const typeFilter=parserState.typeFilter;parserState.typeFilter=null;getItemsBefore(query,parserState,generics,")");skipWhitespace(parserState);if(isReturnArrow(parserState)){parserState.pos+=2;skipWhitespace(parserState);getFilteredNextElem(query,parserState,generics,isInGenerics);generics[generics.length-1].bindingName=makePrimitiveElement("output")}else{generics.push(makePrimitiveElement(null,{bindingName:makePrimitiveElement("output"),typeFilter:null,}))}parserState.typeFilter=typeFilter}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics,),)}}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();const match=query.match(REGEX_INVALID_TYPE_FILTER);if(match){throw["Unexpected ",match[0]," in type filter (before ",":",")",]}}function createQueryElement(query,parserState,name,generics,isInGenerics){const path=name.trim();if(path.length===0&&generics.length===0){throw["Unexpected ",parserState.userQuery[parserState.pos]]}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name.trim()==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return makePrimitiveElement("never",{bindingName})}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/).map(x=>x.toLowerCase());if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null){if(gen.name!==null){gen.bindingName.generics.unshift(gen)}bindings.set(gen.bindingName.name.toLowerCase().replace(/_/g,""),gen.bindingName.generics,);return false}return true}),bindings,typeFilter,bindingName,}}function makePrimitiveElement(name,extra){return Object.assign({name,id:null,fullPath:[name],pathWithoutLast:[],pathLast:name,normalizedPathLast:name,generics:[],bindings:new Map(),typeFilter:"primitive",bindingName:null,},extra)}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function getIdentEndPosition(parserState){let afterIdent=consumeIdent(parserState);let end=parserState.pos;let macroExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]," (not a valid identifier)"]}else{throw["Unexpected ",c," (not a valid identifier)"]}parserState.pos+=1;afterIdent=consumeIdent(parserState);end=parserState.pos}if(macroExclamation!==-1){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=macroExclamation}return end}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function consumeIdent(parserState){REGEX_IDENT.lastIndex=parserState.pos;const match=parserState.userQuery.match(REGEX_IDENT);if(match){parserState.pos+=match[0].length;return true}return false}function isPathSeparator(c){return c===":"||c===" "}class VlqHexDecoder{constructor(string,cons){this.string=string;this.cons=cons;this.offset=0;this.backrefQueue=[]}decodeList(){let c=this.string.charCodeAt(this.offset);const ret=[];while(c!==125){ret.push(this.decode());c=this.string.charCodeAt(this.offset)}this.offset+=1;return ret}decode(){let n=0;let c=this.string.charCodeAt(this.offset);if(c===123){this.offset+=1;return this.decodeList()}while(c<96){n=(n<<4)|(c&0xF);this.offset+=1;c=this.string.charCodeAt(this.offset)}n=(n<<4)|(c&0xF);const[sign,value]=[n&1,n>>1];this.offset+=1;return sign?-value:value}next(){const c=this.string.charCodeAt(this.offset);if(c>=48&&c<64){this.offset+=1;return this.backrefQueue[c-48]}if(c===96){this.offset+=1;return this.cons(0)}const result=this.cons(this.decode());this.backrefQueue.unshift(result);if(this.backrefQueue.length>16){this.backrefQueue.pop()}return result}}class RoaringBitmap{constructor(str){const strdecoded=atob(str);const u8array=new Uint8Array(strdecoded.length);for(let j=0;j=4){offsets=[];for(let j=0;j>3]&(1<<(j&0x7))){const runcount=(u8array[i]|(u8array[i+1]<<8));i+=2;this.containers.push(new RoaringBitmapRun(runcount,u8array.slice(i,i+(runcount*4)),));i+=runcount*4}else if(this.cardinalities[j]>=4096){this.containers.push(new RoaringBitmapBits(u8array.slice(i,i+8192)));i+=8192}else{const end=this.cardinalities[j]*2;this.containers.push(new RoaringBitmapArray(this.cardinalities[j],u8array.slice(i,i+end),));i+=end}}}contains(keyvalue){const key=keyvalue>>16;const value=keyvalue&0xFFFF;for(let i=0;i=start&&value<=(start+lenm1)){return true}}return false}}class RoaringBitmapArray{constructor(cardinality,array){this.cardinality=cardinality;this.array=array}contains(value){const l=this.cardinality*2;for(let i=0;i>3]&(1<<(value&7)))}}class NameTrie{constructor(){this.children=[];this.matches=[]}insert(name,id,tailTable){this.insertSubstring(name,0,id,tailTable)}insertSubstring(name,substart,id,tailTable){const l=name.length;if(substart===l){this.matches.push(id)}else{const sb=name.charCodeAt(substart);let child;if(this.children[sb]!==undefined){child=this.children[sb]}else{child=new NameTrie();this.children[sb]=child;let sste;if(substart>=2){const tail=name.substring(substart-2,substart+1);if(tailTable.has(tail)){sste=tailTable.get(tail)}else{sste=[];tailTable.set(tail,sste)}sste.push(child)}}child.insertSubstring(name,substart+1,id,tailTable)}}search(name,tailTable){const results=new Set();this.searchSubstringPrefix(name,0,results);if(results.size=3){const levParams=name.length>=6?new Lev2TParametricDescription(name.length):new Lev1TParametricDescription(name.length);this.searchLev(name,0,levParams,results);const tail=name.substring(0,3);if(tailTable.has(tail)){for(const entry of tailTable.get(tail)){entry.searchSubstringPrefix(name,3,results)}}}return[...results]}searchSubstringPrefix(name,substart,results){const l=name.length;if(substart===l){for(const match of this.matches){results.add(match)}let unprocessedChildren=[];for(const child of this.children){if(child){unprocessedChildren.push(child)}}let nextSet=[];while(unprocessedChildren.length!==0){const next=unprocessedChildren.pop();for(const child of next.children){if(child){nextSet.push(child)}}for(const match of next.matches){results.add(match)}if(unprocessedChildren.length===0){const tmp=unprocessedChildren;unprocessedChildren=nextSet;nextSet=tmp}}}else{const sb=name.charCodeAt(substart);if(this.children[sb]!==undefined){this.children[sb].searchSubstringPrefix(name,substart+1,results)}}}searchLev(name,substart,levParams,results){const stack=[[this,0]];const n=levParams.n;while(stack.length!==0){const[trie,levState]=stack.pop();for(const[charCode,child]of trie.children.entries()){if(!child){continue}const levPos=levParams.getPosition(levState);const vector=levParams.getVector(name,charCode,levPos,Math.min(name.length,levPos+(2*n)+1),);const newLevState=levParams.transition(levState,levPos,vector,);if(newLevState>=0){stack.push([child,newLevState]);if(levParams.isAccept(newLevState)){for(const match of child.matches){results.add(match)}}}}}}}class DocSearch{constructor(rawSearchIndex,rootPath,searchState){this.searchIndexDeprecated=new Map();this.searchIndexEmptyDesc=new Map();this.functionTypeFingerprint=null;this.typeNameIdMap=new Map();this.assocTypeIdNameMap=new Map();this.ALIASES=new Map();this.rootPath=rootPath;this.searchState=searchState;this.typeNameIdOfArray=this.buildTypeMapIndex("array");this.typeNameIdOfSlice=this.buildTypeMapIndex("slice");this.typeNameIdOfArrayOrSlice=this.buildTypeMapIndex("[]");this.typeNameIdOfTuple=this.buildTypeMapIndex("tuple");this.typeNameIdOfUnit=this.buildTypeMapIndex("unit");this.typeNameIdOfTupleOrUnit=this.buildTypeMapIndex("()");this.typeNameIdOfFn=this.buildTypeMapIndex("fn");this.typeNameIdOfFnMut=this.buildTypeMapIndex("fnmut");this.typeNameIdOfFnOnce=this.buildTypeMapIndex("fnonce");this.typeNameIdOfHof=this.buildTypeMapIndex("->");this.typeNameIdOfOutput=this.buildTypeMapIndex("output",true);this.typeNameIdOfReference=this.buildTypeMapIndex("reference");this.EMPTY_BINDINGS_MAP=new Map();this.EMPTY_GENERICS_ARRAY=[];this.TYPES_POOL=new Map();this.nameTrie=new NameTrie();this.tailTable=new Map();this.searchIndex=this.buildIndex(rawSearchIndex)}buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}if(this.typeNameIdMap.has(name)){const obj=this.typeNameIdMap.get(name);obj.assocOnly=isAssocType&&obj.assocOnly;return obj.id}else{const id=this.typeNameIdMap.size;this.typeNameIdMap.set(name,{id,assocOnly:isAssocType});return id}}buildItemSearchTypeAll(types,paths,lowercasePaths){return types.length>0?types.map(type=>this.buildItemSearchType(type,paths,lowercasePaths)):this.EMPTY_GENERICS_ARRAY}buildItemSearchType(type,paths,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=this.EMPTY_GENERICS_ARRAY;bindings=this.EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=this.buildItemSearchTypeAll(type[GENERICS_DATA],paths,lowercasePaths,);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[this.buildItemSearchType(assocType,paths,lowercasePaths,true).id,this.buildItemSearchTypeAll(constraints,paths,lowercasePaths),]}))}else{bindings=this.EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,name:"",ty:TY_GENERIC,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else if(pathIndex===0){result={id:null,name:"",ty:null,path:null,exactPath:null,generics,bindings,unboxFlag:true,}}else{const item=lowercasePaths[pathIndex-1];const id=this.buildTypeMapIndex(item.name,isAssocType);if(isAssocType){this.assocTypeIdNameMap.set(id,paths[pathIndex-1].name)}result={id,name:paths[pathIndex-1].name,ty:item.ty,path:item.path,exactPath:item.exactPath,generics,bindings,unboxFlag:item.unboxFlag,}}const cr=this.TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty&&cr.name===result.name&&cr.unboxFlag===result.unboxFlag){return cr}}this.TYPES_POOL.set(result.id,result);return result}buildFunctionTypeFingerprint(type,output){let input=type.id;if(input===this.typeNameIdOfArray||input===this.typeNameIdOfSlice){input=this.typeNameIdOfArrayOrSlice}if(input===this.typeNameIdOfTuple||input===this.typeNameIdOfUnit){input=this.typeNameIdOfTupleOrUnit}if(input===this.typeNameIdOfFn||input===this.typeNameIdOfFnMut||input===this.typeNameIdOfFnOnce){input=this.typeNameIdOfHof}const hashint1=k=>{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));output[3]+=1}for(const g of type.generics){this.buildFunctionTypeFingerprint(g,output)}const fb={id:null,ty:0,generics:this.EMPTY_GENERICS_ARRAY,bindings:this.EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;this.buildFunctionTypeFingerprint(fb,output)}}buildIndex(rawSearchIndex){const buildFunctionSearchTypeCallback=(paths,lowercasePaths)=>{return functionSearchType=>{if(functionSearchType===0){return null}const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[this.buildItemSearchType(functionSearchType[INPUTS_DATA],paths,lowercasePaths,),]}else{inputs=this.buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],paths,lowercasePaths,)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[this.buildItemSearchType(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,),]}else{output=this.buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],paths,lowercasePaths,)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;inoop);let descShard={crate,shard:0,start:0,len:itemDescShardDecoder.next(),promise:null,resolve:null,};const descShardList=[descShard];this.searchIndexDeprecated.set(crate,new RoaringBitmap(crateCorpus.c));this.searchIndexEmptyDesc.set(crate,new RoaringBitmap(crateCorpus.e));let descIndex=0;let lastParamNames=[];let normalizedName=crate.indexOf("_")===-1?crate:crate.replace(/_/g,"");const crateRow={crate,ty:3,name:crate,path:"",descShard,descIndex,exactPath:"",desc:crateCorpus.doc,parent:undefined,type:null,paramNames:lastParamNames,id,word:crate,normalizedName,bitIndex:0,implDisambiguator:null,};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(crateRow);currentIndex+=1;if(!this.searchIndexEmptyDesc.get(crate).contains(0)){descIndex+=1}const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemReexports=new Map(crateCorpus.r);const itemParentIdxDecoder=new VlqHexDecoder(crateCorpus.i,noop=>noop);const implDisambiguator=new Map(crateCorpus.b);const paths=crateCorpus.p;const aliases=crateCorpus.a;const itemParamNames=new Map(crateCorpus.P);const lowercasePaths=[];const itemFunctionDecoder=new VlqHexDecoder(crateCorpus.f,buildFunctionSearchTypeCallback(paths,lowercasePaths),);let len=paths.length;let lastPath=itemPaths.get(0);for(let i=0;i2&&elem[2]!==null){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}const exactPath=elem.length>3&&elem[3]!==null?itemPaths.get(elem[3]):path;const unboxFlag=elem.length>4&&!!elem[4];lowercasePaths.push({ty,name:name.toLowerCase(),path,exactPath,unboxFlag});paths[i]={ty,name,path,exactPath,unboxFlag}}lastPath="";len=itemTypes.length;let lastName="";let lastWord="";for(let i=0;i=descShard.len&&!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descShard={crate,shard:descShard.shard+1,start:descShard.start+descShard.len,len:itemDescShardDecoder.next(),promise:null,resolve:null,};descIndex=0;descShardList.push(descShard)}const name=itemNames[i]===""?lastName:itemNames[i];const word=itemNames[i]===""?lastWord:itemNames[i].toLowerCase();const path=itemPaths.has(i)?itemPaths.get(i):lastPath;const paramNames=itemParamNames.has(i)?itemParamNames.get(i).split(","):lastParamNames;const type=itemFunctionDecoder.next();if(type!==null){if(type){const fp=this.functionTypeFingerprint.subarray(id*4,(id+1)*4);for(const t of type.inputs){this.buildFunctionTypeFingerprint(t,fp)}for(const t of type.output){this.buildFunctionTypeFingerprint(t,fp)}for(const w of type.where_clause){for(const t of w){this.buildFunctionTypeFingerprint(t,fp)}}}}const itemParentIdx=itemParentIdxDecoder.next();normalizedName=word.indexOf("_")===-1?word:word.replace(/_/g,"");const row={crate,ty:itemTypes.charCodeAt(i)-65,name,path,descShard,descIndex,exactPath:itemReexports.has(i)?itemPaths.get(itemReexports.get(i)):path,parent:itemParentIdx>0?paths[itemParentIdx-1]:undefined,type,paramNames,id,word,normalizedName,bitIndex,implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};this.nameTrie.insert(normalizedName,id,this.tailTable);id+=1;searchIndex.push(row);lastPath=row.path;lastParamNames=row.paramNames;if(!this.searchIndexEmptyDesc.get(crate).contains(bitIndex)){descIndex+=1}lastName=name;lastWord=word}if(aliases){const currentCrateAliases=new Map();this.ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length;this.searchState.descShards.set(crate,descShardList)}this.TYPES_POOL=new Map();return searchIndex}static parseQuery(userQuery){function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}function newParsedQuery(userQuery){return{userQuery,elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,hasReturnArrow:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function parseInput(query,parserState){let foundStopChar=true;while(parserState.pos"){if(isReturnArrow(parserState)){query.hasReturnArrow=true;break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;getFilteredNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}async execQuery(parsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}const buildHrefAndPath=item=>{let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;let exactPath=item.exactPath;if(type==="mod"){displayPath=path+"::";href=this.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";exactPath="";href=this.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=this.rootPath+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor=type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;exactPath=`${myparent.exactPath}::${myparent.name}`;if(parentType==="primitive"){displayPath=myparent.name+"::";exactPath=myparent.name}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}if(item.implDisambiguator!==null){anchor=item.implDisambiguator+"/"+anchor}href=this.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html#"+anchor}else{displayPath=item.path+"::";href=this.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href,`${exactPath}::${name}`]};function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}const transformResults=(results,typeInfo)=>{const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const res=buildHrefAndPath(this.searchIndex[result.id]);const obj=Object.assign({dist:result.dist,displayPath:pathSplitter(res[0]),},this.searchIndex[result.id]);obj.fullPath=res[2]+"|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}if(obj.ty===TY_IMPORT&&duplicates.has(res[2])){continue}if(duplicates.has(res[2]+"|"+TY_IMPORT)){continue}duplicates.add(obj.fullPath);duplicates.add(res[2]);if(typeInfo!==null){obj.displayTypeSignature=this.formatDisplayTypeSignature(obj,typeInfo)}obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out};this.formatDisplayTypeSignature=async(obj,typeInfo)=>{let fnInputs=null;let fnOutput=null;let mgens=null;if(typeInfo!=="elems"&&typeInfo!=="returned"){fnInputs=unifyFunctionTypes(obj.type.inputs,parsedQuery.elems,obj.type.where_clause,null,mgensScratch=>{fnOutput=unifyFunctionTypes(obj.type.output,parsedQuery.returned,obj.type.where_clause,mgensScratch,mgensOut=>{mgens=mgensOut;return true},0,);return!!fnOutput},0,)}else{const arr=typeInfo==="elems"?obj.type.inputs:obj.type.output;const highlighted=unifyFunctionTypes(arr,parsedQuery.elems,obj.type.where_clause,null,mgensOut=>{mgens=mgensOut;return true},0,);if(typeInfo==="elems"){fnInputs=highlighted}else{fnOutput=highlighted}}if(!fnInputs){fnInputs=obj.type.inputs}if(!fnOutput){fnOutput=obj.type.output}const mappedNames=new Map();const whereClause=new Map();const fnParamNames=obj.paramNames;const queryParamNames=[];const remapQuery=queryElem=>{if(queryElem.id<0){queryParamNames[-1-queryElem.id]=queryElem.name}if(queryElem.generics.length>0){queryElem.generics.forEach(remapQuery)}if(queryElem.bindings.size>0){[...queryElem.bindings.values()].flat().forEach(remapQuery)}};parsedQuery.elems.forEach(remapQuery);parsedQuery.returned.forEach(remapQuery);const pushText=(fnType,result)=>{if(!!(result.length%2)===!!fnType.highlighted){result.push("")}else if(result.length===0&&!!fnType.highlighted){result.push("");result.push("")}result[result.length-1]+=fnType.name};const writeHof=(fnType,result)=>{const hofOutput=fnType.bindings.get(this.typeNameIdOfOutput)||[];const hofInputs=fnType.generics;pushText(fnType,result);pushText({name:" (",highlighted:false},result);let needsComma=false;for(const fnType of hofInputs){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}pushText({name:hofOutput.length===0?")":") -> ",highlighted:false,},result);if(hofOutput.length>1){pushText({name:"(",highlighted:false},result)}needsComma=false;for(const fnType of hofOutput){if(needsComma){pushText({name:", ",highlighted:false},result)}needsComma=true;writeFn(fnType,result)}if(hofOutput.length>1){pushText({name:")",highlighted:false},result)}};const writeSpecialPrimitive=(fnType,result)=>{if(fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit){const[ob,sb]=fnType.id===this.typeNameIdOfArray||fnType.id===this.typeNameIdOfSlice?["[","]"]:["(",")"];pushText({name:ob,highlighted:fnType.highlighted},result);onEachBtwn(fnType.generics,nested=>writeFn(nested,result),()=>pushText({name:", ",highlighted:false},result),);pushText({name:sb,highlighted:fnType.highlighted},result);return true}else if(fnType.id===this.typeNameIdOfReference){pushText({name:"&",highlighted:fnType.highlighted},result);let prevHighlighted=false;onEachBtwn(fnType.generics,value=>{prevHighlighted=value.highlighted;writeFn(value,result)},value=>pushText({name:" ",highlighted:prevHighlighted&&value.highlighted,},result),);return true}else if(fnType.id===this.typeNameIdOfFn){writeHof(fnType,result);return true}return false};const writeFn=(fnType,result)=>{if(fnType.id<0){if(fnParamNames[-1-fnType.id]===""){for(const nested of fnType.generics){writeFn(nested,result)}return}else if(mgens){for(const[queryId,fnId]of mgens){if(fnId===fnType.id){mappedNames.set(queryParamNames[-1-queryId],fnParamNames[-1-fnType.id],)}}}pushText({name:fnParamNames[-1-fnType.id],highlighted:!!fnType.highlighted,},result);const where=[];onEachBtwn(fnType.generics,nested=>writeFn(nested,where),()=>pushText({name:" + ",highlighted:false},where),);if(where.length>0){whereClause.set(fnParamNames[-1-fnType.id],where)}}else{if(fnType.ty===TY_PRIMITIVE){if(writeSpecialPrimitive(fnType,result)){return}}else if(fnType.ty===TY_TRAIT&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){writeHof(fnType,result);return}pushText(fnType,result);let hasBindings=false;if(fnType.bindings.size>0){onEachBtwn(fnType.bindings,([key,values])=>{const name=this.assocTypeIdNameMap.get(key);if(values.length===1&&values[0].id<0&&`${fnType.name}::${name}`===fnParamNames[-1-values[0].id]){for(const value of values){writeFn(value,[])}return true}if(!hasBindings){hasBindings=true;pushText({name:"<",highlighted:false},result)}pushText({name,highlighted:false},result);pushText({name:values.length!==1?"=(":"=",highlighted:false,},result);onEachBtwn(values||[],value=>writeFn(value,result),()=>pushText({name:" + ",highlighted:false},result),);if(values.length!==1){pushText({name:")",highlighted:false},result)}},()=>pushText({name:", ",highlighted:false},result),)}if(fnType.generics.length>0){pushText({name:hasBindings?", ":"<",highlighted:false},result)}onEachBtwn(fnType.generics,value=>writeFn(value,result),()=>pushText({name:", ",highlighted:false},result),);if(hasBindings||fnType.generics.length>0){pushText({name:">",highlighted:false},result)}}};const type=[];onEachBtwn(fnInputs,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);pushText({name:" -> ",highlighted:false},type);onEachBtwn(fnOutput,fnType=>writeFn(fnType,type),()=>pushText({name:", ",highlighted:false},type),);return{type,mappedNames,whereClause}};const sortResults=async(results,typeInfo,preferredCrate)=>{const userQuery=parsedQuery.userQuery;const normalizedUserQuery=parsedQuery.userQuery.toLowerCase();const isMixedCase=normalizedUserQuery!==userQuery;const result_list=[];for(const result of results.values()){result.item=this.searchIndex[result.id];result.word=this.searchIndex[result.id].word;result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;if(isMixedCase){a=(aaa.item.name!==userQuery);b=(bbb.item.name!==userQuery);if(a!==b){return a-b}}a=(aaa.word!==normalizedUserQuery);b=(bbb.word!==normalizedUserQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=this.searchIndexDeprecated.get(aaa.item.crate).contains(aaa.item.bitIndex);b=this.searchIndexDeprecated.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=this.searchIndexEmptyDesc.get(aaa.item.crate).contains(aaa.item.bitIndex);b=this.searchIndexEmptyDesc.get(bbb.item.crate).contains(bbb.item.bitIndex);if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});return transformResults(result_list,typeInfo)};function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}if(fnType.id<0&&queryElem.id<0){if(mgens&&mgens.has(queryElem.id)&&mgens.get(queryElem.id)!==fnType.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);if(!solutionCb||solutionCb(mgensScratch)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}else if(solutionCb(mgens?new Map(mgens):null)){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:unifyGenericTypes(fnType.generics,queryElem.generics,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth,)||fnType.generics,});return highlighted}}for(const[i,fnType]of fnTypesIn.entries()){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}if(fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,});return highlighted}}else{const highlightedGenerics=unifyFunctionTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb,unboxingDepth+1,);if(highlightedGenerics){const highlighted=[...fnTypesIn];highlighted[i]=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return highlighted}}}return false}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(queryElem.id)&&mgensScratch.get(queryElem.id)!==fnType.id){continue}mgensScratch.set(queryElem.id,fnType.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}let unifiedGenerics=[];let unifiedGenericsMgens=null;const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){unifiedGenericsMgens=simplifiedMgens;return true}}return false},unboxingDepth,);if(passesUnification){passesUnification.length=fl;passesUnification[flast]=passesUnification[i];passesUnification[i]=Object.assign({},fnType,{highlighted:true,generics:unifiedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,queryElem.bindings.has(k)?unifyFunctionTypes(v,queryElem.bindings.get(k),whereClause,unifiedGenericsMgens,solutionCb,unboxingDepth,):unifiedGenerics.splice(0,v.length)]})),});return passesUnification}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){continue}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...bindings,...generics),queryElems,whereClause,mgens,solutionCb,unboxingDepth+1,);if(passesUnification){const highlightedGenerics=passesUnification.slice(i,i+generics.length+bindings.length,);const highlightedFnType=Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),});return passesUnification.toSpliced(i,generics.length+bindings.length,highlightedFnType,)}}return null}function unifyGenericTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return null}const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return solutionCb(mgens)?fnTypesIn:null}if(!fnTypesIn||fnTypesIn.length===0){return null}const fnType=fnTypesIn[0];const queryElem=queryElems[0];if(unifyFunctionTypeIsMatchCandidate(fnType,queryElem,mgens)){if(fnType.id<0&&queryElem.id<0){if(!mgens||!mgens.has(queryElem.id)||mgens.get(queryElem.id)===fnType.id){const mgensScratch=new Map(mgens);mgensScratch.set(queryElem.id,fnType.id);const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:whereClause[-1-fnType.id],});return highlighted}}}else{let unifiedGenerics;const fnTypesRemaining=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgens,mgensScratch=>{const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch,unboxingDepth,);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){unifiedGenerics=unifyGenericTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb,unboxingDepth,);if(unifiedGenerics!==null){return true}}},unboxingDepth,);if(fnTypesRemaining){const highlighted=[fnType,...fnTypesRemaining];highlighted[0]=Object.assign({highlighted:true,},fnType,{generics:unifiedGenerics||fnType.generics,});return highlighted}}}if(unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth+1,)){let highlightedRemaining;if(fnType.id<0){const highlightedGenerics=unifyFunctionTypes(whereClause[(-fnType.id)-1],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({highlighted:true,},fnType,{generics:highlightedGenerics,}),...highlightedRemaining]}}else{const highlightedGenerics=unifyGenericTypes([...Array.from(fnType.bindings.values()).flat(),...fnType.generics,],[queryElem],whereClause,mgens,mgensScratch=>{const hl=unifyGenericTypes(fnTypesIn.slice(1),queryElems.slice(1),whereClause,mgensScratch,solutionCb,unboxingDepth,);if(hl){highlightedRemaining=hl}return hl},unboxingDepth+1,);if(highlightedGenerics){return[Object.assign({},fnType,{generics:highlightedGenerics,bindings:new Map([...fnType.bindings.entries()].map(([k,v])=>{return[k,highlightedGenerics.splice(0,v.length)]})),}),...highlightedRemaining]}}}return null}const unifyFunctionTypeIsMatchCandidate=(fnType,queryElem,mgensIn)=>{if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgensIn&&mgensIn.has(queryElem.id)&&mgensIn.get(queryElem.id)!==fnType.id){return false}return true}else{if(queryElem.id===this.typeNameIdOfArrayOrSlice&&(fnType.id===this.typeNameIdOfSlice||fnType.id===this.typeNameIdOfArray)){}else if(queryElem.id===this.typeNameIdOfTupleOrUnit&&(fnType.id===this.typeNameIdOfTuple||fnType.id===this.typeNameIdOfUnit)){}else if(queryElem.id===this.typeNameIdOfHof&&(fnType.id===this.typeNameIdOfFn||fnType.id===this.typeNameIdOfFnMut||fnType.id===this.typeNameIdOfFnOnce)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false},unboxingDepth,);return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...binds,...simplifiedGenerics]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens,unboxingDepth,){if(unboxingDepth>=UNBOXING_LIMIT){return false}if(fnType.id<0){if(!whereClause){return false}return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgens,unboxingDepth,)}else if(fnType.unboxFlag&&(fnType.generics.length>0||fnType.bindings.size>0)){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens,unboxingDepth,)}return false}function checkIfInList(list,elem,whereClause,mgens,unboxingDepth){for(const entry of list){if(checkType(entry,elem,whereClause,mgens,unboxingDepth)){return true}}return false}const checkType=(row,elem,whereClause,mgens,unboxingDepth)=>{if(unboxingDepth>=UNBOXING_LIMIT){return false}if(row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&row.generics.length===0&&elem.generics.length===0&&row.bindings.size===0&&elem.bindings.size===0&&elem.id!==this.typeNameIdOfArrayOrSlice&&elem.id!==this.typeNameIdOfHof&&elem.id!==this.typeNameIdOfTupleOrUnit){return row.id===elem.id&&typePassesFilter(elem.typeFilter,row.ty)}else{return unifyFunctionTypes([row],[elem],whereClause,mgens,()=>true,unboxingDepth,)}};const checkTypeMgensForConflict=mgens=>{if(!mgens){return true}const fnTypes=new Set();for(const[_qid,fid]of mgens){if(fnTypes.has(fid)){return false}fnTypes.add(fid)}return true};function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3,);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,descShard:item.descShard,descIndex:item.descIndex,exactPath:item.exactPath,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,bitIndex:item.bitIndex,implDisambiguator:item.implDisambiguator,}}const handleAliases=async(ret,query,filterCrates,currentCrate)=>{const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(this.ALIASES.has(filterCrates)&&this.ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=this.ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(this.searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of this.ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(this.searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{return this.searchIndexEmptyDesc.get(alias.crate).contains(alias.bitIndex)?"":this.searchState.loadDesc(alias)};const[crateDescs,descs]=await Promise.all([Promise.all(crateAliases.map(fetchDesc)),Promise.all(aliases.map(fetchDesc)),]);const pushFunc=alias=>{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach((alias,i)=>{alias.desc=descs[i]});aliases.forEach(pushFunc);crateAliases.forEach((alias,i)=>{alias.desc=crateDescs[i]});crateAliases.forEach(pushFunc)};function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint,);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens,checkTypeMgensForConflict,0,)},0,)){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id,pos,0,tfpDist,0,Number.MAX_VALUE)}const compareTypeFingerprints=(fullId,queryFingerprint)=>{const fh0=this.functionTypeFingerprint[fullId*4];const fh1=this.functionTypeFingerprint[(fullId*4)+1];const fh2=this.functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return this.functionTypeFingerprint[(fullId*4)+3]};const innerRunQuery=()=>{const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();const convertNameToId=(elem,isAssocType)=>{const loweredName=elem.pathLast.toLowerCase();if(this.typeNameIdMap.has(loweredName)&&(isAssocType||!this.typeNameIdMap.get(loweredName).assocOnly)){elem.id=this.typeNameIdMap.get(loweredName).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of this.typeNameIdMap){const dist=Math.min(editDistance(name,loweredName,maxEditDistance),editDistance(name,elem.normalizedPathLast,maxEditDistance),);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.normalizedPathLast)){elem.id=genericSymbols.get(elem.normalizedPathLast)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.normalizedPathLast,elem.id)}if(elem.typeFilter===-1&&elem.normalizedPathLast.length>=3){const maxPartDistance=Math.floor(elem.normalizedPathLast.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of this.typeNameIdMap.keys()){const dist=editDistance(name,elem.normalizedPathLast,maxPartDistance,);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!this.typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[null,[]]}for(const elem2 of constraints){convertNameToId(elem2)}return[this.typeNameIdMap.get(name).id,constraints]}),)};for(const elem of parsedQuery.elems){convertNameToId(elem);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}for(const elem of parsedQuery.returned){convertNameToId(elem);this.buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint)}if(parsedQuery.foundElems===1&&!parsedQuery.hasReturnArrow){const elem=parsedQuery.elems[0];const handleNameSearch=id=>{const row=this.searchIndex[id];if(!typePassesFilter(elem.typeFilter,row.ty)||(filterCrates!==null&&row.crate!==filterCrates)){return}let pathDist=0;if(elem.fullPath.length>1){pathDist=checkPath(elem.pathWithoutLast,row);if(pathDist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,row.id,id,0,0,pathDist)}}else{addIntoResults(results_others,row.id,id,row.normalizedName.indexOf(elem.normalizedPathLast),editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance,),pathDist,maxEditDistance,)}};if(elem.normalizedPathLast!==""){const last=elem.normalizedPathLast;for(const id of this.nameTrie.search(last,this.tailTable)){handleNameSearch(id)}}const length=this.searchIndex.length;for(let i=0,nSearchIndex=length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=this.searchIndex.length;i{const descs=await Promise.all(list.map(result=>{return this.searchIndexEmptyDesc.get(result.crate).contains(result.bitIndex)?"":this.searchState.loadDesc(result)}));for(const[i,result]of list.entries()){result.desc=descs[i]}}));if(parsedQuery.error!==null&&ret.others.length!==0){ret.query.error=null}return ret}}let rawSearchIndex;let docSearch;const longItemTypes=["keyword","primitive type","module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","assoc type","constant","assoc const","union","foreign type","existential type","attribute macro","derive macro","trait alias",];let currentResults;function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&window.searchIndex.has(elem.value)){return elem.value}return null}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}async function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement(array.length===0&&query.error===null?"div":"ul",);if(array.length>0){output.className="search-results "+extraClass;const lis=Promise.all(array.map(async item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("span");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ +${item.alias} - see \ +
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ +${item.displayPath}${name}\ +
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);if(item.displayTypeSignature){const{type,mappedNames,whereClause}=await item.displayTypeSignature;const displayType=document.createElement("div");type.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));displayType.appendChild(highlight)}else{displayType.appendChild(document.createTextNode(value))}});if(mappedNames.size>0||whereClause.size>0){let addWhereLineFn=()=>{const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode("where"));displayType.appendChild(line);addWhereLineFn=()=>{}};for(const[qname,name]of mappedNames){if(name===qname){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${qname} matches `));const lineStrong=document.createElement("strong");lineStrong.appendChild(document.createTextNode(name));line.appendChild(lineStrong);displayType.appendChild(line)}for(const[name,innerType]of whereClause){if(innerType.length<=1){continue}addWhereLineFn();const line=document.createElement("div");line.className="where";line.appendChild(document.createTextNode(` ${name}: `));innerType.forEach((value,index)=>{if(index%2!==0){const highlight=document.createElement("strong");highlight.appendChild(document.createTextNode(value));line.appendChild(highlight)}else{line.appendChild(document.createTextNode(value))}});displayType.appendChild(line)}}displayType.className="type-signature";link.appendChild(displayType)}link.appendChild(description);return link}));lis.then(lis=>{for(const li of lis){output.appendChild(li)}})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return output}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}async function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=DocSearch.parseQuery(searchState.input.value)}currentResults=results.query.userQuery;let currentTab=searchState.currentTab;if((currentTab===0&&results.others.length===0)||(currentTab===1&&results.in_args.length===0)||(currentTab===2&&results.returned.length===0)){if(results.others.length!==0){currentTab=0}else if(results.in_args.length){currentTab=1}else if(results.returned.length){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates="
in 
"+"
"}let output=`
\ +

Results

${crates}
`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",results.others.length)+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",results.others.length)+makeTabHeader(1,"In Parameters",results.in_args.length)+makeTabHeader(2,"In Return Types",results.returned.length)+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,results.others.length)+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const[ret_others,ret_in_args,ret_returned]=await Promise.all([addTab(results.others,results.query,currentTab===0),addTab(results.in_args,results.query,currentTab===1),addTab(results.returned,results.query,currentTab===2),]);const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others);resultsElem.appendChild(ret_in_args);resultsElem.appendChild(ret_returned);search.innerHTML=output;if(searchState.rustdocToolbar){search.querySelector(".main-heading").appendChild(searchState.rustdocToolbar)}const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}async function search(forced){const query=DocSearch.parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="\""+query.userQuery+"\" Search - Rust";updateSearchHistory(buildUrl(query.userQuery,filterCrates));await showResults(await docSearch.execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}function initSearch(searchIndx){rawSearchIndex=searchIndx;if(typeof window!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}else if(typeof exports!=="undefined"){docSearch=new DocSearch(rawSearchIndex,ROOT_PATH,searchState);exports.docSearch=docSearch;exports.parseQuery=DocSearch.parseQuery}}if(typeof exports!=="undefined"){exports.initSearch=initSearch}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}class ParametricDescription{constructor(w,n,minErrors){this.w=w;this.n=n;this.minErrors=minErrors}isAccept(absState){const state=Math.floor(absState/(this.w+1));const offset=absState%(this.w+1);return this.w-offset+this.minErrors[state]<=this.n}getPosition(absState){return absState%(this.w+1)}getVector(name,charCode,pos,end){let vector=0;for(let i=pos;i>5;const bitStart=bitLoc&31;if(bitStart+bitsPerValue<=32){return((data[dataLoc]>>bitStart)&this.MASKS[bitsPerValue-1])}else{const part=32-bitStart;return ~~(((data[dataLoc]>>bitStart)&this.MASKS[part-1])+((data[1+dataLoc]&this.MASKS[bitsPerValue-part-1])<{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){if(setting==="hr"){output+="
";continue}const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +
+
${setting_name}
+
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ + `});output+=`\ +
+
`}else{const checked=setting["default"]===true?" checked":"";output+=`\ +
\ + \ +
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Hide persistent navigation bar","js_name":"hide-sidebar","default":false,},{"name":"Hide table of contents","js_name":"hide-toc","default":false,},{"name":"Hide module navigation","js_name":"hide-modnav","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display="";onEachLazy(settingsMenu.querySelectorAll("input[type='checkbox']"),el=>{const val=getSettingValue(el.id);const checked=val==="true";if(checked!==el.checked&&val!==null){el.checked=checked}})}function settingsBlurHandler(event){if(!getHelpButton().contains(document.activeElement)&&!getHelpButton().contains(event.relatedTarget)&&!getSettingsButton().contains(document.activeElement)&&!getSettingsButton().contains(event.relatedTarget)){window.hidePopoverMenus()}}if(!isSettingsPage){const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(settingsMenu.contains(event.target)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/static.files/src-script-56102188.js b/static.files/src-script-56102188.js new file mode 100644 index 0000000..d0aebb8 --- /dev/null +++ b/static.files/src-script-56102188.js @@ -0,0 +1 @@ +"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth{removeClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","false")};window.rustdocShowSourceSidebar=()=>{addClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","true")};window.rustdocToggleSrcSidebar=()=>{if(document.documentElement.classList.contains("src-sidebar-expanded")){window.rustdocCloseSourceSidebar()}else{window.rustdocShowSourceSidebar()}};function createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;for(const[key,source]of srcIndex){source[NAME_OFFSET]=key;hasFoundFile=createDirEntry(source,sidebar,"",hasFoundFile)}container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}function highlightSrcLines(){const match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",highlightSrcLines);onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/static.files/storage-59e33391.js b/static.files/storage-59e33391.js new file mode 100644 index 0000000..5aac776 --- /dev/null +++ b/static.files/storage-59e33391.js @@ -0,0 +1,23 @@ +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){const themeNames=getVar("themes").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(themeNames.indexOf(newThemeName)===-1){return}if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}if(getSettingValue("hide-toc")==="true"){addClass(document.documentElement,"hide-toc")}if(getSettingValue("hide-modnav")==="true"){addClass(document.documentElement,"hide-modnav")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px",)}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px",)}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}});class RustdocSearchElement extends HTMLElement{constructor(){super()}connectedCallback(){const rootPath=getVar("root-path");const currentCrate=getVar("current-crate");this.innerHTML=``}}window.customElements.define("rustdoc-search",RustdocSearchElement);class RustdocToolbarElement extends HTMLElement{constructor(){super()}connectedCallback(){if(this.firstElementChild){return}const rootPath=getVar("root-path");this.innerHTML=` +
+ Settings +
+
+ Help +
+ `}}window.customElements.define("rustdoc-toolbar",RustdocToolbarElement) \ No newline at end of file diff --git a/trait.impl/core/clone/trait.Clone.js b/trait.impl/core/clone/trait.Clone.js new file mode 100644 index 0000000..f1300fe --- /dev/null +++ b/trait.impl/core/clone/trait.Clone.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl Clone for BitSetError"],["impl<'a, T, U, const N: usize, const M: usize> Clone for Intersection<'a, T, U, N, M>
where\n T: PrimInt + 'a + Clone,\n U: PrimInt + 'a + Clone,
"],["impl<'a, T, U, const N: usize, const M: usize> Clone for SymmetricDifference<'a, T, U, N, M>
where\n T: PrimInt + 'a + Clone,\n U: PrimInt + 'a + Clone,
"],["impl<'a, T: Clone + PrimInt + 'a, U: Clone + PrimInt + 'a, const N: usize, const M: usize> Clone for Difference<'a, T, U, N, M>"],["impl<'a, T: Clone + PrimInt + 'a, U: Clone + PrimInt + 'a, const N: usize, const M: usize> Clone for Union<'a, T, U, N, M>"],["impl<'a, T: Clone, const N: usize> Clone for Iter<'a, T, N>"],["impl<T: Clone, const N: usize> Clone for BitSet<T, N>"],["impl<T: Clone, const N: usize> Clone for IntoIter<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[6095]} \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.Eq.js b/trait.impl/core/cmp/trait.Eq.js new file mode 100644 index 0000000..a227a18 --- /dev/null +++ b/trait.impl/core/cmp/trait.Eq.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl Eq for BitSetError"],["impl<T: Eq, const N: usize> Eq for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[748]} \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.Ord.js b/trait.impl/core/cmp/trait.Ord.js new file mode 100644 index 0000000..95ae4bc --- /dev/null +++ b/trait.impl/core/cmp/trait.Ord.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl Ord for BitSetError"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[260]} \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.PartialEq.js b/trait.impl/core/cmp/trait.PartialEq.js new file mode 100644 index 0000000..f18a2e1 --- /dev/null +++ b/trait.impl/core/cmp/trait.PartialEq.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl PartialEq for BitSetError"],["impl<T: PartialEq, const N: usize> PartialEq for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[811]} \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.PartialOrd.js b/trait.impl/core/cmp/trait.PartialOrd.js new file mode 100644 index 0000000..b0617d2 --- /dev/null +++ b/trait.impl/core/cmp/trait.PartialOrd.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl PartialOrd for BitSetError"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[281]} \ No newline at end of file diff --git a/trait.impl/core/convert/trait.From.js b/trait.impl/core/convert/trait.From.js new file mode 100644 index 0000000..a76aee0 --- /dev/null +++ b/trait.impl/core/convert/trait.From.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T: PrimInt, const N: usize> From<[T; N]> for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[621]} \ No newline at end of file diff --git a/trait.impl/core/default/trait.Default.js b/trait.impl/core/default/trait.Default.js new file mode 100644 index 0000000..8eb515f --- /dev/null +++ b/trait.impl/core/default/trait.Default.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T: PrimInt + Default, const N: usize> Default for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[667]} \ No newline at end of file diff --git a/trait.impl/core/fmt/trait.Binary.js b/trait.impl/core/fmt/trait.Binary.js new file mode 100644 index 0000000..9da310c --- /dev/null +++ b/trait.impl/core/fmt/trait.Binary.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T, const N: usize> Binary for BitSet<T, N>
where\n T: Copy + Binary,
"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[704]} \ No newline at end of file diff --git a/trait.impl/core/fmt/trait.Debug.js b/trait.impl/core/fmt/trait.Debug.js new file mode 100644 index 0000000..c29d3dd --- /dev/null +++ b/trait.impl/core/fmt/trait.Debug.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl Debug for FloatErrorKind"],["impl Debug for ParseFloatError"]]],["rbitset",[["impl Debug for BitSetError"],["impl<T, U, const N: usize, const M: usize> Debug for Difference<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T, U, const N: usize, const M: usize> Debug for Intersection<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T, U, const N: usize, const M: usize> Debug for SymmetricDifference<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T, U, const N: usize, const M: usize> Debug for Union<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T, const N: usize> Debug for BitSet<T, N>
where\n T: PrimInt,
"],["impl<T: PrimInt, const N: usize> Debug for Drain<'_, T, N>"],["impl<T: PrimInt, const N: usize> Debug for IntoIter<T, N>"],["impl<T: PrimInt, const N: usize> Debug for Iter<'_, T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[561,5478]} \ No newline at end of file diff --git a/trait.impl/core/fmt/trait.Display.js b/trait.impl/core/fmt/trait.Display.js new file mode 100644 index 0000000..cf64bee --- /dev/null +++ b/trait.impl/core/fmt/trait.Display.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl Display for ParseFloatError"]]],["rbitset",[["impl Display for BitSetError"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[299,273]} \ No newline at end of file diff --git a/trait.impl/core/hash/trait.Hash.js b/trait.impl/core/hash/trait.Hash.js new file mode 100644 index 0000000..48aef1c --- /dev/null +++ b/trait.impl/core/hash/trait.Hash.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl Hash for BitSetError"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[265]} \ No newline at end of file diff --git a/trait.impl/core/iter/traits/collect/trait.Extend.js b/trait.impl/core/iter/traits/collect/trait.Extend.js new file mode 100644 index 0000000..f904c53 --- /dev/null +++ b/trait.impl/core/iter/traits/collect/trait.Extend.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T: PrimInt, U: Into<usize>, const N: usize> Extend<U> for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[801]} \ No newline at end of file diff --git a/trait.impl/core/iter/traits/collect/trait.FromIterator.js b/trait.impl/core/iter/traits/collect/trait.FromIterator.js new file mode 100644 index 0000000..1547bb4 --- /dev/null +++ b/trait.impl/core/iter/traits/collect/trait.FromIterator.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T: PrimInt + Default, U: Into<usize>, const N: usize> FromIterator<U> for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[966]} \ No newline at end of file diff --git a/trait.impl/core/iter/traits/collect/trait.IntoIterator.js b/trait.impl/core/iter/traits/collect/trait.IntoIterator.js new file mode 100644 index 0000000..a0f220c --- /dev/null +++ b/trait.impl/core/iter/traits/collect/trait.IntoIterator.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<'a, T: PrimInt, const N: usize> IntoIterator for &'a BitSet<T, N>"],["impl<T: PrimInt, const N: usize> IntoIterator for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1121]} \ No newline at end of file diff --git a/trait.impl/core/iter/traits/double_ended/trait.DoubleEndedIterator.js b/trait.impl/core/iter/traits/double_ended/trait.DoubleEndedIterator.js new file mode 100644 index 0000000..12958d4 --- /dev/null +++ b/trait.impl/core/iter/traits/double_ended/trait.DoubleEndedIterator.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T: PrimInt, const N: usize> DoubleEndedIterator for IntoIter<T, N>"],["impl<T: PrimInt, const N: usize> DoubleEndedIterator for Iter<'_, T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1175]} \ No newline at end of file diff --git a/trait.impl/core/iter/traits/exact_size/trait.ExactSizeIterator.js b/trait.impl/core/iter/traits/exact_size/trait.ExactSizeIterator.js new file mode 100644 index 0000000..b6f20f3 --- /dev/null +++ b/trait.impl/core/iter/traits/exact_size/trait.ExactSizeIterator.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T: PrimInt, const N: usize> ExactSizeIterator for Drain<'_, T, N>"],["impl<T: PrimInt, const N: usize> ExactSizeIterator for IntoIter<T, N>"],["impl<T: PrimInt, const N: usize> ExactSizeIterator for Iter<'_, T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[1725]} \ No newline at end of file diff --git a/trait.impl/core/iter/traits/iterator/trait.Iterator.js b/trait.impl/core/iter/traits/iterator/trait.Iterator.js new file mode 100644 index 0000000..3def7d9 --- /dev/null +++ b/trait.impl/core/iter/traits/iterator/trait.Iterator.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<'a, T, U, const N: usize, const M: usize> Iterator for Difference<'a, T, U, N, M>
where\n T: PrimInt + 'a,\n U: PrimInt + 'a,
"],["impl<'a, T, U, const N: usize, const M: usize> Iterator for Intersection<'a, T, U, N, M>
where\n T: PrimInt + 'a,\n U: PrimInt + 'a,
"],["impl<'a, T, U, const N: usize, const M: usize> Iterator for SymmetricDifference<'a, T, U, N, M>
where\n T: PrimInt + 'a,\n U: PrimInt + 'a,
"],["impl<'a, T, U, const N: usize, const M: usize> Iterator for Union<'a, T, U, N, M>
where\n T: PrimInt + 'a,\n U: PrimInt + 'a,
"],["impl<T: PrimInt, const N: usize> Iterator for Drain<'_, T, N>"],["impl<T: PrimInt, const N: usize> Iterator for IntoIter<T, N>"],["impl<T: PrimInt, const N: usize> Iterator for Iter<'_, T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[5062]} \ No newline at end of file diff --git a/trait.impl/core/iter/traits/marker/trait.FusedIterator.js b/trait.impl/core/iter/traits/marker/trait.FusedIterator.js new file mode 100644 index 0000000..fd16966 --- /dev/null +++ b/trait.impl/core/iter/traits/marker/trait.FusedIterator.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T, U, const N: usize, const M: usize> FusedIterator for Difference<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T, U, const N: usize, const M: usize> FusedIterator for Intersection<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T, U, const N: usize, const M: usize> FusedIterator for SymmetricDifference<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T, U, const N: usize, const M: usize> FusedIterator for Union<'_, T, U, N, M>
where\n T: PrimInt,\n U: PrimInt,
"],["impl<T: PrimInt, const N: usize> FusedIterator for Drain<'_, T, N>"],["impl<T: PrimInt, const N: usize> FusedIterator for IntoIter<T, N>"],["impl<T: PrimInt, const N: usize> FusedIterator for Iter<'_, T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[5083]} \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Copy.js b/trait.impl/core/marker/trait.Copy.js new file mode 100644 index 0000000..68d3dce --- /dev/null +++ b/trait.impl/core/marker/trait.Copy.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl Copy for BitSetError"],["impl<T: Copy, const N: usize> Copy for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[784]} \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Freeze.js b/trait.impl/core/marker/trait.Freeze.js new file mode 100644 index 0000000..3c5efa3 --- /dev/null +++ b/trait.impl/core/marker/trait.Freeze.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl Freeze for FloatErrorKind",1,["num_traits::FloatErrorKind"]],["impl Freeze for ParseFloatError",1,["num_traits::ParseFloatError"]]]],["rbitset",[["impl Freeze for BitSetError",1,["rbitset::BitSetError"]],["impl<'a, T, U, const N: usize, const M: usize> Freeze for Difference<'a, T, U, N, M>",1,["rbitset::Difference"]],["impl<'a, T, U, const N: usize, const M: usize> Freeze for Intersection<'a, T, U, N, M>",1,["rbitset::Intersection"]],["impl<'a, T, U, const N: usize, const M: usize> Freeze for SymmetricDifference<'a, T, U, N, M>",1,["rbitset::SymmetricDifference"]],["impl<'a, T, U, const N: usize, const M: usize> Freeze for Union<'a, T, U, N, M>",1,["rbitset::Union"]],["impl<'a, T, const N: usize> Freeze for Drain<'a, T, N>",1,["rbitset::Drain"]],["impl<'a, T, const N: usize> Freeze for Iter<'a, T, N>",1,["rbitset::Iter"]],["impl<T, const N: usize> Freeze for BitSet<T, N>
where\n T: Freeze,
",1,["rbitset::BitSet"]],["impl<T, const N: usize> Freeze for IntoIter<T, N>
where\n T: Freeze,
",1,["rbitset::IntoIter"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[646,4545]} \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Send.js b/trait.impl/core/marker/trait.Send.js new file mode 100644 index 0000000..5d669e8 --- /dev/null +++ b/trait.impl/core/marker/trait.Send.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl Send for FloatErrorKind",1,["num_traits::FloatErrorKind"]],["impl Send for ParseFloatError",1,["num_traits::ParseFloatError"]]]],["rbitset",[["impl Send for BitSetError",1,["rbitset::BitSetError"]],["impl<'a, T, U, const N: usize, const M: usize> Send for Difference<'a, T, U, N, M>
where\n U: Sync,\n T: Sync,
",1,["rbitset::Difference"]],["impl<'a, T, U, const N: usize, const M: usize> Send for Intersection<'a, T, U, N, M>
where\n U: Sync,\n T: Sync,
",1,["rbitset::Intersection"]],["impl<'a, T, U, const N: usize, const M: usize> Send for SymmetricDifference<'a, T, U, N, M>
where\n U: Sync,\n T: Sync,
",1,["rbitset::SymmetricDifference"]],["impl<'a, T, U, const N: usize, const M: usize> Send for Union<'a, T, U, N, M>
where\n T: Sync,\n U: Sync,
",1,["rbitset::Union"]],["impl<'a, T, const N: usize> Send for Drain<'a, T, N>
where\n T: Send,
",1,["rbitset::Drain"]],["impl<'a, T, const N: usize> Send for Iter<'a, T, N>
where\n T: Sync,
",1,["rbitset::Iter"]],["impl<T, const N: usize> Send for BitSet<T, N>
where\n T: Send,
",1,["rbitset::BitSet"]],["impl<T, const N: usize> Send for IntoIter<T, N>
where\n T: Send,
",1,["rbitset::IntoIter"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[634,6101]} \ No newline at end of file diff --git a/trait.impl/core/marker/trait.StructuralPartialEq.js b/trait.impl/core/marker/trait.StructuralPartialEq.js new file mode 100644 index 0000000..2bb9567 --- /dev/null +++ b/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl StructuralPartialEq for BitSetError"],["impl<T, const N: usize> StructuralPartialEq for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[739]} \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Sync.js b/trait.impl/core/marker/trait.Sync.js new file mode 100644 index 0000000..e5829f9 --- /dev/null +++ b/trait.impl/core/marker/trait.Sync.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl Sync for FloatErrorKind",1,["num_traits::FloatErrorKind"]],["impl Sync for ParseFloatError",1,["num_traits::ParseFloatError"]]]],["rbitset",[["impl Sync for BitSetError",1,["rbitset::BitSetError"]],["impl<'a, T, U, const N: usize, const M: usize> Sync for Difference<'a, T, U, N, M>
where\n U: Sync,\n T: Sync,
",1,["rbitset::Difference"]],["impl<'a, T, U, const N: usize, const M: usize> Sync for Intersection<'a, T, U, N, M>
where\n U: Sync,\n T: Sync,
",1,["rbitset::Intersection"]],["impl<'a, T, U, const N: usize, const M: usize> Sync for SymmetricDifference<'a, T, U, N, M>
where\n U: Sync,\n T: Sync,
",1,["rbitset::SymmetricDifference"]],["impl<'a, T, U, const N: usize, const M: usize> Sync for Union<'a, T, U, N, M>
where\n T: Sync,\n U: Sync,
",1,["rbitset::Union"]],["impl<'a, T, const N: usize> Sync for Drain<'a, T, N>
where\n T: Sync,
",1,["rbitset::Drain"]],["impl<'a, T, const N: usize> Sync for Iter<'a, T, N>
where\n T: Sync,
",1,["rbitset::Iter"]],["impl<T, const N: usize> Sync for BitSet<T, N>
where\n T: Sync,
",1,["rbitset::BitSet"]],["impl<T, const N: usize> Sync for IntoIter<T, N>
where\n T: Sync,
",1,["rbitset::IntoIter"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[634,6101]} \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Unpin.js b/trait.impl/core/marker/trait.Unpin.js new file mode 100644 index 0000000..ef59242 --- /dev/null +++ b/trait.impl/core/marker/trait.Unpin.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl Unpin for FloatErrorKind",1,["num_traits::FloatErrorKind"]],["impl Unpin for ParseFloatError",1,["num_traits::ParseFloatError"]]]],["rbitset",[["impl Unpin for BitSetError",1,["rbitset::BitSetError"]],["impl<'a, T, U, const N: usize, const M: usize> Unpin for Difference<'a, T, U, N, M>",1,["rbitset::Difference"]],["impl<'a, T, U, const N: usize, const M: usize> Unpin for Intersection<'a, T, U, N, M>",1,["rbitset::Intersection"]],["impl<'a, T, U, const N: usize, const M: usize> Unpin for SymmetricDifference<'a, T, U, N, M>",1,["rbitset::SymmetricDifference"]],["impl<'a, T, U, const N: usize, const M: usize> Unpin for Union<'a, T, U, N, M>",1,["rbitset::Union"]],["impl<'a, T, const N: usize> Unpin for Drain<'a, T, N>",1,["rbitset::Drain"]],["impl<'a, T, const N: usize> Unpin for Iter<'a, T, N>",1,["rbitset::Iter"]],["impl<T, const N: usize> Unpin for BitSet<T, N>
where\n T: Unpin,
",1,["rbitset::BitSet"]],["impl<T, const N: usize> Unpin for IntoIter<T, N>
where\n T: Unpin,
",1,["rbitset::IntoIter"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[640,4512]} \ No newline at end of file diff --git a/trait.impl/core/ops/bit/trait.Not.js b/trait.impl/core/ops/bit/trait.Not.js new file mode 100644 index 0000000..e60dddc --- /dev/null +++ b/trait.impl/core/ops/bit/trait.Not.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["rbitset",[["impl<T: PrimInt, const N: usize> Not for BitSet<T, N>"]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[509]} \ No newline at end of file diff --git a/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js new file mode 100644 index 0000000..21959bf --- /dev/null +++ b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl RefUnwindSafe for FloatErrorKind",1,["num_traits::FloatErrorKind"]],["impl RefUnwindSafe for ParseFloatError",1,["num_traits::ParseFloatError"]]]],["rbitset",[["impl RefUnwindSafe for BitSetError",1,["rbitset::BitSetError"]],["impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for Difference<'a, T, U, N, M>
where\n U: RefUnwindSafe,\n T: RefUnwindSafe,
",1,["rbitset::Difference"]],["impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for Intersection<'a, T, U, N, M>
where\n U: RefUnwindSafe,\n T: RefUnwindSafe,
",1,["rbitset::Intersection"]],["impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for SymmetricDifference<'a, T, U, N, M>
where\n U: RefUnwindSafe,\n T: RefUnwindSafe,
",1,["rbitset::SymmetricDifference"]],["impl<'a, T, U, const N: usize, const M: usize> RefUnwindSafe for Union<'a, T, U, N, M>
where\n T: RefUnwindSafe,\n U: RefUnwindSafe,
",1,["rbitset::Union"]],["impl<'a, T, const N: usize> RefUnwindSafe for Drain<'a, T, N>
where\n T: RefUnwindSafe,
",1,["rbitset::Drain"]],["impl<'a, T, const N: usize> RefUnwindSafe for Iter<'a, T, N>
where\n T: RefUnwindSafe,
",1,["rbitset::Iter"]],["impl<T, const N: usize> RefUnwindSafe for BitSet<T, N>
where\n T: RefUnwindSafe,
",1,["rbitset::BitSet"]],["impl<T, const N: usize> RefUnwindSafe for IntoIter<T, N>
where\n T: RefUnwindSafe,
",1,["rbitset::IntoIter"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[734,7151]} \ No newline at end of file diff --git a/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js new file mode 100644 index 0000000..033f0e8 --- /dev/null +++ b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[["impl UnwindSafe for FloatErrorKind",1,["num_traits::FloatErrorKind"]],["impl UnwindSafe for ParseFloatError",1,["num_traits::ParseFloatError"]]]],["rbitset",[["impl UnwindSafe for BitSetError",1,["rbitset::BitSetError"]],["impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for Difference<'a, T, U, N, M>
where\n U: RefUnwindSafe,\n T: RefUnwindSafe,
",1,["rbitset::Difference"]],["impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for Intersection<'a, T, U, N, M>
where\n U: RefUnwindSafe,\n T: RefUnwindSafe,
",1,["rbitset::Intersection"]],["impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for SymmetricDifference<'a, T, U, N, M>
where\n U: RefUnwindSafe,\n T: RefUnwindSafe,
",1,["rbitset::SymmetricDifference"]],["impl<'a, T, U, const N: usize, const M: usize> UnwindSafe for Union<'a, T, U, N, M>
where\n T: RefUnwindSafe,\n U: RefUnwindSafe,
",1,["rbitset::Union"]],["impl<'a, T, const N: usize> !UnwindSafe for Drain<'a, T, N>",1,["rbitset::Drain"]],["impl<'a, T, const N: usize> UnwindSafe for Iter<'a, T, N>
where\n T: RefUnwindSafe,
",1,["rbitset::Iter"]],["impl<T, const N: usize> UnwindSafe for BitSet<T, N>
where\n T: UnwindSafe,
",1,["rbitset::BitSet"]],["impl<T, const N: usize> UnwindSafe for IntoIter<T, N>
where\n T: UnwindSafe,
",1,["rbitset::IntoIter"]]]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[716,6828]} \ No newline at end of file diff --git a/trait.impl/num_traits/bounds/trait.Bounded.js b/trait.impl/num_traits/bounds/trait.Bounded.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/bounds/trait.Bounded.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/bounds/trait.LowerBounded.js b/trait.impl/num_traits/bounds/trait.LowerBounded.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/bounds/trait.LowerBounded.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/bounds/trait.UpperBounded.js b/trait.impl/num_traits/bounds/trait.UpperBounded.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/bounds/trait.UpperBounded.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/cast/trait.AsPrimitive.js b/trait.impl/num_traits/cast/trait.AsPrimitive.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/cast/trait.AsPrimitive.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/cast/trait.FromPrimitive.js b/trait.impl/num_traits/cast/trait.FromPrimitive.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/cast/trait.FromPrimitive.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/cast/trait.NumCast.js b/trait.impl/num_traits/cast/trait.NumCast.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/cast/trait.NumCast.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/cast/trait.ToPrimitive.js b/trait.impl/num_traits/cast/trait.ToPrimitive.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/cast/trait.ToPrimitive.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/float/trait.FloatConst.js b/trait.impl/num_traits/float/trait.FloatConst.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/float/trait.FloatConst.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/float/trait.FloatCore.js b/trait.impl/num_traits/float/trait.FloatCore.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/float/trait.FloatCore.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/float/trait.TotalOrder.js b/trait.impl/num_traits/float/trait.TotalOrder.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/float/trait.TotalOrder.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/identities/trait.ConstOne.js b/trait.impl/num_traits/identities/trait.ConstOne.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/identities/trait.ConstOne.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/identities/trait.ConstZero.js b/trait.impl/num_traits/identities/trait.ConstZero.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/identities/trait.ConstZero.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/identities/trait.One.js b/trait.impl/num_traits/identities/trait.One.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/identities/trait.One.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/identities/trait.Zero.js b/trait.impl/num_traits/identities/trait.Zero.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/identities/trait.Zero.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/int/trait.PrimInt.js b/trait.impl/num_traits/int/trait.PrimInt.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/int/trait.PrimInt.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/bytes/trait.FromBytes.js b/trait.impl/num_traits/ops/bytes/trait.FromBytes.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/bytes/trait.FromBytes.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/bytes/trait.NumBytes.js b/trait.impl/num_traits/ops/bytes/trait.NumBytes.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/bytes/trait.NumBytes.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/bytes/trait.ToBytes.js b/trait.impl/num_traits/ops/bytes/trait.ToBytes.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/bytes/trait.ToBytes.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedAdd.js b/trait.impl/num_traits/ops/checked/trait.CheckedAdd.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedAdd.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedDiv.js b/trait.impl/num_traits/ops/checked/trait.CheckedDiv.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedDiv.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedMul.js b/trait.impl/num_traits/ops/checked/trait.CheckedMul.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedMul.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedNeg.js b/trait.impl/num_traits/ops/checked/trait.CheckedNeg.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedNeg.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedRem.js b/trait.impl/num_traits/ops/checked/trait.CheckedRem.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedRem.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedShl.js b/trait.impl/num_traits/ops/checked/trait.CheckedShl.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedShl.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedShr.js b/trait.impl/num_traits/ops/checked/trait.CheckedShr.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedShr.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/checked/trait.CheckedSub.js b/trait.impl/num_traits/ops/checked/trait.CheckedSub.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/checked/trait.CheckedSub.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/euclid/trait.CheckedEuclid.js b/trait.impl/num_traits/ops/euclid/trait.CheckedEuclid.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/euclid/trait.CheckedEuclid.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/euclid/trait.Euclid.js b/trait.impl/num_traits/ops/euclid/trait.Euclid.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/euclid/trait.Euclid.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/inv/trait.Inv.js b/trait.impl/num_traits/ops/inv/trait.Inv.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/inv/trait.Inv.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/mul_add/trait.MulAdd.js b/trait.impl/num_traits/ops/mul_add/trait.MulAdd.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/mul_add/trait.MulAdd.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/mul_add/trait.MulAddAssign.js b/trait.impl/num_traits/ops/mul_add/trait.MulAddAssign.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/mul_add/trait.MulAddAssign.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/overflowing/trait.OverflowingAdd.js b/trait.impl/num_traits/ops/overflowing/trait.OverflowingAdd.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/overflowing/trait.OverflowingAdd.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/overflowing/trait.OverflowingMul.js b/trait.impl/num_traits/ops/overflowing/trait.OverflowingMul.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/overflowing/trait.OverflowingMul.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/overflowing/trait.OverflowingSub.js b/trait.impl/num_traits/ops/overflowing/trait.OverflowingSub.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/overflowing/trait.OverflowingSub.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/saturating/trait.Saturating.js b/trait.impl/num_traits/ops/saturating/trait.Saturating.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/saturating/trait.Saturating.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/saturating/trait.SaturatingAdd.js b/trait.impl/num_traits/ops/saturating/trait.SaturatingAdd.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/saturating/trait.SaturatingAdd.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/saturating/trait.SaturatingMul.js b/trait.impl/num_traits/ops/saturating/trait.SaturatingMul.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/saturating/trait.SaturatingMul.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/saturating/trait.SaturatingSub.js b/trait.impl/num_traits/ops/saturating/trait.SaturatingSub.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/saturating/trait.SaturatingSub.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/wrapping/trait.WrappingAdd.js b/trait.impl/num_traits/ops/wrapping/trait.WrappingAdd.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/wrapping/trait.WrappingAdd.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/wrapping/trait.WrappingMul.js b/trait.impl/num_traits/ops/wrapping/trait.WrappingMul.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/wrapping/trait.WrappingMul.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/wrapping/trait.WrappingNeg.js b/trait.impl/num_traits/ops/wrapping/trait.WrappingNeg.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/wrapping/trait.WrappingNeg.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/wrapping/trait.WrappingShl.js b/trait.impl/num_traits/ops/wrapping/trait.WrappingShl.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/wrapping/trait.WrappingShl.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/wrapping/trait.WrappingShr.js b/trait.impl/num_traits/ops/wrapping/trait.WrappingShr.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/wrapping/trait.WrappingShr.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/ops/wrapping/trait.WrappingSub.js b/trait.impl/num_traits/ops/wrapping/trait.WrappingSub.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/ops/wrapping/trait.WrappingSub.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/pow/trait.Pow.js b/trait.impl/num_traits/pow/trait.Pow.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/pow/trait.Pow.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/sign/trait.Signed.js b/trait.impl/num_traits/sign/trait.Signed.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/sign/trait.Signed.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/sign/trait.Unsigned.js b/trait.impl/num_traits/sign/trait.Unsigned.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/sign/trait.Unsigned.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/trait.Num.js b/trait.impl/num_traits/trait.Num.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/trait.Num.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/trait.NumAssign.js b/trait.impl/num_traits/trait.NumAssign.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/trait.NumAssign.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/trait.NumAssignOps.js b/trait.impl/num_traits/trait.NumAssignOps.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/trait.NumAssignOps.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/trait.NumAssignRef.js b/trait.impl/num_traits/trait.NumAssignRef.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/trait.NumAssignRef.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/trait.NumOps.js b/trait.impl/num_traits/trait.NumOps.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/trait.NumOps.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/trait.NumRef.js b/trait.impl/num_traits/trait.NumRef.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/trait.NumRef.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/trait.impl/num_traits/trait.RefNum.js b/trait.impl/num_traits/trait.RefNum.js new file mode 100644 index 0000000..cab2ef9 --- /dev/null +++ b/trait.impl/num_traits/trait.RefNum.js @@ -0,0 +1,9 @@ +(function() { + var implementors = Object.fromEntries([["num_traits",[]]]); + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } +})() +//{"start":57,"fragment_lengths":[17]} \ No newline at end of file diff --git a/type.impl/rbitset/struct.BitSet.js b/type.impl/rbitset/struct.BitSet.js new file mode 100644 index 0000000..2c1cc14 --- /dev/null +++ b/type.impl/rbitset/struct.BitSet.js @@ -0,0 +1,9 @@ +(function() { + var type_impls = Object.fromEntries([["rbitset",[["
Source§

impl<T, const N: usize> Binary for BitSet<T, N>
where\n T: Copy + Binary,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
","Binary","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt + Default, const N: usize> BitSet<T, N>

Source

pub fn with_default() -> Self

Create an empty instance with default value.

\n

This function is the same as new but without the constness.

\n
§Examples
\n
use rbitset::BitSet;\n\nlet set = BitSet::<u32, 7>::new();
\n
Source

pub fn clear(&mut self)

Clears the set, disabling all bits, removing all elements.

\n

Probably faster than what fill(.., false) would be.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet mut set = BitSet8::new();\nset.insert(1);\nassert!(!set.is_empty());\nset.clear();\nassert!(set.is_empty());
\n
",0,"rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T, const N: usize> BitSet<T, N>

Source

pub fn into_inner(self) -> [T; N]

Return the inner integer array.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet set = BitSet8::from_iter([1u8, 2, 3]);\nassert_eq!(set.into_inner(), [0b00001110]);
\n
Source

pub const fn capacity() -> usize

Returns the capacity of the set, in other words how many bits it can hold.

\n

This function may very well overflow if the size or length is too big, but if you’re making\nthat big allocations you probably got bigger things to worry about.

\n
§Examples
\n
use rbitset::BitSet;\n\nlet capacity = BitSet::<u32, 3>::capacity();\nassert_eq!(capacity, 32 * 3);
\n
",0,"rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt, const N: usize> BitSet<T, N>

Source

pub fn from_ref(inner: &mut [T; N]) -> &mut Self

Transmutes a reference to a borrowed bit array to a borrowed BitSet with the same lifetime.

\n
§Examples
\n
use rbitset::BitSet;\n\nlet mut raw = [0b00001110, 0u8];\nlet set = BitSet::from_ref(&mut raw);\nassert!(set.contains(1));\nassert!(set.contains(2));\nassert!(set.contains(3));
\n
Source

pub fn try_append<U, const M: usize>(\n &mut self,\n other: &mut BitSet<U, M>,\n) -> Result<(), BitSetError>
where\n U: PrimInt,

Tries to move all elements from other into self, leaving other empty.

\n
§Examples
\n
use rbitset::BitSet16;\n\nlet mut a = BitSet16::new();\na.insert(1);\na.insert(2);\na.insert(3);\n\nlet mut b = BitSet16::new();\nb.insert(3);\nb.insert(4);\nb.insert(5);\n\na.try_append(&mut b).expect(\"An error occurred\");\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert!(a.contains(1));\nassert!(a.contains(2));\nassert!(a.contains(3));\nassert!(a.contains(4));\nassert!(a.contains(5));
\n
Source

pub fn try_insert(&mut self, bit: usize) -> Result<bool, BitSetError>

Tries to add a value to the set.

\n

If the set did not have this value present, true is returned.

\n

If the set did have this value present, false is returned.

\n
§Examples
\n
use rbitset::{BitSet16, BitSetError};\n\nlet mut set = BitSet16::new();\n\nassert_eq!(set.try_insert(2), Ok(true));\nassert_eq!(set.try_insert(2), Ok(false));\nassert_eq!(set.try_insert(16), Err(BitSetError::BiggerThanCapacity));
\n
Source

pub unsafe fn insert_unchecked(&mut self, bit: usize) -> bool

Inserts a value to the set without making any checks.

\n

If the set did not have this value present, true is returned.

\n

If the set did have this value present, false is returned.

\n
§Safety
\n

Behavior is undefined if any of the following conditions are violated:

\n
    \n
  • The bit value is bigger than the capacity of the bitset
  • \n
\n
Source

pub fn try_remove(&mut self, bit: usize) -> Result<bool, BitSetError>

Removes a value from the set. Returns whether the value was present in the set.

\n

If the bit is already disabled this is a no-op.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet mut set = BitSet8::new();\n\nset.insert(2);\nassert_eq!(set.remove(2), true);\nassert_eq!(set.remove(2), false);
\n
Source

pub unsafe fn remove_unchecked(&mut self, bit: usize) -> bool

Removes a value from the set without any checking. Returns whether the value was present in\nthe set.

\n

If the bit is already disabled this is a no-op.

\n
§Safety
\n

Behavior is undefined if any of the following conditions are violated:

\n
    \n
  • The bit value is bigger than the capacity of the bitset
  • \n
\n
Source

pub fn append<U, const M: usize>(&mut self, other: &mut BitSet<U, M>)
where\n U: PrimInt,

Move all elements from other into self, leaving other empty.

\n
§Panics
\n

This function may panic if other contains activated bits bigger than what self capacity.

\n
§Examples
\n
use rbitset::BitSet16;\n\nlet mut a = BitSet16::new();\na.insert(1);\na.insert(2);\na.insert(3);\n\nlet mut b = BitSet16::new();\nb.insert(3);\nb.insert(4);\nb.insert(5);\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert!(a.contains(1));\nassert!(a.contains(2));\nassert!(a.contains(3));\nassert!(a.contains(4));\nassert!(a.contains(5));
\n
Source

pub fn insert(&mut self, bit: usize) -> bool

Adds a value to the set.

\n

If the set did not have this value present, true is returned.

\n

If the set did have this value present, false is returned.

\n
§Panics
\n

This function may panic if bit value trying to be inserted is bigger than the\ncapacity of the BitSet. Check try_insert\nfor a non-panicking version

\n
§Examples
\n
use rbitset::BitSet16;\n\nlet mut set = BitSet16::new();\n\nassert_eq!(set.insert(2), true);\nassert_eq!(set.insert(2), false);\nassert_eq!(set.len(), 1);
\n
Source

pub fn remove(&mut self, bit: usize) -> bool

Removes a value from the set. Returns whether the value was present in the set.

\n

If the bit is already disabled this is a no-op.

\n
§Panics
\n

This function may panic if bit value trying to be removed is bigger than the\ncapacity of the BitSet. Check try_remove\nfor a non-panicking version

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet mut set = BitSet8::new();\n\nset.insert(2);\nassert_eq!(set.remove(2), true);\nassert_eq!(set.remove(2), false);
\n
Source

pub fn retain<F>(&mut self, f: F)
where\n F: FnMut(usize) -> bool,

Retains only the elements specified by the predicate.

\n

In other words, remove all elements e for which f(&e) returns false.\nThe elements are visited in ascending order.

\n
§Examples
\n
use rbitset::BitSet16;\n\nlet mut set = BitSet16::from_iter([1u8, 2, 3, 4, 5, 6]);\n// Keep only the even numbers.\nset.retain(|k| k % 2 == 0);\nlet res = BitSet16::from_iter([2u8, 4, 6]);\nassert_eq!(set, res);
\n
Source

pub fn contains(&self, bit: usize) -> bool

Returns true if the specified bit is enabled, in other words, if the set contains a\nvalue.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet set = BitSet8::from_iter([1u8, 2, 3]);\nassert_eq!(set.contains(1), true);\nassert_eq!(set.contains(4), false);
\n
Source

pub fn try_contains(&self, bit: usize) -> Result<bool, BitSetError>

Returns true if the specified bit is enabled, in other words, if the set contains a\nvalue.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet set = BitSet8::from_iter([1u8, 2, 3]);\nassert_eq!(set.try_contains(1), Ok(true));\nassert_eq!(set.try_contains(4), Ok(false));
\n
Source

pub fn len(&self) -> usize

Returns the number of elements in the set.

\n
§Examples
\n
use rbitset::BitSet16;\n\nlet mut set = BitSet16::new();\nassert_eq!(set.len(), 0);\nset.insert(1);\nassert_eq!(set.len(), 1);
\n
Source

pub fn is_empty(&self) -> bool

Returns true if the set contains no elements.

\n
§Examples
\n
use rbitset::BitSet16;\n\nlet mut set = BitSet16::new();\nassert!(set.is_empty());\nset.insert(1);\nassert!(!set.is_empty());
\n
Source

pub fn is_disjoint<U: PrimInt, const M: usize>(\n &self,\n other: &BitSet<U, M>,\n) -> bool

Returns true if self has no elements in common with other. This is equivalent to\nchecking for an empty intersection.

\n
§Examples
\n
use rbitset::BitSet128;\n\nlet a = BitSet128::from_iter([1u8, 2, 3]);\nlet mut b = BitSet128::new();\n\nassert!(a.is_disjoint(&b));\nb.insert(4);\nassert!(a.is_disjoint(&b));\nb.insert(1);\nassert!(!a.is_disjoint(&b));
\n
Source

pub fn is_subset<U: PrimInt, const M: usize>(\n &self,\n other: &BitSet<U, M>,\n) -> bool

Returns true if the set is a subset of another, i.e., other contains at least all the\nvalues in self.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet sup = BitSet8::from_iter([1u8, 2, 3]);\nlet mut set = BitSet8::new();\n\nassert!(set.is_subset(&sup));\nset.insert(2);\nassert!(set.is_subset(&sup));\nset.insert(4);\nassert!(!set.is_subset(&sup));
\n
Source

pub fn is_superset<U: PrimInt, const M: usize>(\n &self,\n other: &BitSet<U, M>,\n) -> bool

Returns true if the set is a superset of another, i.e., self contains at least all the\nvalues in other.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet sub = BitSet8::from_iter([1u8, 2]);\nlet mut set = BitSet8::new();\n\nassert!(!set.is_superset(&sub));\n\nset.insert(0);\nset.insert(1);\nassert!(!set.is_superset(&sub));\n\nset.insert(2);\nassert!(set.is_superset(&sub));
\n
Source

pub fn count_ones(&self) -> u32

Returns the total number of enabled bits.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet set = BitSet8::from_iter([1u8, 2, 3]);\nassert_eq!(set.count_ones(), 3);
\n
Source

pub fn count_zeros(&self) -> u32

Returns the total number of disabled bits.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet set = BitSet8::from_iter([1u8, 2, 3]);\nassert_eq!(set.count_zeros(), 5);
\n
Source

pub fn drain(&mut self) -> Drain<'_, T, N>

Clears the set, returning all elements as an iterator. Keeps the allocated memory for reuse.

\n

If the returned iterator is dropped before being fully consumed, it drops the remaining\nelements. The returned iterator keeps a mutable borrow on the vector to optimize its\nimplementation.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet mut set = BitSet8::from_iter([1u8, 2, 3]);\nassert!(!set.is_empty());\n\nfor i in set.drain() {\n    println!(\"{i}\");\n}\n\nassert!(set.is_empty());
\n
Source

pub fn difference<'a, U: PrimInt, const M: usize>(\n &'a self,\n other: &'a BitSet<U, M>,\n) -> Difference<'a, T, U, N, M>

Visits the values representing the difference, i.e., the values that are in self but not\nin other.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet a = BitSet8::from_iter([1u8, 2, 3]);\nlet b = BitSet8::from_iter([4u8, 2, 3, 4]);\n\n// Can be seen as `a - b`.\nfor x in a.difference(&b) {\n    println!(\"{x}\"); // Print 1\n}\n\nlet diff: BitSet8 = a.difference(&b).collect();\nlet res = BitSet8::from_iter([1u8]);\nassert_eq!(diff, res);\n\n// Note that difference is not symmetric,\n// and `b - a` means something else:\nlet diff: BitSet8 = b.difference(&a).collect();\nlet res = BitSet8::from_iter([4u8]);\nassert_eq!(diff, res);
\n
Source

pub fn intersection<'a, U: PrimInt, const M: usize>(\n &'a self,\n other: &'a BitSet<U, M>,\n) -> Intersection<'a, T, U, N, M>

Visits the values representing the intersection, i.e., the values that are both in self\nand other.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet a = BitSet8::from_iter([1u8, 2, 3]);\nlet b = BitSet8::from_iter([4u8, 2, 3, 4]);\n\nfor x in a.intersection(&b) {\n    println!(\"{x}\");\n}\n\nlet intersection: BitSet8 = a.intersection(&b).collect();\nlet test = BitSet8::from_iter([2u8, 3]);\nassert_eq!(intersection, test);
\n
Source

pub fn symmetric_difference<'a, U: PrimInt, const M: usize>(\n &'a self,\n other: &'a BitSet<U, M>,\n) -> SymmetricDifference<'a, T, U, N, M>

Visits the values representing the symmetric difference, i.e., the values that are in self\nor in other but not in both.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet a = BitSet8::from_iter([1u8, 2, 3]);\nlet b = BitSet8::from_iter([4u8, 2, 3, 4]);\n\nfor x in a.symmetric_difference(&b) {\n    println!(\"{x}\");\n}\n\nlet diff1: BitSet8 = a.symmetric_difference(&b).collect();\nlet diff2: BitSet8 = b.symmetric_difference(&a).collect();\n\nassert_eq!(diff1, diff2);\nlet res = BitSet8::from_iter([1u8, 4]);\nassert_eq!(diff1, res);
\n
Source

pub fn union<'a, U: PrimInt, const M: usize>(\n &'a self,\n other: &'a BitSet<U, M>,\n) -> Union<'a, T, U, N, M>

Visits the values representing the union, i.e., all the values in self or other, without\nduplicates.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet a = BitSet8::from_iter([1u8, 2, 3]);\nlet b = BitSet8::from_iter([4u8, 2, 3, 4]);\n\nfor x in a.union(&b) {\n    println!(\"{x}\");\n}\n\nlet union: BitSet8 = a.union(&b).collect();\nlet res = BitSet8::from_iter([1u8, 2, 3, 4]);\nassert_eq!(union, res);
\n
Source

pub fn iter(&self) -> Iter<'_, T, N>

An iterator visiting all elements in the set.

\n
§Examples
\n
use rbitset::BitSet8;\n\nlet mut set = BitSet8::new();\nset.insert(1);\nset.insert(2);\n\nfor x in set.iter() {\n    println!(\"{x}\");\n}
\n
",0,"rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: Default + PrimInt, const N: usize> BitSet<T, N>

Source

pub fn fill<R: RangeBounds<usize>>(&mut self, range: R, on: bool)

Set all bits in a range. fill(.., false) is effectively the same as clear().

\n
§Panics
\n

Panics if the start or end bounds are more than the capacity.

\n
",0,"rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<const N: usize> BitSet<u16, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

\n
§Examples
\n
use rbitset::BitSet;\n\nlet set = BitSet::<u8, 1>::new();
\n
",0,"rbitset::BitSet16"],["
Source§

impl<const N: usize> BitSet<u32, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

\n
§Examples
\n
use rbitset::BitSet;\n\nlet set = BitSet::<u8, 1>::new();
\n
",0,"rbitset::BitSet32"],["
Source§

impl<const N: usize> BitSet<u64, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

\n
§Examples
\n
use rbitset::BitSet;\n\nlet set = BitSet::<u8, 1>::new();
\n
",0,"rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<const N: usize> BitSet<u8, N>

Source

pub const fn new() -> Self

Create an empty instance of BitSet.

\n
§Examples
\n
use rbitset::BitSet;\n\nlet set = BitSet::<u8, 1>::new();
\n
",0,"rbitset::BitSet8"],["
Source§

impl<T: Clone, const N: usize> Clone for BitSet<T, N>

Source§

fn clone(&self) -> BitSet<T, N>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
","Clone","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T, const N: usize> Debug for BitSet<T, N>
where\n T: PrimInt,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
","Debug","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt + Default, const N: usize> Default for BitSet<T, N>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
","Default","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt, U: Into<usize>, const N: usize> Extend<U> for BitSet<T, N>

Source§

fn extend<I: IntoIterator<Item = U>>(&mut self, iter: I)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
","Extend","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt, const N: usize> From<[T; N]> for BitSet<T, N>

Source§

fn from(inner: [T; N]) -> Self

Converts to this type from the input type.
","From<[T; N]>","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt + Default, U: Into<usize>, const N: usize> FromIterator<U> for BitSet<T, N>

Source§

fn from_iter<I>(iter: I) -> Self
where\n I: IntoIterator<Item = U>,

Creates a value from an iterator. Read more
","FromIterator","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt, const N: usize> IntoIterator for BitSet<T, N>

Source§

type IntoIter = IntoIter<T, N>

Which kind of iterator are we turning this into?
Source§

type Item = usize

The type of the elements being iterated over.
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
","IntoIterator","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PrimInt, const N: usize> Not for BitSet<T, N>

Source§

type Output = BitSet<T, N>

The resulting type after applying the ! operator.
Source§

fn not(self) -> Self::Output

Performs the unary ! operation. Read more
","Not","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: PartialEq, const N: usize> PartialEq for BitSet<T, N>

Source§

fn eq(&self, other: &BitSet<T, N>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient,\nand should not be overridden without very good reason.
","PartialEq","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: Copy, const N: usize> Copy for BitSet<T, N>

","Copy","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T: Eq, const N: usize> Eq for BitSet<T, N>

","Eq","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"],["
Source§

impl<T, const N: usize> StructuralPartialEq for BitSet<T, N>

","StructuralPartialEq","rbitset::BitSet8","rbitset::BitSet16","rbitset::BitSet32","rbitset::BitSet64","rbitset::BitSet128","rbitset::BitSet256","rbitset::BitSet512","rbitset::BitSet1024"]]]]); + if (window.register_type_impls) { + window.register_type_impls(type_impls); + } else { + window.pending_type_impls = type_impls; + } +})() +//{"start":55,"fragment_lengths":[85949]} \ No newline at end of file