ParallelPseudoCompression

Trait ParallelPseudoCompression 

Source
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§

Source

type Compression: PseudoCompressionFunction<T, N>

The underlying compression function that performs N-to-1 compression.

Required Methods§

Source

fn compression(&self) -> &Self::Compression

Returns a reference to the underlying compression function.

Source

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 length N * 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().

Implementors§