diff --git a/src/binary_heap.rs b/src/binary_heap.rs index bec7d1f4..fa3c0598 100644 --- a/src/binary_heap.rs +++ b/src/binary_heap.rs @@ -273,12 +273,21 @@ where /// assert_eq!(heap.peek(), Some(&5)); /// ``` pub fn push(&mut self, item: T) -> Result<(), T> { - let old_len = self.len(); - self.data.push(item)?; - self.sift_up(0, old_len); + if self.data.is_full() { + return Err(item); + } + + unsafe { self.push_unchecked(item) } Ok(()) } + /// Pushes an item onto the binary heap without first checking if it's full. + pub unsafe fn push_unchecked(&mut self, item: T) { + let old_len = self.len(); + self.data.push_unchecked(item); + self.sift_up(0, old_len); + } + /* Private API */ fn sift_down_to_bottom(&mut self, mut pos: usize) { let end = self.len();