Allow creating matrix iter with an owned view #1315
Merged
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.
Fixes #747
First of all - thanks for this crate, it's really fun to use, except for the lack of
IntoIterator
impls on (owned) view storages.This allows overcoming the borrow checker issues when trying to do something like this:
Using the
IntoIterator
impl from this PR:I implemented this feature by extracting a common subset of
MatrixIter
andMatrixIterMut
into aRawIter
struct which erases the lifetime it is created with, and iterates over raw pointers instead of references.Then, the
MatrixIter(Mut)
structs become simple wrappers overRawIter
, but with an added lifetime constraint.It's technically possible to keep the old code (and remove most of the code added in this PR) and impl the new
new_owned
andnew_owned_mut
using a transmute fromMatrixIter<'outer, ...>
to aMatrixIter<'inner, ...>
, but I'm not even sure that's not possibly UB.Let me know what you think :)