File tree Expand file tree Collapse file tree 2 files changed +28
-22
lines changed Expand file tree Collapse file tree 2 files changed +28
-22
lines changed Original file line number Diff line number Diff line change
1
+ use core:: ptr:: { self } ;
2
+ use core:: slice:: { self } ;
3
+
4
+ // A helper struct for in-place iteration that drops the destination slice of iteration,
5
+ // i.e. the head. The source slice (the tail) is dropped by IntoIter.
6
+ pub ( super ) struct InPlaceDrop < T > {
7
+ pub ( super ) inner : * mut T ,
8
+ pub ( super ) dst : * mut T ,
9
+ }
10
+
11
+ impl < T > InPlaceDrop < T > {
12
+ fn len ( & self ) -> usize {
13
+ unsafe { self . dst . offset_from ( self . inner ) as usize }
14
+ }
15
+ }
16
+
17
+ impl < T > Drop for InPlaceDrop < T > {
18
+ #[ inline]
19
+ fn drop ( & mut self ) {
20
+ unsafe {
21
+ ptr:: drop_in_place ( slice:: from_raw_parts_mut ( self . inner , self . len ( ) ) ) ;
22
+ }
23
+ }
24
+ }
Original file line number Diff line number Diff line change @@ -113,6 +113,10 @@ use self::set_len_on_drop::SetLenOnDrop;
113
113
114
114
mod set_len_on_drop;
115
115
116
+ use self :: in_place_drop:: InPlaceDrop ;
117
+
118
+ mod in_place_drop;
119
+
116
120
/// A contiguous growable array type, written `Vec<T>` but pronounced 'vector'.
117
121
///
118
122
/// # Examples
@@ -2233,28 +2237,6 @@ where
2233
2237
}
2234
2238
}
2235
2239
2236
- // A helper struct for in-place iteration that drops the destination slice of iteration,
2237
- // i.e. the head. The source slice (the tail) is dropped by IntoIter.
2238
- struct InPlaceDrop < T > {
2239
- inner : * mut T ,
2240
- dst : * mut T ,
2241
- }
2242
-
2243
- impl < T > InPlaceDrop < T > {
2244
- fn len ( & self ) -> usize {
2245
- unsafe { self . dst . offset_from ( self . inner ) as usize }
2246
- }
2247
- }
2248
-
2249
- impl < T > Drop for InPlaceDrop < T > {
2250
- #[ inline]
2251
- fn drop ( & mut self ) {
2252
- unsafe {
2253
- ptr:: drop_in_place ( slice:: from_raw_parts_mut ( self . inner , self . len ( ) ) ) ;
2254
- }
2255
- }
2256
- }
2257
-
2258
2240
impl < T > SpecFromIter < T , IntoIter < T > > for Vec < T > {
2259
2241
fn from_iter ( iterator : IntoIter < T > ) -> Self {
2260
2242
// A common case is passing a vector into a function which immediately
You can’t perform that action at this time.
0 commit comments