From 664658760a3ec04743ad836abfdfaa60025ac877 Mon Sep 17 00:00:00 2001 From: sebcrozet Date: Thu, 13 Sep 2018 05:45:14 +0200 Subject: [PATCH 1/2] Remove the Deref implementation for MatrixRef. Fix #380. --- CHANGELOG.md | 10 +++++++--- src/base/vec_storage.rs | 14 +++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fcfbfd5a..d76638f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,7 +35,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). * Implement `Extend>` for matrices with dynamic storage. This will concatenate the columns of both matrices. * Implement `Into` for the `MatrixVec` storage. * Implement `Hash` for all matrices. - + * Add a `.len()` method to retrieve the size of a `MatrixVec`. + ### Modified * The orthographic projection no longer require that `bottom < top`, that `left < right`, and that `znear < zfar`. The only restriction now ith that they must not be equal (in which case the projection would be singular). @@ -46,11 +47,14 @@ This project adheres to [Semantic Versioning](http://semver.org/). * Renamed `.unwrap()` to `.into_inner()` for geometric types that wrap another type. This is for the case of `Unit`, `Transform`, `Orthographic3`, `Perspective3`, `Rotation`. * Deprecate several functions at the root of the crate (replaced by methods). - + +### Removed + * Remove the `Deref` impl for `MatrixVec` as it could cause hard-to-understand compilation errors. + ### nalgebra-glm * Add several alternative projection computations, e.g., `ortho_lh`, `ortho_lh_no`, `perspective_lh`, etc. * Add features matching those of nalgebra, in particular: `serde-serialize`, `abmonation-serialize`, std` (enabled by default). - + ## [0.16.0] All dependencies have been updated to their latest versions. diff --git a/src/base/vec_storage.rs b/src/base/vec_storage.rs index b5005c0c..246c3515 100644 --- a/src/base/vec_storage.rs +++ b/src/base/vec_storage.rs @@ -1,6 +1,5 @@ #[cfg(feature = "abomonation-serialize")] use std::io::{Result as IOResult, Write}; -use std::ops::Deref; #[cfg(all(feature = "alloc", not(feature = "std")))] use alloc::vec::Vec; @@ -81,14 +80,11 @@ impl VecStorage { self.data } -} - -impl Deref for VecStorage { - type Target = Vec; + /// The number of elements on the underlying vector. #[inline] - fn deref(&self) -> &Self::Target { - &self.data + pub fn len(&self) -> usize { + self.data.len() } } @@ -145,7 +141,7 @@ where DefaultAllocator: Allocator #[inline] fn as_slice(&self) -> &[N] { - &self[..] + &self.data } } @@ -189,7 +185,7 @@ where DefaultAllocator: Allocator #[inline] fn as_slice(&self) -> &[N] { - &self[..] + &self.data } } From f52bd4be3dc0039f311cdf566db0a3ff1d112a1f Mon Sep 17 00:00:00 2001 From: sebcrozet Date: Sun, 3 Feb 2019 11:47:23 +0100 Subject: [PATCH 2/2] Rename VecStorage::data/data_mut to ::as_vec/as_vec_mut --- src/base/construction.rs | 2 +- src/base/vec_storage.rs | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/base/construction.rs b/src/base/construction.rs index 05bb4b16..aeee6121 100644 --- a/src/base/construction.rs +++ b/src/base/construction.rs @@ -270,7 +270,7 @@ where DefaultAllocator: Allocator /// let vec_ptr = vec.as_ptr(); /// /// let matrix = Matrix::from_vec_generic(Dynamic::new(vec.len()), U1, vec); - /// let matrix_storage_ptr = matrix.data.as_ptr(); + /// let matrix_storage_ptr = matrix.data.as_vec().as_ptr(); /// /// // `matrix` is backed by exactly the same `Vec` as it was constructed from. /// assert_eq!(matrix_storage_ptr, vec_ptr); diff --git a/src/base/vec_storage.rs b/src/base/vec_storage.rs index 246c3515..4a852f25 100644 --- a/src/base/vec_storage.rs +++ b/src/base/vec_storage.rs @@ -50,15 +50,16 @@ impl VecStorage { /// The underlying data storage. #[inline] - pub fn data(&self) -> &Vec { + pub fn as_vec(&self) -> &Vec { &self.data } /// The underlying mutable data storage. /// - /// This is unsafe because this may cause UB if the vector is modified by the user. + /// This is unsafe because this may cause UB if the size of the vector is changed + /// by the user. #[inline] - pub unsafe fn data_mut(&mut self) -> &mut Vec { + pub unsafe fn as_vec_mut(&mut self) -> &mut Vec { &mut self.data }