orx_funvec/d_any/
closure.rs

1use crate::{
2    funvec_ref::FunVecRef,
3    funvec_val::FunVec,
4    index::{FromIndex, IntoIndex},
5};
6use orx_closure::{
7    Closure, ClosureOneOf2, ClosureOneOf3, ClosureOneOf4, ClosureOptRef, ClosureOptRefOneOf2,
8    ClosureOptRefOneOf3, ClosureOptRefOneOf4,
9};
10
11// val
12impl<const DIM: usize, C1, In: FromIndex<DIM>, T: Clone + Copy> FunVec<DIM, T>
13    for Closure<C1, In, Option<T>>
14{
15    #[inline(always)]
16    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
17        let index = In::from_index(index.into_index());
18        self.call(index)
19    }
20}
21impl<const DIM: usize, C1, C2, In: FromIndex<DIM>, T: Clone + Copy> FunVec<DIM, T>
22    for ClosureOneOf2<C1, C2, In, Option<T>>
23{
24    #[inline(always)]
25    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
26        let index = In::from_index(index.into_index());
27        self.call(index)
28    }
29}
30impl<const DIM: usize, C1, C2, C3, In: FromIndex<DIM>, T: Clone + Copy> FunVec<DIM, T>
31    for ClosureOneOf3<C1, C2, C3, In, Option<T>>
32{
33    #[inline(always)]
34    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
35        let index = In::from_index(index.into_index());
36        self.call(index)
37    }
38}
39impl<const DIM: usize, C1, C2, C3, C4, In: FromIndex<DIM>, T: Clone + Copy> FunVec<DIM, T>
40    for ClosureOneOf4<C1, C2, C3, C4, In, Option<T>>
41{
42    #[inline(always)]
43    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
44        let index = In::from_index(index.into_index());
45        self.call(index)
46    }
47}
48
49// ref
50impl<const DIM: usize, C1, In: FromIndex<DIM>, T: ?Sized> FunVecRef<DIM, T>
51    for ClosureOptRef<C1, In, T>
52{
53    #[inline(always)]
54    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
55        let index = In::from_index(index.into_index());
56        self.call(index)
57    }
58}
59impl<const DIM: usize, C1, C2, In: FromIndex<DIM>, T: ?Sized> FunVecRef<DIM, T>
60    for ClosureOptRefOneOf2<C1, C2, In, T>
61{
62    #[inline(always)]
63    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
64        let index = In::from_index(index.into_index());
65        self.call(index)
66    }
67}
68impl<const DIM: usize, C1, C2, C3, In: FromIndex<DIM>, T: ?Sized> FunVecRef<DIM, T>
69    for ClosureOptRefOneOf3<C1, C2, C3, In, T>
70{
71    #[inline(always)]
72    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
73        let index = In::from_index(index.into_index());
74        self.call(index)
75    }
76}
77impl<const DIM: usize, C1, C2, C3, C4, In: FromIndex<DIM>, T: ?Sized> FunVecRef<DIM, T>
78    for ClosureOptRefOneOf4<C1, C2, C3, C4, In, T>
79{
80    #[inline(always)]
81    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
82        let index = In::from_index(index.into_index());
83        self.call(index)
84    }
85}