diff --git a/src/array.rs b/src/array.rs index ad18c79..ed49211 100644 --- a/src/array.rs +++ b/src/array.rs @@ -20,10 +20,8 @@ pub unsafe trait Array { type Index: Index; /// The array's element capacity const CAPACITY: usize; - #[doc(hidden)] - fn as_ptr(&self) -> *const Self::Item; - #[doc(hidden)] - fn capacity() -> usize; + fn as_slice(&self) -> &[Self::Item]; + fn as_mut_slice(&mut self) -> &mut [Self::Item]; } pub trait Index : PartialEq + Copy { @@ -31,19 +29,6 @@ pub trait Index : PartialEq + Copy { fn from(usize) -> Self; } -use std::slice::{from_raw_parts}; - -pub trait ArrayExt : Array { - #[inline(always)] - fn as_slice(&self) -> &[Self::Item] { - unsafe { - from_raw_parts(self.as_ptr(), Self::capacity()) - } - } -} - -impl ArrayExt for A where A: Array { } - impl Index for () { #[inline(always)] fn to_usize(self) -> usize { 0 } @@ -93,11 +78,11 @@ macro_rules! fix_array_impl { type Index = $index_type; const CAPACITY: usize = $len; #[doc(hidden)] - #[inline(always)] - fn as_ptr(&self) -> *const T { self as *const _ as *const _ } + #[inline] + fn as_slice(&self) -> &[Self::Item] { self } #[doc(hidden)] - #[inline(always)] - fn capacity() -> usize { $len } + #[inline] + fn as_mut_slice(&mut self) -> &mut [Self::Item] { self } } ) } diff --git a/src/array_string.rs b/src/array_string.rs index d83b463..475977b 100644 --- a/src/array_string.rs +++ b/src/array_string.rs @@ -9,7 +9,7 @@ use std::str::FromStr; use std::str::Utf8Error; use std::slice; -use array::{Array, ArrayExt}; +use array::Array; use array::Index; use CapacityError; use char::encode_utf8; diff --git a/src/lib.rs b/src/lib.rs index f27e3b6..be734c0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -155,7 +155,7 @@ impl ArrayVec { /// assert_eq!(array.capacity(), 3); /// ``` #[inline] - pub fn capacity(&self) -> usize { A::capacity() } + pub fn capacity(&self) -> usize { A::CAPACITY } /// Return if the `ArrayVec` is completely filled. ///