custos 0.7.0

A minimal OpenCL, WGPU, CUDA and host CPU array manipulation engine.
Documentation
use crate::{prelude::Float, Combiner, Eval};

#[cfg(not(feature = "no-std"))]
use super::ToCLSource;

pub struct Exp<C> {
    pub comb: C,
}

impl<C> Combiner for Exp<C> {}

impl<T: Float, C: Eval<T>> Eval<T> for Exp<C> {
    #[inline]
    fn eval(self) -> T {
        self.comb.eval().exp()
    }
}

#[cfg(not(feature = "no-std"))]
impl<C: ToCLSource> ToCLSource for Exp<C> {
    #[inline]
    fn to_cl_source(&self) -> String {
        format!("exp({})", self.comb.to_cl_source())
    }
}

pub struct Sin<C> {
    pub comb: C,
}

impl<C> Combiner for Sin<C> {}

impl<T: Float, C: Eval<T>> Eval<T> for Sin<C> {
    #[inline]
    fn eval(self) -> T {
        self.comb.eval().sin()
    }
}

#[cfg(not(feature = "no-std"))]
impl<C: ToCLSource> ToCLSource for Sin<C> {
    #[inline]
    fn to_cl_source(&self) -> String {
        format!("sin({})", self.comb.to_cl_source())
    }
}

pub struct Cos<C> {
    pub comb: C,
}

impl<C> Combiner for Cos<C> {}

impl<T: Float, C: Eval<T>> Eval<T> for Cos<C> {
    #[inline]
    fn eval(self) -> T {
        self.comb.eval().cos()
    }
}

#[cfg(not(feature = "no-std"))]
impl<C: ToCLSource> ToCLSource for Cos<C> {
    #[inline]
    fn to_cl_source(&self) -> String {
        format!("cos({})", self.comb.to_cl_source())
    }
}

pub struct Tan<C> {
    pub comb: C,
}

impl<C> Combiner for Tan<C> {}

impl<T: Float, C: Eval<T>> Eval<T> for Tan<C> {
    #[inline]
    fn eval(self) -> T {
        self.comb.eval().tan()
    }
}

#[cfg(not(feature = "no-std"))]
impl<C: ToCLSource> ToCLSource for Tan<C> {
    #[inline]
    fn to_cl_source(&self) -> String {
        format!("tan({})", self.comb.to_cl_source())
    }
}

pub struct Neg<C> {
    pub comb: C,
}

impl<C> Combiner for Neg<C> {}

impl<T: core::ops::Neg<Output = T>, C: Eval<T>> Eval<T> for Neg<C> {
    #[inline]
    fn eval(self) -> T {
        self.comb.eval().neg()
    }
}

#[cfg(not(feature = "no-std"))]
impl<C: ToCLSource> ToCLSource for Neg<C> {
    #[inline]
    fn to_cl_source(&self) -> String {
        format!("-({})", self.comb.to_cl_source())
    }
}