pub trait SqrtDecomposition: Sized {
type M: Monoid;
type B;
// Required methods
fn bucket(bsize: usize) -> Self::B;
fn update_bucket(bucket: &mut Self::B, x: &<Self::M as Magma>::T);
fn update_cell(
bucket: &mut Self::B,
cell: &mut <Self::M as Magma>::T,
x: &<Self::M as Magma>::T,
);
fn fold_bucket(bucket: &Self::B) -> <Self::M as Magma>::T;
fn fold_cell(
bucket: &Self::B,
cell: &<Self::M as Magma>::T,
) -> <Self::M as Magma>::T;
// Provided method
fn sqrt_decomposition(
n: usize,
bucket_size: usize,
) -> SqrtDecompositionBuckets<Self> { ... }
}
Required Associated Types§
Required Methods§
fn bucket(bsize: usize) -> Self::B
fn update_bucket(bucket: &mut Self::B, x: &<Self::M as Magma>::T)
fn update_cell( bucket: &mut Self::B, cell: &mut <Self::M as Magma>::T, x: &<Self::M as Magma>::T, )
fn fold_bucket(bucket: &Self::B) -> <Self::M as Magma>::T
fn fold_cell( bucket: &Self::B, cell: &<Self::M as Magma>::T, ) -> <Self::M as Magma>::T
Provided Methods§
fn sqrt_decomposition( n: usize, bucket_size: usize, ) -> SqrtDecompositionBuckets<Self>
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.