From d0ebfcd51fff98a4fba905820efeaa1f54ecb0c6 Mon Sep 17 00:00:00 2001 From: Niklas Fiekas Date: Sat, 13 May 2017 18:16:06 +0200 Subject: [PATCH] Factor out push_unchecked() --- src/lib.rs | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 1bbf379..97dad1e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -164,10 +164,8 @@ impl ArrayVec { /// ``` pub fn push(&mut self, element: A::Item) -> Option { if self.len() < A::capacity() { - let len = self.len(); unsafe { - ptr::write(self.get_unchecked_mut(len), element); - self.set_len(len + 1); + self.push_unchecked(element); } None } else { @@ -175,6 +173,34 @@ impl ArrayVec { } } + /// Push `element` to the end of the vector without checking the capacity. + /// + /// It is up to the caller to ensure the capacity of the vector is + /// sufficiently large. + /// + /// # Examples + /// + /// ``` + /// use arrayvec::ArrayVec; + /// + /// let mut array = ArrayVec::<[_; 2]>::new(); + /// + /// if array.len() + 2 <= array.capacity() { + /// unsafe { + /// array.push_unchecked(1); + /// array.push_unchecked(2); + /// } + /// } + /// + /// assert_eq!(&array[..], &[1, 2]); + /// ``` + #[inline] + pub unsafe fn push_unchecked(&mut self, element: A::Item) { + let len = self.len(); + ptr::write(self.get_unchecked_mut(len), element); + self.set_len(len + 1); + } + /// Insert `element` in position `index`. /// /// Shift up all elements after `index`. If any is pushed out, it is returned.