@@ -109,7 +109,6 @@ impl<T, A: Allocator> Drop for Drain<'_, T, A> {
109
109
110
110
let source_deque = unsafe { self . 0 . deque . as_mut ( ) } ;
111
111
112
- let drain_start = source_deque. len ( ) ;
113
112
let drain_len = self . 0 . drain_len ;
114
113
let new_len = self . 0 . new_len ;
115
114
@@ -119,40 +118,32 @@ impl<T, A: Allocator> Drop for Drain<'_, T, A> {
119
118
return ;
120
119
}
121
120
122
- let head_len = drain_start ;
121
+ let head_len = source_deque . len ( ) ;
123
122
let tail_len = new_len - head_len;
124
123
125
- match ( head_len, tail_len) {
126
- ( 0 , 0 ) => {
127
- source_deque. head = 0 ;
128
- source_deque. len = 0 ;
129
- }
130
- ( 0 , _) => {
131
- source_deque. head = source_deque. to_physical_idx ( drain_len) ;
132
- source_deque. len = new_len;
133
- }
134
- ( _, 0 ) => {
135
- source_deque. len = new_len;
124
+ if head_len != 0 && tail_len != 0 {
125
+ let ( src, dst, len) ;
126
+ if head_len < tail_len {
127
+ src = source_deque. head ;
128
+ dst = source_deque. to_physical_idx ( drain_len) ;
129
+ len = head_len;
130
+ } else {
131
+ src = source_deque. to_physical_idx ( head_len + drain_len) ;
132
+ dst = source_deque. to_physical_idx ( head_len) ;
133
+ len = tail_len;
134
+ } ;
135
+
136
+ unsafe {
137
+ source_deque. wrap_copy ( src, dst, len) ;
136
138
}
137
- _ => unsafe {
138
- if head_len <= tail_len {
139
- source_deque. wrap_copy (
140
- source_deque. head ,
141
- source_deque. to_physical_idx ( drain_len) ,
142
- head_len,
143
- ) ;
144
- source_deque. head = source_deque. to_physical_idx ( drain_len) ;
145
- source_deque. len = new_len;
146
- } else {
147
- source_deque. wrap_copy (
148
- source_deque. to_physical_idx ( head_len + drain_len) ,
149
- source_deque. to_physical_idx ( head_len) ,
150
- tail_len,
151
- ) ;
152
- source_deque. len = new_len;
153
- }
154
- } ,
155
139
}
140
+
141
+ if new_len == 0 {
142
+ source_deque. head = 0 ;
143
+ } else if head_len < tail_len {
144
+ source_deque. head = source_deque. to_physical_idx ( drain_len) ;
145
+ }
146
+ source_deque. len = new_len;
156
147
}
157
148
}
158
149
0 commit comments