Skip to main content

ComputeMethod

Trait ComputeMethod 

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

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

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

Source§

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

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>,

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>,

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>,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

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,

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,

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,

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,

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,

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,

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,

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,

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]>,

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,

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,

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,

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,