Implement From<[T; M]> for SmallVec<T, N>
for all M, N
(v2)
#338
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
(First commit removes the unnecessary
T: Clone
bound fromFrom<array>
andFrom<Vec>
impls that weren't there in v1.)Allow using
SmallVec::from(array)
andarray.into()
like you can withVec
, even whenarray.len() != SmallVec::inline_capacity()
. If the source length is longer than the smallvec's inline capacity, it will use heap-allocation, otherwise it will use inline capacity.const-eval limitations
Ideally, the implementation would be as below to explicitly optimize for the three different cases even in debug mode, but it doesn't work because
[T; M]
and[T; N]
are still considered different types.However, with
opt-level >= 1
, Rust appears to reliably compile this PR to either a basically just memcpy (for M <= N) or an alloc and a memcpy (for M > N).Backported to v2 as #339