|
31 | 31 | #![cfg_attr(not(feature = "std"), no_std)]
|
32 | 32 | #![cfg_attr(not(feature = "std"), feature(alloc))]
|
33 | 33 | #![cfg_attr(feature = "union", feature(untagged_unions))]
|
| 34 | +#![cfg_attr(feature = "specialization", feature(specialization))] |
34 | 35 | #![deny(missing_docs)]
|
35 | 36 |
|
36 | 37 |
|
@@ -1156,11 +1157,40 @@ where A::Item: Deserialize<'de>,
|
1156 | 1157 | }
|
1157 | 1158 | }
|
1158 | 1159 |
|
| 1160 | + |
| 1161 | +#[cfg(feature = "specialization")] |
| 1162 | +trait SpecFrom<A: Array, S> { |
| 1163 | + fn spec_from(slice: S) -> SmallVec<A>; |
| 1164 | +} |
| 1165 | + |
| 1166 | +#[cfg(feature = "specialization")] |
| 1167 | +impl<'a, A: Array> SpecFrom<A, &'a [A::Item]> for SmallVec<A> where A::Item: Clone { |
| 1168 | + #[inline] |
| 1169 | + default fn spec_from(slice: &'a [A::Item]) -> SmallVec<A> { |
| 1170 | + slice.into_iter().cloned().collect() |
| 1171 | + } |
| 1172 | +} |
| 1173 | + |
| 1174 | +#[cfg(feature = "specialization")] |
| 1175 | +impl<'a, A: Array> SpecFrom<A, &'a [A::Item]> for SmallVec<A> where A::Item: Copy { |
| 1176 | + #[inline] |
| 1177 | + fn spec_from(slice: &'a [A::Item]) -> SmallVec<A> { |
| 1178 | + SmallVec::from_slice(slice) |
| 1179 | + } |
| 1180 | +} |
| 1181 | + |
1159 | 1182 | impl<'a, A: Array> From<&'a [A::Item]> for SmallVec<A> where A::Item: Clone {
|
| 1183 | + #[cfg(not(feature = "specialization"))] |
1160 | 1184 | #[inline]
|
1161 | 1185 | fn from(slice: &'a [A::Item]) -> SmallVec<A> {
|
1162 | 1186 | slice.into_iter().cloned().collect()
|
1163 | 1187 | }
|
| 1188 | + |
| 1189 | + #[cfg(feature = "specialization")] |
| 1190 | + #[inline] |
| 1191 | + fn from(slice: &'a [A::Item]) -> SmallVec<A> { |
| 1192 | + SmallVec::spec_from(slice) |
| 1193 | + } |
1164 | 1194 | }
|
1165 | 1195 |
|
1166 | 1196 | impl<A: Array> From<Vec<A::Item>> for SmallVec<A> {
|
|
0 commit comments