rstsr_openblas/rayon_auto_impl/
op_ternary_arithmetic.rs

1use crate::prelude_dev::*;
2
3#[duplicate_item(
4     DeviceOpAPI       Op       func                                  ;
5    [DeviceAddAPI   ] [Add   ] [|c, a, b| { c.write(a.clone() +  b.clone()); }];
6    [DeviceSubAPI   ] [Sub   ] [|c, a, b| { c.write(a.clone() -  b.clone()); }];
7    [DeviceMulAPI   ] [Mul   ] [|c, a, b| { c.write(a.clone() *  b.clone()); }];
8    [DeviceDivAPI   ] [Div   ] [|c, a, b| { c.write(a.clone() /  b.clone()); }];
9    [DeviceRemAPI   ] [Rem   ] [|c, a, b| { c.write(a.clone() %  b.clone()); }];
10    [DeviceBitOrAPI ] [BitOr ] [|c, a, b| { c.write(a.clone() |  b.clone()); }];
11    [DeviceBitAndAPI] [BitAnd] [|c, a, b| { c.write(a.clone() &  b.clone()); }];
12    [DeviceBitXorAPI] [BitXor] [|c, a, b| { c.write(a.clone() ^  b.clone()); }];
13    [DeviceShlAPI   ] [Shl   ] [|c, a, b| { c.write(a.clone() << b.clone()); }];
14    [DeviceShrAPI   ] [Shr   ] [|c, a, b| { c.write(a.clone() >> b.clone()); }];
15)]
16impl<TA, TB, TC, D> DeviceOpAPI<TA, TB, TC, D> for DeviceRayonAutoImpl
17where
18    TA: Clone + Send + Sync + Op<TB, Output = TC>,
19    TB: Clone + Send + Sync,
20    TC: Clone + Send + Sync,
21    D: DimAPI,
22{
23    fn op_mutc_refa_refb(
24        &self,
25        c: &mut Vec<MaybeUninit<TC>>,
26        lc: &Layout<D>,
27        a: &Vec<TA>,
28        la: &Layout<D>,
29        b: &Vec<TB>,
30        lb: &Layout<D>,
31    ) -> Result<()> {
32        self.op_mutc_refa_refb_func(c, lc, a, la, b, lb, &mut func)
33    }
34
35    fn op_mutc_refa_numb(
36        &self,
37        c: &mut Vec<MaybeUninit<TC>>,
38        lc: &Layout<D>,
39        a: &Vec<TA>,
40        la: &Layout<D>,
41        b: TB,
42    ) -> Result<()> {
43        self.op_mutc_refa_numb_func(c, lc, a, la, b, &mut func)
44    }
45
46    fn op_mutc_numa_refb(
47        &self,
48        c: &mut Vec<MaybeUninit<TC>>,
49        lc: &Layout<D>,
50        a: TA,
51        b: &Vec<TB>,
52        lb: &Layout<D>,
53    ) -> Result<()> {
54        self.op_mutc_numa_refb_func(c, lc, a, b, lb, &mut func)
55    }
56}