orx_funvec/d3/
std.rs

1use crate::{funvec_ref::FunVecRef, funvec_val::FunVec, index::IntoIndex};
2use std::collections::{BTreeMap, HashMap};
3
4const DIM: usize = 3;
5const LOW_DIM: usize = DIM - 1;
6
7// val
8impl<T: Clone + Copy, V1: FunVec<LOW_DIM, T>> FunVec<DIM, T> for Vec<V1> {
9    #[inline(always)]
10    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
11        let [i, j, k] = index.into_index();
12        self.get(i).and_then(|x| x.at([j, k]))
13    }
14}
15impl<const N: usize, T: Clone + Copy, V1: FunVec<LOW_DIM, T>> FunVec<DIM, T> for [V1; N] {
16    #[inline(always)]
17    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
18        let [i, j, k] = index.into_index();
19        self.get(i).and_then(|x| x.at([j, k]))
20    }
21}
22
23impl<T: Clone + Copy, V1: FunVec<LOW_DIM, T>> FunVec<DIM, T> for HashMap<usize, V1> {
24    #[inline(always)]
25    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
26        let [i, j, k] = index.into_index();
27        self.get(&i).and_then(|x| x.at([j, k]))
28    }
29}
30impl<T: Clone + Copy, V1: FunVec<LOW_DIM, T>> FunVec<DIM, T> for BTreeMap<usize, V1> {
31    #[inline(always)]
32    fn at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<T> {
33        let [i, j, k] = index.into_index();
34        self.get(&i).and_then(|x| x.at([j, k]))
35    }
36}
37
38// ref
39impl<T: Clone + Copy, V1: FunVecRef<LOW_DIM, T>> FunVecRef<DIM, T> for Vec<V1> {
40    #[inline(always)]
41    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
42        let [i, j, k] = index.into_index();
43        self.get(i).and_then(|x| x.ref_at([j, k]))
44    }
45}
46impl<const N: usize, T, V1: FunVecRef<LOW_DIM, T>> FunVecRef<DIM, T> for [V1; N] {
47    #[inline(always)]
48    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
49        let [i, j, k] = index.into_index();
50        self.get(i).and_then(|x| x.ref_at([j, k]))
51    }
52}
53
54impl<T, V1: FunVecRef<LOW_DIM, T>> FunVecRef<DIM, T> for HashMap<usize, V1> {
55    #[inline(always)]
56    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
57        let [i, j, k] = index.into_index();
58        self.get(&i).and_then(|x| x.ref_at([j, k]))
59    }
60}
61impl<T, V1: FunVecRef<LOW_DIM, T>> FunVecRef<DIM, T> for BTreeMap<usize, V1> {
62    #[inline(always)]
63    fn ref_at<Idx: IntoIndex<DIM>>(&self, index: Idx) -> Option<&T> {
64        let [i, j, k] = index.into_index();
65        self.get(&i).and_then(|x| x.ref_at([j, k]))
66    }
67}