pub trait ParallelPseudoCompression<T, const N: usize> {
type Compression: PseudoCompressionFunction<T, N>;
// Required methods
fn compression(&self) -> &Self::Compression;
fn parallel_compress(&self, inputs: &[T], out: &mut [MaybeUninit<T>]);
}Expand description
A trait for parallel application of N-to-1 compression functions.
This trait enables efficient batch compression operations where multiple N-element chunks are compressed in parallel. It’s particularly useful for constructing hash trees and Merkle trees where many compression operations need to be performed simultaneously.
The trait is parameterized by:
T: The type of values being compressed (typically hash digests)N: The arity of the compression function (number of inputs per compression)
Required Associated Types§
Sourcetype Compression: PseudoCompressionFunction<T, N>
type Compression: PseudoCompressionFunction<T, N>
The underlying compression function that performs N-to-1 compression.
Required Methods§
Sourcefn compression(&self) -> &Self::Compression
fn compression(&self) -> &Self::Compression
Returns a reference to the underlying compression function.
Sourcefn parallel_compress(&self, inputs: &[T], out: &mut [MaybeUninit<T>])
fn parallel_compress(&self, inputs: &[T], out: &mut [MaybeUninit<T>])
Compresses multiple N-element chunks in parallel.
§Arguments
inputs- A slice containing the values to compress. Must have lengthN * out.len().out- Output buffer where compressed values will be written.
§Behavior
For each index i in 0..out.len(), this method computes:
out[i] = Compression::compress([inputs[i*N], inputs[i*N+1], ..., inputs[i*N+N-1]])All compressions are performed in parallel for efficiency.
§Post-conditions
After this method returns, all elements in out will be initialized with the
compressed values from their corresponding N-element chunks in inputs.
§Panics
Panics if inputs.len() != N * out.len().