1
1
diff --git a/src/arrayvec_copy_generated.rs b/src/arrayvec_copy.rs
2
- index 2c32eed..ada0728 100644
2
+ index c4be864..ec5224d 100644
3
3
--- a/src/arrayvec_copy_generated.rs
4
4
+++ 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;
8
6
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.
19
8
///
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
+ + ///
20
12
/// The `ArrayVecCopy` is a vector backed by a fixed size array. It keeps track of
21
13
/// 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> {
23
16
xs: [MaybeUninit<T>; CAP],
24
17
}
25
18
@@ -34,80 +27,7 @@ index 2c32eed..ada0728 100644
34
27
macro_rules! panic_oob {
35
28
($method_name:expr, $index:expr, $len:expr) => {
36
29
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> {
111
31
112
32
impl<T: Copy, const CAP: usize> ExactSizeIterator for IntoIter<T, CAP> { }
113
33
@@ -129,21 +49,3 @@ index 2c32eed..ada0728 100644
129
49
impl<T: Copy, const CAP: usize> Clone for IntoIter<T, CAP>
130
50
where T: Clone,
131
51
{
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