Skip to content

Commit a462a3a

Browse files
author
Brent Kerby
authored
Use pointer 'add' instead of 'offset' (#265)
1 parent 951371f commit a462a3a

File tree

9 files changed

+24
-24
lines changed

9 files changed

+24
-24
lines changed

src/exception-safety.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ impl<T: Clone> Vec<T> {
4848
self.set_len(self.len() + to_push.len());
4949
5050
for (i, x) in to_push.iter().enumerate() {
51-
self.ptr().offset(i as isize).write(x.clone());
51+
self.ptr().add(i).write(x.clone());
5252
}
5353
}
5454
}
@@ -58,7 +58,7 @@ impl<T: Clone> Vec<T> {
5858
We bypass `push` in order to avoid redundant capacity and `len` checks on the
5959
Vec that we definitely know has capacity. The logic is totally correct, except
6060
there's a subtle problem with our code: it's not exception-safe! `set_len`,
61-
`offset`, and `write` are all fine; `clone` is the panic bomb we over-looked.
61+
`add`, and `write` are all fine; `clone` is the panic bomb we over-looked.
6262

6363
Clone is completely out of our control, and is totally free to panic. If it
6464
does, our function will exit early with the length of the Vec set too large. If

src/vec-drain.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ impl<T> RawValIter<T> {
4646
// information to LLVM via GEP.
4747
slice.as_ptr()
4848
} else {
49-
slice.as_ptr().offset(slice.len() as isize)
49+
slice.as_ptr().add(slice.len())
5050
}
5151
}
5252
}

src/vec-final.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl<T> Vec<T> {
111111
}
112112

113113
unsafe {
114-
ptr::write(self.ptr().offset(self.len as isize), elem);
114+
ptr::write(self.ptr().add(self.len), elem);
115115
}
116116

117117
// Can't overflow, we'll OOM first.
@@ -123,7 +123,7 @@ impl<T> Vec<T> {
123123
None
124124
} else {
125125
self.len -= 1;
126-
unsafe { Some(ptr::read(self.ptr().offset(self.len as isize))) }
126+
unsafe { Some(ptr::read(self.ptr().add(self.len))) }
127127
}
128128
}
129129

@@ -135,11 +135,11 @@ impl<T> Vec<T> {
135135

136136
unsafe {
137137
ptr::copy(
138-
self.ptr().offset(index as isize),
139-
self.ptr().offset(index as isize + 1),
138+
self.ptr().add(index),
139+
self.ptr().add(index + 1),
140140
self.len - index,
141141
);
142-
ptr::write(self.ptr().offset(index as isize), elem);
142+
ptr::write(self.ptr().add(index), elem);
143143
self.len += 1;
144144
}
145145
}
@@ -148,10 +148,10 @@ impl<T> Vec<T> {
148148
assert!(index < self.len, "index out of bounds");
149149
unsafe {
150150
self.len -= 1;
151-
let result = ptr::read(self.ptr().offset(index as isize));
151+
let result = ptr::read(self.ptr().add(index));
152152
ptr::copy(
153-
self.ptr().offset(index as isize + 1),
154-
self.ptr().offset(index as isize),
153+
self.ptr().add(index + 1),
154+
self.ptr().add(index),
155155
self.len - index,
156156
);
157157
result
@@ -222,7 +222,7 @@ impl<T> RawValIter<T> {
222222
} else if slice.len() == 0 {
223223
slice.as_ptr()
224224
} else {
225-
slice.as_ptr().offset(slice.len() as isize)
225+
slice.as_ptr().add(slice.len())
226226
},
227227
}
228228
}

src/vec-insert-remove.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ pub fn insert(&mut self, index: usize, elem: T) {
2121
2222
unsafe {
2323
// ptr::copy(src, dest, len): "copy from src to dest len elems"
24-
ptr::copy(self.ptr.as_ptr().offset(index as isize),
25-
self.ptr.as_ptr().offset(index as isize + 1),
24+
ptr::copy(self.ptr.as_ptr().add(index),
25+
self.ptr.as_ptr().add(index + 1),
2626
self.len - index);
27-
ptr::write(self.ptr.as_ptr().offset(index as isize), elem);
27+
ptr::write(self.ptr.as_ptr().add(index), elem);
2828
self.len += 1;
2929
}
3030
}
@@ -39,9 +39,9 @@ pub fn remove(&mut self, index: usize) -> T {
3939
assert!(index < self.len, "index out of bounds");
4040
unsafe {
4141
self.len -= 1;
42-
let result = ptr::read(self.ptr.as_ptr().offset(index as isize));
43-
ptr::copy(self.ptr.as_ptr().offset(index as isize + 1),
44-
self.ptr.as_ptr().offset(index as isize),
42+
let result = ptr::read(self.ptr.as_ptr().add(index));
43+
ptr::copy(self.ptr.as_ptr().add(index + 1),
44+
self.ptr.as_ptr().add(index),
4545
self.len - index);
4646
result
4747
}

src/vec-into-iter.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ impl<T> Vec<T> {
7474
// can't offset off this pointer, it's not allocated!
7575
ptr.as_ptr()
7676
} else {
77-
ptr.as_ptr().offset(len as isize)
77+
ptr.as_ptr().add(len)
7878
},
7979
_marker: PhantomData,
8080
}

src/vec-push-pop.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ pub fn push(&mut self, elem: T) {
2222
if self.len == self.cap { self.grow(); }
2323
2424
unsafe {
25-
ptr::write(self.ptr.as_ptr().offset(self.len as isize), elem);
25+
ptr::write(self.ptr.as_ptr().add(self.len), elem);
2626
}
2727
2828
// Can't fail, we'll OOM first.
@@ -48,7 +48,7 @@ pub fn pop(&mut self) -> Option<T> {
4848
} else {
4949
self.len -= 1;
5050
unsafe {
51-
Some(ptr::read(self.ptr.as_ptr().offset(self.len as isize)))
51+
Some(ptr::read(self.ptr.as_ptr().add(self.len)))
5252
}
5353
}
5454
}

src/vec-raw.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ impl<T> Vec<T> {
142142
143143
IntoIter {
144144
start: buf.ptr.as_ptr(),
145-
end: buf.ptr.as_ptr().offset(len as isize),
145+
end: buf.ptr.as_ptr().add(len),
146146
_buf: buf,
147147
}
148148
}

src/vec-zsts.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ impl<T> RawValIter<T> {
123123
} else if slice.len() == 0 {
124124
slice.as_ptr()
125125
} else {
126-
slice.as_ptr().offset(slice.len() as isize)
126+
slice.as_ptr().add(slice.len())
127127
},
128128
}
129129
}

src/working-with-unsafe.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ impl<T> Vec<T> {
7171
self.reallocate();
7272
}
7373
unsafe {
74-
ptr::write(self.ptr.offset(self.len as isize), elem);
74+
ptr::write(self.ptr.add(self.len), elem);
7575
self.len += 1;
7676
}
7777
}

0 commit comments

Comments
 (0)