nullvec/generic/
array_impl_slicer.rs

1use super::{Array, Scalar};
2use traits::Slicer;
3
4impl Slicer for Array {
5    type Scalar = Scalar;
6
7    fn len(&self) -> usize {
8        match self {
9            &Array::Int64Array(ref vals) => vals.len(),
10            &Array::Int32Array(ref vals) => vals.len(),
11            &Array::Int16Array(ref vals) => vals.len(),
12            &Array::Int8Array(ref vals) => vals.len(),
13            &Array::IsizeArray(ref vals) => vals.len(),
14            &Array::UInt64Array(ref vals) => vals.len(),
15            &Array::UInt32Array(ref vals) => vals.len(),
16            &Array::UInt16Array(ref vals) => vals.len(),
17            &Array::UInt8Array(ref vals) => vals.len(),
18            &Array::UsizeArray(ref vals) => vals.len(),
19            &Array::Float64Array(ref vals) => vals.len(),
20            &Array::Float32Array(ref vals) => vals.len(),
21            &Array::BoolArray(ref vals) => vals.len(),
22            &Array::StringArray(ref vals) => vals.len(),
23        }
24    }
25
26    fn iloc(&self, location: &usize) -> Self::Scalar {
27        match self {
28            &Array::Int64Array(ref vals) => vals.iloc(location).into(),
29            &Array::Int32Array(ref vals) => vals.iloc(location).into(),
30            &Array::Int16Array(ref vals) => vals.iloc(location).into(),
31            &Array::Int8Array(ref vals) => vals.iloc(location).into(),
32            &Array::IsizeArray(ref vals) => vals.iloc(location).into(),
33            &Array::UInt64Array(ref vals) => vals.iloc(location).into(),
34            &Array::UInt32Array(ref vals) => vals.iloc(location).into(),
35            &Array::UInt16Array(ref vals) => vals.iloc(location).into(),
36            &Array::UInt8Array(ref vals) => vals.iloc(location).into(),
37            &Array::UsizeArray(ref vals) => vals.iloc(location).into(),
38            &Array::Float64Array(ref vals) => vals.iloc(location).into(),
39            &Array::Float32Array(ref vals) => vals.iloc(location).into(),
40            &Array::BoolArray(ref vals) => vals.iloc(location).into(),
41            &Array::StringArray(ref vals) => vals.iloc(location).into(),
42        }
43    }
44
45    unsafe fn iloc_unchecked(&self, location: &usize) -> Self::Scalar {
46        match self {
47            &Array::Int64Array(ref vals) => vals.iloc_unchecked(location).into(),
48            &Array::Int32Array(ref vals) => vals.iloc_unchecked(location).into(),
49            &Array::Int16Array(ref vals) => vals.iloc_unchecked(location).into(),
50            &Array::Int8Array(ref vals) => vals.iloc_unchecked(location).into(),
51            &Array::IsizeArray(ref vals) => vals.iloc_unchecked(location).into(),
52            &Array::UInt64Array(ref vals) => vals.iloc_unchecked(location).into(),
53            &Array::UInt32Array(ref vals) => vals.iloc_unchecked(location).into(),
54            &Array::UInt16Array(ref vals) => vals.iloc_unchecked(location).into(),
55            &Array::UInt8Array(ref vals) => vals.iloc_unchecked(location).into(),
56            &Array::UsizeArray(ref vals) => vals.iloc_unchecked(location).into(),
57            &Array::Float64Array(ref vals) => vals.iloc_unchecked(location).into(),
58            &Array::Float32Array(ref vals) => vals.iloc_unchecked(location).into(),
59            &Array::BoolArray(ref vals) => vals.iloc_unchecked(location).into(),
60            &Array::StringArray(ref vals) => vals.iloc_unchecked(location).into(),
61        }
62    }
63
64    fn ilocs(&self, locations: &[usize]) -> Self {
65        match self {
66            &Array::Int64Array(ref vals) => Array::Int64Array(vals.ilocs(locations)),
67            &Array::Int32Array(ref vals) => Array::Int32Array(vals.ilocs(locations)),
68            &Array::Int16Array(ref vals) => Array::Int16Array(vals.ilocs(locations)),
69            &Array::Int8Array(ref vals) => Array::Int8Array(vals.ilocs(locations)),
70            &Array::IsizeArray(ref vals) => Array::IsizeArray(vals.ilocs(locations)),
71            &Array::UInt64Array(ref vals) => Array::UInt64Array(vals.ilocs(locations)),
72            &Array::UInt32Array(ref vals) => Array::UInt32Array(vals.ilocs(locations)),
73            &Array::UInt16Array(ref vals) => Array::UInt16Array(vals.ilocs(locations)),
74            &Array::UInt8Array(ref vals) => Array::UInt8Array(vals.ilocs(locations)),
75            &Array::UsizeArray(ref vals) => Array::UsizeArray(vals.ilocs(locations)),
76            &Array::Float64Array(ref vals) => Array::Float64Array(vals.ilocs(locations)),
77            &Array::Float32Array(ref vals) => Array::Float32Array(vals.ilocs(locations)),
78            &Array::BoolArray(ref vals) => Array::BoolArray(vals.ilocs(locations)),
79            &Array::StringArray(ref vals) => Array::StringArray(vals.ilocs(locations)),
80        }
81    }
82
83    unsafe fn ilocs_unchecked(&self, locations: &[usize]) -> Self {
84        match self {
85            &Array::Int64Array(ref vals) => Array::Int64Array(vals.ilocs_unchecked(locations)),
86            &Array::Int32Array(ref vals) => Array::Int32Array(vals.ilocs_unchecked(locations)),
87            &Array::Int16Array(ref vals) => Array::Int16Array(vals.ilocs_unchecked(locations)),
88            &Array::Int8Array(ref vals) => Array::Int8Array(vals.ilocs_unchecked(locations)),
89            &Array::IsizeArray(ref vals) => Array::IsizeArray(vals.ilocs_unchecked(locations)),
90            &Array::UInt64Array(ref vals) => Array::UInt64Array(vals.ilocs_unchecked(locations)),
91            &Array::UInt32Array(ref vals) => Array::UInt32Array(vals.ilocs_unchecked(locations)),
92            &Array::UInt16Array(ref vals) => Array::UInt16Array(vals.ilocs_unchecked(locations)),
93            &Array::UInt8Array(ref vals) => Array::UInt8Array(vals.ilocs_unchecked(locations)),
94            &Array::UsizeArray(ref vals) => Array::UsizeArray(vals.ilocs_unchecked(locations)),
95            &Array::Float64Array(ref vals) => Array::Float64Array(vals.ilocs_unchecked(locations)),
96            &Array::Float32Array(ref vals) => Array::Float32Array(vals.ilocs_unchecked(locations)),
97            &Array::BoolArray(ref vals) => Array::BoolArray(vals.ilocs_unchecked(locations)),
98            &Array::StringArray(ref vals) => Array::StringArray(vals.ilocs_unchecked(locations)),
99        }
100    }
101
102    fn ilocs_forced(&self, locations: &[usize]) -> Self {
103        match self {
104            &Array::Int64Array(ref vals) => Array::Int64Array(vals.ilocs_forced(locations)),
105            &Array::Int32Array(ref vals) => Array::Int32Array(vals.ilocs_forced(locations)),
106            &Array::Int16Array(ref vals) => Array::Int16Array(vals.ilocs_forced(locations)),
107            &Array::Int8Array(ref vals) => Array::Int8Array(vals.ilocs_forced(locations)),
108            &Array::IsizeArray(ref vals) => Array::IsizeArray(vals.ilocs_forced(locations)),
109            &Array::UInt64Array(ref vals) => Array::UInt64Array(vals.ilocs_forced(locations)),
110            &Array::UInt32Array(ref vals) => Array::UInt32Array(vals.ilocs_forced(locations)),
111            &Array::UInt16Array(ref vals) => Array::UInt16Array(vals.ilocs_forced(locations)),
112            &Array::UInt8Array(ref vals) => Array::UInt8Array(vals.ilocs_forced(locations)),
113            &Array::UsizeArray(ref vals) => Array::UsizeArray(vals.ilocs_forced(locations)),
114            &Array::Float64Array(ref vals) => Array::Float64Array(vals.ilocs_forced(locations)),
115            &Array::Float32Array(ref vals) => Array::Float32Array(vals.ilocs_forced(locations)),
116            &Array::BoolArray(ref vals) => Array::BoolArray(vals.ilocs_forced(locations)),
117            &Array::StringArray(ref vals) => Array::StringArray(vals.ilocs_forced(locations)),
118        }
119    }
120
121    fn blocs(&self, flags: &[bool]) -> Self {
122        match self {
123            &Array::Int64Array(ref vals) => Array::Int64Array(vals.blocs(flags)),
124            &Array::Int32Array(ref vals) => Array::Int32Array(vals.blocs(flags)),
125            &Array::Int16Array(ref vals) => Array::Int16Array(vals.blocs(flags)),
126            &Array::Int8Array(ref vals) => Array::Int8Array(vals.blocs(flags)),
127            &Array::IsizeArray(ref vals) => Array::IsizeArray(vals.blocs(flags)),
128            &Array::UInt64Array(ref vals) => Array::UInt64Array(vals.blocs(flags)),
129            &Array::UInt32Array(ref vals) => Array::UInt32Array(vals.blocs(flags)),
130            &Array::UInt16Array(ref vals) => Array::UInt16Array(vals.blocs(flags)),
131            &Array::UInt8Array(ref vals) => Array::UInt8Array(vals.blocs(flags)),
132            &Array::UsizeArray(ref vals) => Array::UsizeArray(vals.blocs(flags)),
133            &Array::Float64Array(ref vals) => Array::Float64Array(vals.blocs(flags)),
134            &Array::Float32Array(ref vals) => Array::Float32Array(vals.blocs(flags)),
135            &Array::BoolArray(ref vals) => Array::BoolArray(vals.blocs(flags)),
136            &Array::StringArray(ref vals) => Array::StringArray(vals.blocs(flags)),
137        }
138    }
139}