pub trait ComputeMethod<Storage> {
    type Output: IntoIterator;

    // Required method
    fn compute(&mut self, storage: Storage) -> Self::Output;
}
Expand description

Trait to perform a computation of values between objects contained in a storage of type S.

§Example


struct AccelerationCalculator;

impl ComputeMethod<&[PointMass<Vec3, f32>]> for AccelerationCalculator {
    type Output = Vec<Vec3>;
     
    fn compute(&mut self, storage: &[PointMass<Vec3, f32>]) -> Self::Output {
        // ...
    }
}

Required Associated Types§

source

type Output: IntoIterator

IntoIterator that yields the computed values.

Required Methods§

source

fn compute(&mut self, storage: Storage) -> Self::Output

Performs the computation between objects contained in the storage.

Implementors§

source§

impl ComputeMethod<ParticleSystem<'_, Vec3, f32, [PointMass<Vec3, f32>]>> for BruteForce<'_>

§

type Output = Vec<Vec3>

source§

impl ComputeMethod<ParticleSystem<'_, Vec3, f32, [PointMass<Vec3, f32>]>> for BruteForceSoftened<'_>

§

type Output = Vec<Vec3>

source§

impl<V, S> ComputeMethod<&ParticleOrdered<V, S>> for BruteForcePairs
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<&ParticleOrdered<V, S>> for BruteForcePairsSoftened<S>
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<&[PointMass<V, S>]> for BruteForcePairs
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<&[PointMass<V, S>]> for BruteForcePairsSoftened<S>
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<ParticleReordered<'_, V, S>> for BruteForcePairs
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<ParticleReordered<'_, V, S>> for BruteForcePairsSoftened<S>
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::parallel::BruteForceScalar
where V: FloatVector<Float = S> + Copy + Send + Sync, S: Float + Copy + Sync,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::parallel::BruteForceSoftenedScalar<S>
where V: FloatVector<Float = S> + Copy + Send + Sync, S: Float + Copy + Sync,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::sequential::BruteForceScalar
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::sequential::BruteForceSoftenedScalar<S>
where V: FloatVector<Float = S> + Copy, S: Float + Copy,

§

type Output = Vec<V>

source§

impl<V, S, C, O> ComputeMethod<&ParticleOrdered<V, S>> for C
where O: IntoIterator, for<'a> C: ComputeMethod<ParticleSliceSystem<'a, V, S>, Output = O>,

§

type Output = O

source§

impl<V, S, C, O> ComputeMethod<&ParticleReordered<'_, V, S>> for C
where O: IntoIterator, for<'a> C: ComputeMethod<ParticleSliceSystem<'a, V, S>, Output = O>,

§

type Output = O

source§

impl<V, S, C, O> ComputeMethod<&[PointMass<V, S>]> for C
where O: IntoIterator, for<'a> C: ComputeMethod<ParticleSliceSystem<'a, V, S>, Output = O>,

§

type Output = O

source§

impl<const L: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::parallel::BruteForceSIMD<L>
where V: SIMDElement<L> + Zero + Copy + Send + Sync, S: SIMDElement<L> + Float + Copy + Sync, V::SIMD: FloatVector<Float = S::SIMD> + Reduce + Copy + Send + Sync, S::SIMD: Float + BitAnd<Output = S::SIMD> + CmpNe<Output = S::SIMD> + Copy + Sync,

§

type Output = Vec<V>

source§

impl<const L: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::parallel::BruteForceSoftenedSIMD<L, S>
where V: SIMDElement<L> + Zero + Copy + Send + Sync, S: SIMDElement<L> + Float + Copy + Sync, V::SIMD: FloatVector<Float = S::SIMD> + Reduce + Copy + Send + Sync, S::SIMD: Float + BitAnd<Output = S::SIMD> + CmpNe<Output = S::SIMD> + Copy + Sync,

§

type Output = Vec<V>

source§

impl<const L: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::sequential::BruteForceSIMD<L>
where V: SIMDElement<L> + Zero + Copy, S: SIMDElement<L> + Float + Copy, V::SIMD: FloatVector<Float = S::SIMD> + Reduce + Copy, S::SIMD: Float + BitAnd<Output = S::SIMD> + CmpNe<Output = S::SIMD> + Copy,

§

type Output = Vec<V>

source§

impl<const L: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for particular::compute_method::sequential::BruteForceSoftenedSIMD<L, S>
where V: SIMDElement<L> + Zero + Copy, S: SIMDElement<L> + Float + Copy, V::SIMD: FloatVector<Float = S::SIMD> + Reduce + Copy, S::SIMD: Float + BitAnd<Output = S::SIMD> + CmpNe<Output = S::SIMD> + Copy,

§

type Output = Vec<V>

source§

impl<const X: usize, const D: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, ParticleTree<X, D, V, S>>> for particular::compute_method::parallel::BarnesHut<S>
where V: FloatVector<Float = S> + Copy + Send + Sync, S: Float + PartialOrd + Copy + Sync,

§

type Output = Vec<V>

source§

impl<const X: usize, const D: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, ParticleTree<X, D, V, S>>> for particular::compute_method::parallel::BarnesHutSoftened<S>
where V: FloatVector<Float = S> + Copy + Send + Sync, S: Float + PartialOrd + Copy + Sync,

§

type Output = Vec<V>

source§

impl<const X: usize, const D: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, ParticleTree<X, D, V, S>>> for particular::compute_method::sequential::BarnesHut<S>
where V: FloatVector<Float = S> + Copy, S: Float + PartialOrd + Copy,

§

type Output = Vec<V>

source§

impl<const X: usize, const D: usize, V, S> ComputeMethod<ParticleSystem<'_, V, S, ParticleTree<X, D, V, S>>> for particular::compute_method::sequential::BarnesHutSoftened<S>
where V: FloatVector<Float = S> + Copy, S: Float + PartialOrd + Copy,

§

type Output = Vec<V>

source§

impl<const X: usize, const D: usize, V, S, C, O> ComputeMethod<ParticleSystem<'_, V, S, [PointMass<V, S>]>> for C
where O: IntoIterator, for<'a> C: ComputeMethod<ParticleTreeSystem<'a, X, D, V, S>, Output = O>, V: Copy + FloatVector<Float = S, Array = [S; D]>, S: Copy + Float + Sum + PartialOrd + FromPrimitive<usize>, BoundingBox<[S; D]>: SubDivide<Division = [BoundingBox<[S; D]>; X]>,

§

type Output = O