From 267d9760bd8cac4572a5e5eb1203c7a1ce688ee3 Mon Sep 17 00:00:00 2001 From: Jim Turner Date: Mon, 19 Nov 2018 16:51:01 -0500 Subject: [PATCH] Add as_ptr and as_mut_ptr methods This is useful for moving around a matrix/slice in unsafe code and for converting slices to other types (e.g. `ndarray::ArrayView`). --- src/base/matrix.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/base/matrix.rs b/src/base/matrix.rs index 91e476244..95893e224 100644 --- a/src/base/matrix.rs +++ b/src/base/matrix.rs @@ -274,6 +274,15 @@ impl> Matrix { self.data.get_unchecked(irow, icol) } + /// Returns a pointer to the start of the matrix. + /// + /// If the matrix is not empty, this pointer is guaranteed to be aligned + /// and non-null. + #[inline] + pub fn as_ptr(&self) -> *const N { + self.data.ptr() + } + /// Tests whether `self` and `rhs` are equal up to a given epsilon. /// /// See `relative_eq` from the `RelativeEq` trait for more details. @@ -550,6 +559,15 @@ impl> Matrix { MatrixIterMut::new(&mut self.data) } + /// Returns a mutable pointer to the start of the matrix. + /// + /// If the matrix is not empty, this pointer is guaranteed to be aligned + /// and non-null. + #[inline] + pub fn as_mut_ptr(&mut self) -> *mut N { + self.data.ptr_mut() + } + /// Gets a mutable reference to the i-th element of this matrix. #[inline] pub unsafe fn get_unchecked_mut(&mut self, irow: usize, icol: usize) -> &mut N {