pub struct Scalar { /* private fields */ }Expand description
Scalar field representation with up to 256 bits.
This is agnostic to the curve choice and no canonical encoding assumption is involved.
Implementations
Methods from Deref<Target = [u8; 32]>
1.57.0 · sourcepub fn as_slice(&self) -> &[T]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
pub fn as_slice(&self) -> &[T]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
Returns a slice containing the entire array. Equivalent to &s[..].
1.57.0 · sourcepub fn as_mut_slice(&mut self) -> &mut [T]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
pub fn as_mut_slice(&mut self) -> &mut [T]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
Returns a mutable slice containing the entire array. Equivalent to
&mut s[..].
sourcepub fn each_ref(&self) -> [&T; N]
🔬 This is a nightly-only experimental API. (array_methods)
pub fn each_ref(&self) -> [&T; N]
array_methods)Borrows each element and returns an array of references with the same
size as self.
Example
#![feature(array_methods)]
let floats = [3.1, 2.7, -1.0];
let float_refs: [&f64; 3] = floats.each_ref();
assert_eq!(float_refs, [&3.1, &2.7, &-1.0]);This method is particularly useful if combined with other methods, like
map. This way, you can avoid moving the original
array if its elements are not Copy.
#![feature(array_methods)]
let strings = ["Ferris".to_string(), "♥".to_string(), "Rust".to_string()];
let is_ascii = strings.each_ref().map(|s| s.is_ascii());
assert_eq!(is_ascii, [true, false, true]);
// We can still access the original array: it has not been moved.
assert_eq!(strings.len(), 3);sourcepub fn each_mut(&mut self) -> [&mut T; N]
🔬 This is a nightly-only experimental API. (array_methods)
pub fn each_mut(&mut self) -> [&mut T; N]
array_methods)Borrows each element mutably and returns an array of mutable references
with the same size as self.
Example
#![feature(array_methods)]
let mut floats = [3.1, 2.7, -1.0];
let float_refs: [&mut f64; 3] = floats.each_mut();
*float_refs[0] = 0.0;
assert_eq!(float_refs, [&mut 0.0, &mut 2.7, &mut -1.0]);
assert_eq!(floats, [0.0, 2.7, -1.0]);sourcepub fn split_array_ref<const M: usize>(&self) -> (&[T; M], &[T])
🔬 This is a nightly-only experimental API. (split_array)
pub fn split_array_ref<const M: usize>(&self) -> (&[T; M], &[T])
split_array)Divides one array reference into two at an index.
The first will contain all indices from [0, M) (excluding
the index M itself) and the second will contain all
indices from [M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let v = [1, 2, 3, 4, 5, 6];
{
let (left, right) = v.split_array_ref::<0>();
assert_eq!(left, &[]);
assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}
{
let (left, right) = v.split_array_ref::<2>();
assert_eq!(left, &[1, 2]);
assert_eq!(right, &[3, 4, 5, 6]);
}
{
let (left, right) = v.split_array_ref::<6>();
assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
assert_eq!(right, &[]);
}sourcepub fn split_array_mut<const M: usize>(&mut self) -> (&mut [T; M], &mut [T])
🔬 This is a nightly-only experimental API. (split_array)
pub fn split_array_mut<const M: usize>(&mut self) -> (&mut [T; M], &mut [T])
split_array)Divides one mutable array reference into two at an index.
The first will contain all indices from [0, M) (excluding
the index M itself) and the second will contain all
indices from [M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let mut v = [1, 0, 3, 0, 5, 6];
let (left, right) = v.split_array_mut::<2>();
assert_eq!(left, &mut [1, 0][..]);
assert_eq!(right, &mut [3, 0, 5, 6]);
left[1] = 2;
right[1] = 4;
assert_eq!(v, [1, 2, 3, 4, 5, 6]);sourcepub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M])
🔬 This is a nightly-only experimental API. (split_array)
pub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M])
split_array)Divides one array reference into two at an index from the end.
The first will contain all indices from [0, N - M) (excluding
the index N - M itself) and the second will contain all
indices from [N - M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let v = [1, 2, 3, 4, 5, 6];
{
let (left, right) = v.rsplit_array_ref::<0>();
assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
assert_eq!(right, &[]);
}
{
let (left, right) = v.rsplit_array_ref::<2>();
assert_eq!(left, &[1, 2, 3, 4]);
assert_eq!(right, &[5, 6]);
}
{
let (left, right) = v.rsplit_array_ref::<6>();
assert_eq!(left, &[]);
assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
}sourcepub fn rsplit_array_mut<const M: usize>(&mut self) -> (&mut [T], &mut [T; M])
🔬 This is a nightly-only experimental API. (split_array)
pub fn rsplit_array_mut<const M: usize>(&mut self) -> (&mut [T], &mut [T; M])
split_array)Divides one mutable array reference into two at an index from the end.
The first will contain all indices from [0, N - M) (excluding
the index N - M itself) and the second will contain all
indices from [N - M, N) (excluding the index N itself).
Panics
Panics if M > N.
Examples
#![feature(split_array)]
let mut v = [1, 0, 3, 0, 5, 6];
let (left, right) = v.rsplit_array_mut::<4>();
assert_eq!(left, &mut [1, 0]);
assert_eq!(right, &mut [3, 0, 5, 6][..]);
left[1] = 2;
right[1] = 4;
assert_eq!(v, [1, 2, 3, 4, 5, 6]);Trait Implementations
sourceimpl Element for Scalar
impl Element for Scalar
sourcefn to_buffer(
&self,
config: &Self::Config,
_context: &mut ContextUnit,
buf: &mut [u8]
)
fn to_buffer(
&self,
config: &Self::Config,
_context: &mut ContextUnit,
buf: &mut [u8]
)
Write the type into the buffer. Read more
sourcefn try_from_buffer_in_place<S>(
&mut self,
config: &Self::Config,
_context: &mut Context<S>,
buf: &[u8]
) -> Result<()>
fn try_from_buffer_in_place<S>(
&mut self,
config: &Self::Config,
_context: &mut Context<S>,
buf: &[u8]
) -> Result<()>
Deserialize the type from a given buffer Read more
sourcefn validate(&self, _config: &Preamble) -> Result<()>
fn validate(&self, _config: &Preamble) -> Result<()>
Perform the internal validations of the associated element
sourcefn validate_buffer_len(config: &Self::Config, len: usize) -> Result<()>
fn validate_buffer_len(config: &Self::Config, len: usize) -> Result<()>
Assert the buffer is big enough to store the type
sourcefn to_vec(&self, config: &Self::Config, context: &mut ContextUnit) -> Vec<u8>
fn to_vec(&self, config: &Self::Config, context: &mut ContextUnit) -> Vec<u8>
Serialize the object into a bytes array.
sourcefn try_from_buffer<S>(
config: &Self::Config,
context: &mut Context<S>,
buf: &[u8]
) -> Result<Self> where
S: Read + Seek,
fn try_from_buffer<S>(
config: &Self::Config,
context: &mut Context<S>,
buf: &[u8]
) -> Result<Self> where
S: Read + Seek,
Create a new instance of the type from the provided buffer
sourcefn try_decode_in_place<'a, S>(
&mut self,
config: &Self::Config,
context: &mut Context<S>,
buf: &'a [u8]
) -> Result<&'a [u8]> where
S: Read + Seek,
fn try_decode_in_place<'a, S>(
&mut self,
config: &Self::Config,
context: &mut Context<S>,
buf: &'a [u8]
) -> Result<&'a [u8]> where
S: Read + Seek,
Write an element from the buffer, and return the remainder bytes Read more
sourcefn try_decode<'a, S>(
config: &Self::Config,
context: &mut Context<S>,
buf: &'a [u8]
) -> Result<(Self, &'a [u8])> where
S: Read + Seek,
fn try_decode<'a, S>(
config: &Self::Config,
context: &mut Context<S>,
buf: &'a [u8]
) -> Result<(Self, &'a [u8])> where
S: Read + Seek,
Write an element from the buffer, and return the remainder bytes Read more
sourcefn encode<'a>(
&self,
config: &Self::Config,
context: &mut ContextUnit,
buf: &'a mut [u8]
) -> &'a mut [u8]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
fn encode<'a>(
&self,
config: &Self::Config,
context: &mut ContextUnit,
buf: &'a mut [u8]
) -> &'a mut [u8]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
Read an element into the buffer, returning the remainder bytes Read more
sourcefn try_to_writer<W>(
&self,
writer: W,
config: &Self::Config,
context: &mut ContextUnit
) -> Result<usize> where
W: Write,
fn try_to_writer<W>(
&self,
writer: W,
config: &Self::Config,
context: &mut ContextUnit
) -> Result<usize> where
W: Write,
Send the bytes representation of an element to a writer
sourceimpl Ord for Scalar
impl Ord for Scalar
1.21.0 · sourcefn max(self, other: Self) -> Self
fn max(self, other: Self) -> Self
Compares and returns the maximum of two values. Read more
1.21.0 · sourcefn min(self, other: Self) -> Self
fn min(self, other: Self) -> Self
Compares and returns the minimum of two values. Read more
1.50.0 · sourcefn clamp(self, min: Self, max: Self) -> Self where
Self: PartialOrd<Self>,
fn clamp(self, min: Self, max: Self) -> Self where
Self: PartialOrd<Self>,
Restrict a value to a certain interval. Read more
sourceimpl PartialOrd<Scalar> for Scalar
impl PartialOrd<Scalar> for Scalar
sourcefn partial_cmp(&self, other: &Scalar) -> Option<Ordering>
fn partial_cmp(&self, other: &Scalar) -> Option<Ordering>
This method returns an ordering between self and other values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self and other) and is used by the <=
operator. Read more
impl Copy for Scalar
impl Eq for Scalar
impl StructuralEq for Scalar
impl StructuralPartialEq for Scalar
Auto Trait Implementations
impl RefUnwindSafe for Scalar
impl Send for Scalar
impl Sync for Scalar
impl Unpin for Scalar
impl UnwindSafe for Scalar
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more