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}