Skip to content

Commit 292b9d2

Browse files
Bump the MSRV to 1.87 and remove polyfill code for split_off()
1 parent 2332733 commit 292b9d2

File tree

3 files changed

+17
-137
lines changed

3 files changed

+17
-137
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name = "circular-buffer"
33
version = "1.1.0"
44
authors = ["Andrea Corbellini <corbellini.andrea@gmail.com>"]
55
edition = "2024"
6-
rust-version = "1.85"
6+
rust-version = "1.87"
77
license = "BSD-3-Clause"
88

99
description = "Efficient, fixed-size, overwriting circular buffer"

src/iter.rs

Lines changed: 16 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -99,125 +99,6 @@ where
9999
(start, end)
100100
}
101101

102-
#[inline(always)]
103-
#[cfg(feature = "unstable")]
104-
fn slice_take<'a, T, R: core::ops::OneSidedRange<usize>>(
105-
slice: &mut &'a [T],
106-
range: R,
107-
) -> Option<&'a [T]> {
108-
slice.split_off(range)
109-
}
110-
111-
#[cfg(not(feature = "unstable"))]
112-
fn slice_take<'a, T, R: RangeBounds<usize>>(slice: &mut &'a [T], range: R) -> Option<&'a [T]> {
113-
match (range.start_bound(), range.end_bound()) {
114-
(Bound::Unbounded, Bound::Excluded(index)) => {
115-
if *index > slice.len() {
116-
return None;
117-
}
118-
let (left, right) = slice.split_at(*index);
119-
*slice = right;
120-
Some(left)
121-
}
122-
(Bound::Included(index), Bound::Unbounded) => {
123-
if *index > slice.len() {
124-
return None;
125-
}
126-
let (left, right) = slice.split_at(*index);
127-
*slice = left;
128-
Some(right)
129-
}
130-
_ => unimplemented!(),
131-
}
132-
}
133-
134-
#[inline(always)]
135-
#[cfg(feature = "unstable")]
136-
fn slice_take_mut<'a, T, R: core::ops::OneSidedRange<usize>>(
137-
slice: &mut &'a mut [T],
138-
range: R,
139-
) -> Option<&'a mut [T]> {
140-
slice.split_off_mut(range)
141-
}
142-
143-
#[cfg(not(feature = "unstable"))]
144-
fn slice_take_mut<'a, T, R: RangeBounds<usize>>(
145-
slice: &mut &'a mut [T],
146-
range: R,
147-
) -> Option<&'a mut [T]> {
148-
match (range.start_bound(), range.end_bound()) {
149-
(Bound::Unbounded, Bound::Excluded(index)) => {
150-
if *index > slice.len() {
151-
return None;
152-
}
153-
let (left, right) = core::mem::take(slice).split_at_mut(*index);
154-
*slice = right;
155-
Some(left)
156-
}
157-
(Bound::Included(index), Bound::Unbounded) => {
158-
if *index > slice.len() {
159-
return None;
160-
}
161-
let (left, right) = core::mem::take(slice).split_at_mut(*index);
162-
*slice = left;
163-
Some(right)
164-
}
165-
_ => unimplemented!(),
166-
}
167-
}
168-
169-
#[inline(always)]
170-
#[cfg(feature = "unstable")]
171-
fn slice_take_first<'a, T>(slice: &mut &'a [T]) -> Option<&'a T> {
172-
slice.split_off_first()
173-
}
174-
175-
#[cfg(not(feature = "unstable"))]
176-
fn slice_take_first<'a, T>(slice: &mut &'a [T]) -> Option<&'a T> {
177-
let (item, rest) = slice.split_first()?;
178-
*slice = rest;
179-
Some(item)
180-
}
181-
182-
#[inline(always)]
183-
#[cfg(feature = "unstable")]
184-
fn slice_take_first_mut<'a, T>(slice: &mut &'a mut [T]) -> Option<&'a mut T> {
185-
slice.split_off_first_mut()
186-
}
187-
188-
#[cfg(not(feature = "unstable"))]
189-
fn slice_take_first_mut<'a, T>(slice: &mut &'a mut [T]) -> Option<&'a mut T> {
190-
let (item, rest) = core::mem::take(slice).split_first_mut()?;
191-
*slice = rest;
192-
Some(item)
193-
}
194-
195-
#[inline(always)]
196-
#[cfg(feature = "unstable")]
197-
fn slice_take_last<'a, T>(slice: &mut &'a [T]) -> Option<&'a T> {
198-
slice.split_off_last()
199-
}
200-
201-
#[cfg(not(feature = "unstable"))]
202-
fn slice_take_last<'a, T>(slice: &mut &'a [T]) -> Option<&'a T> {
203-
let (item, rest) = slice.split_last()?;
204-
*slice = rest;
205-
Some(item)
206-
}
207-
208-
#[inline(always)]
209-
#[cfg(feature = "unstable")]
210-
fn slice_take_last_mut<'a, T>(slice: &mut &'a mut [T]) -> Option<&'a mut T> {
211-
slice.split_off_last_mut()
212-
}
213-
214-
#[cfg(not(feature = "unstable"))]
215-
fn slice_take_last_mut<'a, T>(slice: &mut &'a mut [T]) -> Option<&'a mut T> {
216-
let (item, rest) = core::mem::take(slice).split_last_mut()?;
217-
*slice = rest;
218-
Some(item)
219-
}
220-
221102
/// An [iterator](core::iter::Iterator) over the elements of a `CircularBuffer`.
222103
///
223104
/// This struct is created by [`CircularBuffer::iter()`] and [`CircularBuffer::range()`]. See
@@ -258,29 +139,29 @@ impl<'a, T> Iter<'a, T> {
258139

259140
fn advance_front_by(&mut self, count: usize) {
260141
if self.right.len() > count {
261-
slice_take(&mut self.right, ..count);
142+
let _ = self.right.split_off(..count);
262143
} else {
263144
let take_left = count - self.right.len();
264145
debug_assert!(
265146
take_left <= self.left.len(),
266147
"attempted to advance past the back of the buffer"
267148
);
268-
slice_take(&mut self.left, ..take_left);
149+
let _ = self.left.split_off(..take_left);
269150
self.right = &[];
270151
}
271152
}
272153

273154
fn advance_back_by(&mut self, count: usize) {
274155
if self.left.len() > count {
275156
let take_left = self.left.len() - count;
276-
slice_take(&mut self.left, take_left..);
157+
let _ = self.left.split_off(take_left..);
277158
} else {
278159
let take_right = self.right.len() - (count - self.left.len());
279160
debug_assert!(
280161
take_right <= self.right.len(),
281162
"attempted to advance past the front of the buffer"
282163
);
283-
slice_take(&mut self.right, take_right..);
164+
let _ = self.right.split_off(take_right..);
284165
self.left = &[];
285166
}
286167
}
@@ -297,9 +178,9 @@ impl<'a, T> Iterator for Iter<'a, T> {
297178
type Item = &'a T;
298179

299180
fn next(&mut self) -> Option<Self::Item> {
300-
if let Some(item) = slice_take_first(&mut self.right) {
181+
if let Some(item) = self.right.split_off_first() {
301182
Some(item)
302-
} else if let Some(item) = slice_take_first(&mut self.left) {
183+
} else if let Some(item) = self.left.split_off_first() {
303184
Some(item)
304185
} else {
305186
None
@@ -324,9 +205,9 @@ impl<T> FusedIterator for Iter<'_, T> {}
324205

325206
impl<T> DoubleEndedIterator for Iter<'_, T> {
326207
fn next_back(&mut self) -> Option<Self::Item> {
327-
if let Some(item) = slice_take_last(&mut self.left) {
208+
if let Some(item) = self.left.split_off_last() {
328209
Some(item)
329-
} else if let Some(item) = slice_take_last(&mut self.right) {
210+
} else if let Some(item) = self.right.split_off_last() {
330211
Some(item)
331212
} else {
332213
None
@@ -392,29 +273,29 @@ impl<'a, T> IterMut<'a, T> {
392273

393274
fn advance_front_by(&mut self, count: usize) {
394275
if self.right.len() > count {
395-
slice_take_mut(&mut self.right, ..count);
276+
let _ = self.right.split_off_mut(..count);
396277
} else {
397278
let take_left = count - self.right.len();
398279
debug_assert!(
399280
take_left <= self.left.len(),
400281
"attempted to advance past the back of the buffer"
401282
);
402-
slice_take_mut(&mut self.left, ..take_left);
283+
let _ = self.left.split_off_mut(..take_left);
403284
self.right = &mut [];
404285
}
405286
}
406287

407288
fn advance_back_by(&mut self, count: usize) {
408289
if self.left.len() > count {
409290
let take_left = self.left.len() - count;
410-
slice_take_mut(&mut self.left, take_left..);
291+
let _ = self.left.split_off_mut(take_left..);
411292
} else {
412293
let take_right = self.right.len() - (count - self.left.len());
413294
debug_assert!(
414295
take_right <= self.right.len(),
415296
"attempted to advance past the front of the buffer"
416297
);
417-
slice_take_mut(&mut self.right, take_right..);
298+
let _ = self.right.split_off_mut(take_right..);
418299
self.left = &mut [];
419300
}
420301
}
@@ -431,9 +312,9 @@ impl<'a, T> Iterator for IterMut<'a, T> {
431312
type Item = &'a mut T;
432313

433314
fn next(&mut self) -> Option<Self::Item> {
434-
if let Some(item) = slice_take_first_mut(&mut self.right) {
315+
if let Some(item) = self.right.split_off_first_mut() {
435316
Some(item)
436-
} else if let Some(item) = slice_take_first_mut(&mut self.left) {
317+
} else if let Some(item) = self.left.split_off_first_mut() {
437318
Some(item)
438319
} else {
439320
None
@@ -458,9 +339,9 @@ impl<T> FusedIterator for IterMut<'_, T> {}
458339

459340
impl<T> DoubleEndedIterator for IterMut<'_, T> {
460341
fn next_back(&mut self) -> Option<Self::Item> {
461-
if let Some(item) = slice_take_last_mut(&mut self.left) {
342+
if let Some(item) = self.left.split_off_last_mut() {
462343
Some(item)
463-
} else if let Some(item) = slice_take_last_mut(&mut self.right) {
344+
} else if let Some(item) = self.right.split_off_last_mut() {
464345
Some(item)
465346
} else {
466347
None

src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@
189189
#![cfg_attr(not(feature = "std"), no_std)]
190190
#![cfg_attr(feature = "unstable", feature(maybe_uninit_slice))]
191191
#![cfg_attr(feature = "unstable", feature(maybe_uninit_write_slice))]
192-
#![cfg_attr(feature = "unstable", feature(one_sided_range))]
193192
#![warn(missing_debug_implementations)]
194193
#![warn(missing_docs)]
195194
#![warn(unreachable_pub)]

0 commit comments

Comments
 (0)