use base2k::{FFT64, Module, Scratch}; pub trait ExternalProductScratchSpace { fn external_product_scratch_space(module: &Module, res_size: usize, lhs: usize, rhs: usize) -> usize; } pub trait ExternalProduct { type Lhs; type Rhs; fn external_product(&mut self, module: &Module, lhs: &Self::Lhs, rhs: &Self::Rhs, scratch: &mut Scratch); } pub trait ExternalProductInplaceScratchSpace { fn external_product_inplace_scratch_space(module: &Module, res_size: usize, rhs: usize) -> usize; } pub trait ExternalProductInplace { type Rhs; fn external_product_inplace(&mut self, module: &Module, rhs: &Self::Rhs, scratch: &mut Scratch); }