pub trait Gain {
// Required method
fn calc<'a>(
&'a self,
geometry: &Geometry,
) -> Result<Box<dyn Fn(&Device) -> Box<dyn Fn(&Transducer) -> Drive + Send + Sync> + 'a>, AUTDInternalError>;
// Provided methods
fn calc_with_filter<'a>(
&'a self,
geometry: &Geometry,
_filter: HashMap<usize, BitVec>,
) -> Result<Box<dyn Fn(&Device) -> Box<dyn Fn(&Transducer) -> Drive + Send + Sync> + 'a>, AUTDInternalError> { ... }
fn transform<'a, D, FT, F>(
f: F,
) -> Box<dyn Fn(&Device) -> Box<dyn Fn(&Transducer) -> Drive + Send + Sync> + 'a>
where D: Into<Drive>,
FT: Fn(&Transducer) -> D + Sync + Send + 'static,
F: Fn(&Device) -> FT + 'a,
Self: Sized { ... }
fn trace(&self, _geometry: &Geometry) { ... }
}