polyfill: Rewrite as_chunks
/as_chunks_mut
/flatten
/flatten_mut
.
#2287
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.
Define new types
AsChunks<T,N>
&AsChunksMut<T,N>
that act like&[[T; N]]
and&mut [[T; N]]
, respectively. Although there is a ton of boilerplate to do this, the advantage is we eliminate theunsafe
in the implementations ofas_chunks
andas_chunks_mut
, respectively.It turns out we only have
flatten
/flatten_mut
to undo the effects ofas_chunks
/as_chunks_mut
. The new polyfills have a very natural implementation of flattening: just return the inner slice. Thus, we eliminate the prior use ofunsafe
in flattening easily.core
renamedflatten
andflatten_mut
toas_flattened
andas_flattened_mut
, respectively. Use the new naming.Move
as_chunks
and related machinery into its own file, and do the same foras_chunks_mut
. Then we can more easily compare the two implementations for (in)consistency.