diff --git a/src/_macros.rs b/src/_macros.rs index 748f8ba3b..9947d401c 100644 --- a/src/_macros.rs +++ b/src/_macros.rs @@ -1016,14 +1016,7 @@ macro_rules! build_table_column_slice_getter { ($(#[$attr:meta])* => $column: ident, $name: ident, $cast: ty) => { $(#[$attr])* pub fn $name(&self) -> &[$cast] { - // Caveat: num_rows is u64 but we need usize - // The conversion is fallible but unlikely. - let num_rows = - usize::try_from(self.num_rows()).expect("conversion of num_rows to usize failed"); - let ptr = self.as_ref().$column as *const $cast; - // SAFETY: tables are initialzed, num rows comes - // from the C back end. - unsafe { std::slice::from_raw_parts(ptr, num_rows) } + $crate::sys::generate_slice(self.as_ref().$column, self.num_rows()) } }; } @@ -1032,14 +1025,7 @@ macro_rules! build_table_column_slice_mut_getter { ($(#[$attr:meta])* => $column: ident, $name: ident, $cast: ty) => { $(#[$attr])* pub fn $name(&mut self) -> &mut [$cast] { - // Caveat: num_rows is u64 but we need usize - // The conversion is fallible but unlikely. - let num_rows = - usize::try_from(self.num_rows()).expect("conversion of num_rows to usize failed"); - let ptr = self.as_ref().$column as *mut $cast; - // SAFETY: tables are initialzed, num rows comes - // from the C back end. - unsafe { std::slice::from_raw_parts_mut(ptr, num_rows) } + $crate::sys::generate_slice_mut(self.as_ref().$column, self.num_rows()) } }; } diff --git a/src/node_table.rs b/src/node_table.rs index e2c6d5b68..84127ab92 100644 --- a/src/node_table.rs +++ b/src/node_table.rs @@ -224,22 +224,12 @@ impl NodeTable { #[deprecated(since = "0.12.0", note = "use flags_slice_mut instead")] pub fn flags_array_mut(&mut self) -> &mut [NodeFlags] { - unsafe { - std::slice::from_raw_parts_mut( - self.as_ref().flags.cast::(), - usize::try_from(self.as_ref().num_rows).unwrap_or(0), - ) - } + sys::generate_slice_mut(self.as_ref().flags, self.num_rows()) } #[deprecated(since = "0.12.0", note = "use time_slice_mut instead")] pub fn time_array_mut(&mut self) -> &mut [Time] { - unsafe { - std::slice::from_raw_parts_mut( - self.as_ref().time.cast::