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.
The way buffer is used in slicing is that when slicing is called, instead of copying the elements into new nmatrix struct, a nmatrix_buffer struct is created and just the elements pointer to used to create the pointer of buffer matrix which removes the copying of elements and hence preventing a copy.
Also, nmatrix_buffer points to the original matrix and uses the original shape to create strides which are used in conjunction with buffer elements starting pointer to correctly access the sliced matrix elements from the original matrix elements array. This makes the sliced matrix as a view to the original matrix and one can change the sliced matrix elements and same change can be seen in the original matrix elements.
One can also create a view by doing a slice on a sliced matrix and internally the nmatrix_buffer would be created from nmatrix_buffer of given sliced matrix and the original matrix struct which is accessed from the given nmatrix_buffer.