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
11impl<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
49impl<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}