#[cfg(feature = "simd_assets")]
pub use crate::indicators::simd_indicators::by_asset::ef::indicator_by_assets;
use crate::indicators::simd_indicators::simd_types::F64Constants;
#[cfg(feature = "simd_options")]
pub use crate::indicators::simd_indicators::by_option::ef::indicator_by_options;
use std::simd::{cmp::SimdPartialEq, num::SimdFloat, Select, Simd};
#[inline(always)]
pub fn calc_simd<const N: usize>(
sum: &mut Simd<f64, N>,
values: (Simd<f64, N>, Simd<f64, N>, Simd<f64, N>, Simd<f64, N>),
) -> Simd<f64, N> {
let (value, prev_value, last_value, old_value) = values;
*sum += (value - prev_value).abs() - (last_value - old_value).abs();
let mask = sum.simd_ne(F64Constants::ZERO);
mask.select(
(value - last_value).abs() / *sum, F64Constants::ZERO, )
}