orx_parallel/infallible/fun/map/
basic.rs1use crate::infallible::fun::Map;
2use core::marker::PhantomData;
3
4pub struct FnMap<I, O, F: Fn(I) -> O + Copy + Send>(F, PhantomData<I>);
6
7impl<I, O, F: Fn(I) -> O + Copy + Send> Clone for FnMap<I, O, F> {
8 fn clone(&self) -> Self {
9 *self
10 }
11}
12
13impl<I, O, F: Fn(I) -> O + Copy + Send> Copy for FnMap<I, O, F> {}
14
15unsafe impl<I, O, F: Fn(I) -> O + Copy + Send> Send for FnMap<I, O, F> {}
16
17impl<I, O, F: Fn(I) -> O + Copy + Send> FnMap<I, O, F> {
18 pub fn new(f: F) -> Self {
20 Self(f, PhantomData)
21 }
22}
23
24impl<I, O, F: Fn(I) -> O + Copy + Send> Map for FnMap<I, O, F> {
25 type I = I;
26
27 type O = O;
28
29 #[inline(always)]
30 fn map(&self, i: Self::I) -> Self::O {
31 (self.0)(i)
32 }
33}