#[inline]
fn next(&mut self) -> Option<$elem> {
// could be implemented with slices, but this avoids bounds checks
- if self.ptr == self.end {
- None
- } else {
- unsafe {
- if mem::size_of::<T>() != 0 {
- ::intrinsics::assume(!self.ptr.is_null());
- ::intrinsics::assume(!self.end.is_null());
- }
+ unsafe {
+ if mem::size_of::<T>() != 0 {
+ assume(!self.ptr.is_null());
+ assume(!self.end.is_null());
+ }
+ if self.ptr == self.end {
+ None
+ } else {
let old = self.ptr;
self.ptr = slice_offset!(self.ptr, 1);
Some(slice_ref!(old))
#[inline]
fn next_back(&mut self) -> Option<$elem> {
// could be implemented with slices, but this avoids bounds checks
- if self.end == self.ptr {
- None
- } else {
- unsafe {
+ unsafe {
+ if mem::size_of::<T>() != 0 {
+ assume(!self.ptr.is_null());
+ assume(!self.end.is_null());
+ }
+ if self.end == self.ptr {
+ None
+ } else {
self.end = slice_offset!(self.end, -1);
- if mem::size_of::<T>() != 0 {
- ::intrinsics::assume(!self.ptr.is_null());
- ::intrinsics::assume(!self.end.is_null());
- }
Some(slice_ref!(self.end))
}
}