11diff --git a/src/arrayvec_copy_generated.rs b/src/arrayvec_copy.rs 
2- index 2c32eed..ada0728  100644
2+ index c4be864..ec5224d  100644
33--- a/src/arrayvec_copy_generated.rs 
44+++ b/src/arrayvec_copy.rs 
5- @@ -14,7 +14,6 @@  use std::fmt;
6-  #[cfg(feature="std")]
7-  use std::io;
5+ @@ -27,6 +27,9 @@  use crate::utils::MakeMaybeUninit;
86
9- - use std::mem::ManuallyDrop;
10-  use std::mem::MaybeUninit;
11-  
12-  #[cfg(feature="serde")]
13- @@ -25,7 +24,7 @@  use crate::errors::CapacityError;
14-  use crate::arrayvec_impl::ArrayVecImpl;
15-  use crate::utils::MakeMaybeUninit;
16-  
17- - /// A vector with a fixed capacity.
18- + /// A vector with a fixed capacity which implements `Copy` and its elemenents are constrained to also be `Copy`.
7+  /// A vector with a fixed capacity.
198 ///
9+ + /// **Its only difference to [`ArrayVec`](crate::ArrayVec) is that its elements
10+ + /// are constrained to be `Copy` which allows it to be `Copy` itself.**
11+ + ///
2012 /// The `ArrayVecCopy` is a vector backed by a fixed size array. It keeps track of
2113 /// the number of initialized elements. The `ArrayVecCopy<T, CAP>` is parameterized
22- @@ -46,14 +45,6 @@  pub struct ArrayVecCopy<T: Copy, const CAP: usize> {
14+  /// by `T` for the element type and `CAP` for the maximum capacity.
15+ @@ -46,14 +49,6 @@  pub struct ArrayVecCopy<T: Copy, const CAP: usize> {
2316     xs: [MaybeUninit<T>; CAP],
2417 }
2518
@@ -34,80 +27,7 @@ index 2c32eed..ada0728 100644
3427 macro_rules! panic_oob {
3528     ($method_name:expr, $index:expr, $len:expr) => {
3629         panic!(concat!("ArrayVecCopy::", $method_name, ": index {} is out of bounds in vector of length {}"),
37- @@ -231,8 +222,7 @@  impl<T: Copy, const CAP: usize> ArrayVecCopy<T, CAP> {
38-          ArrayVecImpl::push_unchecked(self, element)
39-      }
40-  
41- -     /// Shortens the vector, keeping the first `len` elements and dropping
42- -     /// the rest.
43- +     /// Shortens the vector, keeping the first `len` elements.
44-      ///
45-      /// If `len` is greater than the vector’s current length this has no
46-      /// effect.
47- @@ -499,7 +489,7 @@  impl<T: Copy, const CAP: usize> ArrayVecCopy<T, CAP> {
48-          let mut g = BackshiftOnDrop { v: self, processed_len: 0, deleted_cnt: 0, original_len };
49-  
50-          #[inline(always)]
51- -         fn process_one<F: FnMut(&mut T) -> bool, T, const CAP: usize, const DELETED: bool>(
52- +         fn process_one<T: Copy, F: FnMut(&mut T) -> bool, const CAP: usize, const DELETED: bool>(
53-              f: &mut F,
54-              g: &mut BackshiftOnDrop<'_, T, CAP>
55-          ) -> bool {
56- @@ -507,7 +497,6 @@  impl<T: Copy, const CAP: usize> ArrayVecCopy<T, CAP> {
57-              if !f(unsafe { &mut *cur }) {
58-                  g.processed_len += 1;
59-                  g.deleted_cnt += 1;
60- -                 unsafe { ptr::drop_in_place(cur) };
61-                  return false;
62-              }
63-              if DELETED {
64- @@ -522,20 +511,20 @@  impl<T: Copy, const CAP: usize> ArrayVecCopy<T, CAP> {
65-  
66-          // Stage 1: Nothing was deleted.
67-          while g.processed_len != original_len {
68- -             if !process_one::<F, T, CAP, false>(&mut f, &mut g) {
69- +             if !process_one::<T, F, CAP, false>(&mut f, &mut g) {
70-                  break;
71-              }
72-          }
73-  
74-          // Stage 2: Some elements were deleted.
75-          while g.processed_len != original_len {
76- -             process_one::<F, T, CAP, true>(&mut f, &mut g);
77- +             process_one::<T, F, CAP, true>(&mut f, &mut g);
78-          }
79-  
80-          drop(g);
81-      }
82-  
83- -     /// Set the vector’s length without dropping or moving out elements
84- +     /// Set the vector’s length without moving out elements
85-      ///
86-      /// This method is `unsafe` because it changes the notion of the
87-      /// number of “valid” elements in the vector. Use with care.
88- @@ -668,8 +657,7 @@  impl<T: Copy, const CAP: usize> ArrayVecCopy<T, CAP> {
89-      /// This operation is safe if and only if length equals capacity.
90-      pub unsafe fn into_inner_unchecked(self) -> [T; CAP] {
91-          debug_assert_eq!(self.len(), self.capacity());
92- -         let self_ = ManuallyDrop::new(self);
93- -         let array = ptr::read(self_.as_ptr() as *const [T; CAP]);
94- +         let array = ptr::read(self.as_ptr() as *const [T; CAP]);
95-          array
96-      }
97-  
98- @@ -755,10 +743,9 @@  impl<T: Copy, const CAP: usize> DerefMut for ArrayVecCopy<T, CAP> {
99-  impl<T: Copy, const CAP: usize> From<[T; CAP]> for ArrayVecCopy<T, CAP> {
100-      #[track_caller]
101-      fn from(array: [T; CAP]) -> Self {
102- -         let array = ManuallyDrop::new(array);
103-          let mut vec = <ArrayVecCopy<T, CAP>>::new();
104-          unsafe {
105- -             (&*array as *const [T; CAP] as *const [MaybeUninit<T>; CAP])
106- +             (&array as *const [T; CAP] as *const [MaybeUninit<T>; CAP])
107-                  .copy_to_nonoverlapping(&mut vec.xs as *mut [MaybeUninit<T>; CAP], 1);
108-              vec.set_len(CAP);
109-          }
110- @@ -929,21 +916,6 @@  impl<T: Copy, const CAP: usize> DoubleEndedIterator for IntoIter<T, CAP> {
30+ @@ -929,21 +924,6 @@  impl<T: Copy, const CAP: usize> DoubleEndedIterator for IntoIter<T, CAP> {
11131
11232 impl<T: Copy, const CAP: usize> ExactSizeIterator for IntoIter<T, CAP> { }
11333
@@ -129,21 +49,3 @@ index 2c32eed..ada0728 100644
12949 impl<T: Copy, const CAP: usize> Clone for IntoIter<T, CAP>
13050 where T: Clone,
13151 {
132- @@ -1029,7 +1001,7 @@  impl<'a, T: Copy + 'a, const CAP: usize> Drop for Drain<'a, T, CAP> {
133-      }
134-  }
135-  
136- - struct ScopeExitGuard<T: Copy, Data, F>
137- + struct ScopeExitGuard<T, Data, F>
138-      where F: FnMut(&Data, &mut T)
139-  {
140-      value: T,
141- @@ -1037,7 +1009,7 @@  struct ScopeExitGuard<T: Copy, Data, F>
142-      f: F,
143-  }
144-  
145- - impl<T: Copy, Data, F> Drop for ScopeExitGuard<T, Data, F>
146- + impl<T, Data, F> Drop for ScopeExitGuard<T, Data, F>
147-      where F: FnMut(&Data, &mut T)
148-  {
149-      fn drop(&mut self) {
0 commit comments