remove duplicate function from std::ptr (is_null, is_not_null, offset, mut_offset)

This commit is contained in:
JeremyLetang 2014-02-10 16:50:42 -05:00 committed by Alex Crichton
parent 1c5295c0bf
commit 60bc76fb78
14 changed files with 70 additions and 97 deletions

View File

@ -195,7 +195,7 @@ impl<T: Send> Unique<T> {
pub fn new(value: T) -> Unique<T> {
unsafe {
let ptr = malloc(std::mem::size_of::<T>() as size_t) as *mut T;
assert!(!ptr::is_null(ptr));
assert!(!ptr.is_null());
// `*ptr` is uninitialized, and `*ptr = value` would attempt to destroy it
// move_val_init moves a value into this memory without
// attempting to drop the original value.

View File

@ -34,7 +34,6 @@ use std::cast;
use std::cell::{Cell, RefCell};
use std::mem;
use std::num;
use std::ptr;
use std::kinds::marker;
use std::rc::Rc;
use std::rt::global_heap;
@ -144,7 +143,7 @@ unsafe fn destroy_chunk(chunk: &Chunk) {
let fill = chunk.fill.get();
while idx < fill {
let tydesc_data: *uint = transmute(ptr::offset(buf, idx as int));
let tydesc_data: *uint = transmute(buf.offset(idx as int));
let (tydesc, is_done) = un_bitpack_tydesc_ptr(*tydesc_data);
let (size, align) = ((*tydesc).size, (*tydesc).align);
@ -155,7 +154,7 @@ unsafe fn destroy_chunk(chunk: &Chunk) {
//debug!("freeing object: idx = {}, size = {}, align = {}, done = {}",
// start, size, align, is_done);
if is_done {
((*tydesc).drop_glue)(ptr::offset(buf, start as int) as *i8);
((*tydesc).drop_glue)(buf.offset(start as int) as *i8);
}
// Find where the next tydesc lives
@ -261,7 +260,7 @@ impl Arena {
// start, n_bytes, align, head.fill);
let buf = self.head.as_ptr();
return (ptr::offset(buf, tydesc_start as int), ptr::offset(buf, start as int));
return (buf.offset(tydesc_start as int), buf.offset(start as int));
}
}

View File

@ -119,7 +119,7 @@ impl <T> CVec<T> {
pub fn get<'a>(&'a self, ofs: uint) -> &'a T {
assert!(ofs < self.len);
unsafe {
&*ptr::mut_offset(self.base, ofs as int)
&*self.base.offset(ofs as int)
}
}
@ -131,7 +131,7 @@ impl <T> CVec<T> {
pub fn get_mut<'a>(&'a mut self, ofs: uint) -> &'a mut T {
assert!(ofs < self.len);
unsafe {
&mut *ptr::mut_offset(self.base, ofs as int)
&mut *self.base.offset(ofs as int)
}
}

View File

@ -30,7 +30,6 @@ use std::io;
use std::num;
use std::option;
use std::os::consts::{macos, freebsd, linux, android, win32};
use std::ptr;
use std::str;
use std::vec;
use flate;
@ -340,7 +339,7 @@ fn get_metadata_section_imp(os: Os, filename: &Path) -> Option<MetadataBlob> {
});
if !version_ok { return None; }
let cvbuf1 = ptr::offset(cvbuf, vlen as int);
let cvbuf1 = cvbuf.offset(vlen as int);
debug!("inflating {} bytes of compressed metadata",
csz - vlen);
vec::raw::buf_as_slice(cvbuf1, csz-vlen, |bytes| {

View File

@ -21,7 +21,6 @@ use std::cast;
use std::hashmap::HashMap;
use std::libc::{c_uint, c_ulonglong, c_char};
use syntax::codemap::Span;
use std::ptr::is_not_null;
pub struct Builder<'a> {
llbuilder: BuilderRef,
@ -492,7 +491,7 @@ impl<'a> Builder<'a> {
debug!("Store {} -> {}",
self.ccx.tn.val_to_str(val),
self.ccx.tn.val_to_str(ptr));
assert!(is_not_null(self.llbuilder));
assert!(self.llbuilder.is_not_null());
self.count_insn("store");
unsafe {
llvm::LLVMBuildStore(self.llbuilder, val, ptr);
@ -503,7 +502,7 @@ impl<'a> Builder<'a> {
debug!("Store {} -> {}",
self.ccx.tn.val_to_str(val),
self.ccx.tn.val_to_str(ptr));
assert!(is_not_null(self.llbuilder));
assert!(self.llbuilder.is_not_null());
self.count_insn("store.volatile");
unsafe {
let insn = llvm::LLVMBuildStore(self.llbuilder, val, ptr);

View File

@ -426,7 +426,7 @@ mod test {
unsafe {
let base = transmute::<*u8, *mut u8>(buf.base);
(*base) = 1;
(*ptr::mut_offset(base, 1)) = 2;
(*base.offset(1)) = 2;
}
assert!(slice[0] == 1);

View File

@ -131,7 +131,6 @@ pub mod reader {
}
pub fn vuint_at(data: &[u8], start: uint) -> Res {
use std::ptr::offset;
use std::mem::from_be32;
if data.len() - start < 4 {
@ -163,7 +162,7 @@ pub mod reader {
unsafe {
let (ptr, _): (*u8, uint) = transmute(data);
let ptr = offset(ptr, start as int);
let ptr = ptr.offset(start as int);
let ptr: *i32 = transmute(ptr);
let val = from_be32(*ptr) as u32;

View File

@ -310,7 +310,7 @@ impl<'a> ToCStr for &'a [u8] {
let buf = malloc_raw(self_len + 1);
ptr::copy_memory(buf, self.as_ptr(), self_len);
*ptr::mut_offset(buf, self_len as int) = 0;
*buf.offset(self_len as int) = 0;
CString::new(buf as *libc::c_char, true)
}
@ -368,7 +368,7 @@ impl<'a> Iterator<libc::c_char> for CChars<'a> {
if ch == 0 {
None
} else {
self.ptr = unsafe { ptr::offset(self.ptr, 1) };
self.ptr = unsafe { self.ptr.offset(1) };
Some(ch)
}
}
@ -429,18 +429,18 @@ mod tests {
fn test_str_to_c_str() {
"".to_c_str().with_ref(|buf| {
unsafe {
assert_eq!(*ptr::offset(buf, 0), 0);
assert_eq!(*buf.offset(0), 0);
}
});
"hello".to_c_str().with_ref(|buf| {
unsafe {
assert_eq!(*ptr::offset(buf, 0), 'h' as libc::c_char);
assert_eq!(*ptr::offset(buf, 1), 'e' as libc::c_char);
assert_eq!(*ptr::offset(buf, 2), 'l' as libc::c_char);
assert_eq!(*ptr::offset(buf, 3), 'l' as libc::c_char);
assert_eq!(*ptr::offset(buf, 4), 'o' as libc::c_char);
assert_eq!(*ptr::offset(buf, 5), 0);
assert_eq!(*buf.offset(0), 'h' as libc::c_char);
assert_eq!(*buf.offset(1), 'e' as libc::c_char);
assert_eq!(*buf.offset(2), 'l' as libc::c_char);
assert_eq!(*buf.offset(3), 'l' as libc::c_char);
assert_eq!(*buf.offset(4), 'o' as libc::c_char);
assert_eq!(*buf.offset(5), 0);
}
})
}
@ -450,28 +450,28 @@ mod tests {
let b: &[u8] = [];
b.to_c_str().with_ref(|buf| {
unsafe {
assert_eq!(*ptr::offset(buf, 0), 0);
assert_eq!(*buf.offset(0), 0);
}
});
let _ = bytes!("hello").to_c_str().with_ref(|buf| {
unsafe {
assert_eq!(*ptr::offset(buf, 0), 'h' as libc::c_char);
assert_eq!(*ptr::offset(buf, 1), 'e' as libc::c_char);
assert_eq!(*ptr::offset(buf, 2), 'l' as libc::c_char);
assert_eq!(*ptr::offset(buf, 3), 'l' as libc::c_char);
assert_eq!(*ptr::offset(buf, 4), 'o' as libc::c_char);
assert_eq!(*ptr::offset(buf, 5), 0);
assert_eq!(*buf.offset(0), 'h' as libc::c_char);
assert_eq!(*buf.offset(1), 'e' as libc::c_char);
assert_eq!(*buf.offset(2), 'l' as libc::c_char);
assert_eq!(*buf.offset(3), 'l' as libc::c_char);
assert_eq!(*buf.offset(4), 'o' as libc::c_char);
assert_eq!(*buf.offset(5), 0);
}
});
let _ = bytes!("foo", 0xff).to_c_str().with_ref(|buf| {
unsafe {
assert_eq!(*ptr::offset(buf, 0), 'f' as libc::c_char);
assert_eq!(*ptr::offset(buf, 1), 'o' as libc::c_char);
assert_eq!(*ptr::offset(buf, 2), 'o' as libc::c_char);
assert_eq!(*ptr::offset(buf, 3), 0xff as i8);
assert_eq!(*ptr::offset(buf, 4), 0);
assert_eq!(*buf.offset(0), 'f' as libc::c_char);
assert_eq!(*buf.offset(1), 'o' as libc::c_char);
assert_eq!(*buf.offset(2), 'o' as libc::c_char);
assert_eq!(*buf.offset(3), 0xff as i8);
assert_eq!(*buf.offset(4), 0);
}
});
}
@ -634,7 +634,6 @@ mod bench {
use extra::test::BenchHarness;
use libc;
use prelude::*;
use ptr;
#[inline]
fn check(s: &str, c_str: *libc::c_char) {
@ -642,8 +641,8 @@ mod bench {
for i in range(0, s.len()) {
unsafe {
assert_eq!(
*ptr::offset(s_buf, i as int) as libc::c_char,
*ptr::offset(c_str, i as int));
*s_buf.offset(i as int) as libc::c_char,
*c_str.offset(i as int));
}
}
}

View File

@ -18,6 +18,7 @@ use iter::Iterator;
use option::Option;
use io::Reader;
use vec::{OwnedVector, ImmutableVector};
use ptr::RawPtr;
/// An iterator that reads a single byte on each iteration,
/// until `.read_byte()` returns `None`.
@ -104,7 +105,7 @@ pub fn u64_from_be_bytes(data: &[u8],
start: uint,
size: uint)
-> u64 {
use ptr::{copy_nonoverlapping_memory, offset, mut_offset};
use ptr::{copy_nonoverlapping_memory};
use mem::from_be64;
use vec::MutableVector;
@ -116,9 +117,9 @@ pub fn u64_from_be_bytes(data: &[u8],
let mut buf = [0u8, ..8];
unsafe {
let ptr = offset(data.as_ptr(), start as int);
let ptr = data.as_ptr().offset(start as int);
let out = buf.as_mut_ptr();
copy_nonoverlapping_memory(mut_offset(out, (8 - size) as int), ptr, size);
copy_nonoverlapping_memory(out.offset((8 - size) as int), ptr, size);
from_be64(*(out as *i64)) as u64
}
}

View File

@ -21,23 +21,6 @@ use unstable::intrinsics;
#[cfg(not(test))] use cmp::{Eq, Ord};
/// Calculate the offset from a pointer.
/// The `count` argument is in units of T; e.g. a `count` of 3
/// represents a pointer offset of `3 * sizeof::<T>()` bytes.
#[inline]
pub unsafe fn offset<T>(ptr: *T, count: int) -> *T {
intrinsics::offset(ptr, count)
}
/// Calculate the offset from a mut pointer. The count *must* be in bounds or
/// otherwise the loads of this address are undefined.
/// The `count` argument is in units of T; e.g. a `count` of 3
/// represents a pointer offset of `3 * sizeof::<T>()` bytes.
#[inline]
pub unsafe fn mut_offset<T>(ptr: *mut T, count: int) -> *mut T {
intrinsics::offset(ptr as *T, count) as *mut T
}
/// Return the offset of the first null pointer in `buf`.
#[inline]
pub unsafe fn buf_len<T>(buf: **T) -> uint {
@ -63,7 +46,7 @@ impl<T> Clone for *mut T {
pub unsafe fn position<T>(buf: *T, f: |&T| -> bool) -> uint {
let mut i = 0;
loop {
if f(&(*offset(buf, i as int))) { return i; }
if f(&(*buf.offset(i as int))) { return i; }
else { i += 1; }
}
}
@ -76,14 +59,6 @@ pub fn null<T>() -> *T { 0 as *T }
#[inline]
pub fn mut_null<T>() -> *mut T { 0 as *mut T }
/// Returns true if the pointer is equal to the null pointer.
#[inline]
pub fn is_null<T,P:RawPtr<T>>(ptr: P) -> bool { ptr.is_null() }
/// Returns true if the pointer is not equal to the null pointer.
#[inline]
pub fn is_not_null<T,P:RawPtr<T>>(ptr: P) -> bool { ptr.is_not_null() }
/**
* Copies data from one location to another.
*
@ -206,7 +181,7 @@ pub unsafe fn array_each_with_len<T>(arr: **T, len: uint, cb: |*T|) {
}
//let start_ptr = *arr;
for e in range(0, len) {
let n = offset(arr, e as int);
let n = arr.offset(e as int);
cb(*n);
}
debug!("array_each_with_len: after iterate");
@ -278,7 +253,7 @@ impl<T> RawPtr<T> for *T {
/// Calculates the offset from a pointer. The offset *must* be in-bounds of
/// the object, or one-byte-past-the-end.
#[inline]
unsafe fn offset(self, count: int) -> *T { offset(self, count) }
unsafe fn offset(self, count: int) -> *T { intrinsics::offset(self, count) }
}
/// Extension methods for mutable pointers
@ -323,7 +298,7 @@ impl<T> RawPtr<T> for *mut T {
/// This method should be preferred over `offset` when the guarantee can be
/// satisfied, to enable better optimization.
#[inline]
unsafe fn offset(self, count: int) -> *mut T { mut_offset(self, count) }
unsafe fn offset(self, count: int) -> *mut T { intrinsics::offset(self as *T, count) as *mut T }
}
// Equality for pointers
@ -478,14 +453,14 @@ pub mod ptr_tests {
let v0 = ~[32000u16, 32001u16, 32002u16];
let mut v1 = ~[0u16, 0u16, 0u16];
copy_memory(mut_offset(v1.as_mut_ptr(), 1),
offset(v0.as_ptr(), 1), 1);
copy_memory(v1.as_mut_ptr().offset(1),
v0.as_ptr().offset(1), 1);
assert!((v1[0] == 0u16 && v1[1] == 32001u16 && v1[2] == 0u16));
copy_memory(v1.as_mut_ptr(),
offset(v0.as_ptr(), 2), 1);
v0.as_ptr().offset(2), 1);
assert!((v1[0] == 32002u16 && v1[1] == 32001u16 &&
v1[2] == 0u16));
copy_memory(mut_offset(v1.as_mut_ptr(), 2),
copy_memory(v1.as_mut_ptr().offset(2),
v0.as_ptr(), 1u);
assert!((v1[0] == 32002u16 && v1[1] == 32001u16 &&
v1[2] == 32000u16));
@ -525,7 +500,7 @@ pub mod ptr_tests {
assert!(p.is_null());
assert!(!p.is_not_null());
let q = unsafe { offset(p, 1) };
let q = unsafe { p.offset(1) };
assert!(!q.is_null());
assert!(q.is_not_null());

View File

@ -23,6 +23,7 @@ use io;
use iter::Iterator;
use option::{Some, None, Option};
use ptr;
use ptr::RawPtr;
use reflect;
use reflect::{MovePtr, align};
use result::{Ok, Err};
@ -221,7 +222,7 @@ impl<'a> ReprVisitor<'a> {
if_ok!(self, self.writer.write(", ".as_bytes()));
}
self.visit_ptr_inner(p as *u8, inner);
p = align(unsafe { ptr::offset(p, sz as int) as uint }, al) as *u8;
p = align(unsafe { p.offset(sz as int) as uint }, al) as *u8;
left -= dec;
}
if_ok!(self, self.writer.write([']' as u8]));

View File

@ -1242,7 +1242,7 @@ pub mod raw {
let mut i = 0;
while *curr != 0 {
i += 1;
curr = ptr::offset(buf, i);
curr = buf.offset(i);
}
from_buf_len(buf as *u8, i as uint)
}
@ -1272,7 +1272,7 @@ pub mod raw {
let mut len = 0u;
while *curr != 0u8 {
len += 1u;
curr = ptr::offset(s, len as int);
curr = s.offset(len as int);
}
let v = Slice { data: s, len: len };
assert!(is_utf8(::cast::transmute(v)));
@ -2921,7 +2921,6 @@ impl Default for ~str {
mod tests {
use iter::AdditiveIterator;
use prelude::*;
use ptr;
use str::*;
#[test]
@ -3549,11 +3548,11 @@ mod tests {
fn test_as_ptr() {
let buf = "hello".as_ptr();
unsafe {
assert_eq!(*ptr::offset(buf, 0), 'h' as u8);
assert_eq!(*ptr::offset(buf, 1), 'e' as u8);
assert_eq!(*ptr::offset(buf, 2), 'l' as u8);
assert_eq!(*ptr::offset(buf, 3), 'l' as u8);
assert_eq!(*ptr::offset(buf, 4), 'o' as u8);
assert_eq!(*buf.offset(0), 'h' as u8);
assert_eq!(*buf.offset(1), 'e' as u8);
assert_eq!(*buf.offset(2), 'l' as u8);
assert_eq!(*buf.offset(3), 'l' as u8);
assert_eq!(*buf.offset(4), 'o' as u8);
}
}

View File

@ -139,7 +139,7 @@ pub fn from_fn<T>(n_elts: uint, op: |uint| -> T) -> ~[T] {
&mut i, (),
|i, ()| while *i < n_elts {
mem::move_val_init(
&mut(*ptr::mut_offset(p, *i as int)),
&mut(*p.offset(*i as int)),
op(*i));
*i += 1u;
},
@ -167,7 +167,7 @@ pub fn from_elem<T:Clone>(n_elts: uint, t: T) -> ~[T] {
&mut i, (),
|i, ()| while *i < n_elts {
mem::move_val_init(
&mut(*ptr::mut_offset(p, *i as int)),
&mut(*p.offset(*i as int)),
t.clone());
*i += 1u;
},
@ -1497,7 +1497,7 @@ impl<T> OwnedVector<T> for ~[T] {
let fill = (**repr).fill;
(**repr).fill += mem::nonzero_size_of::<T>();
let p = to_unsafe_ptr(&((**repr).data));
let p = ptr::offset(p, fill as int) as *mut T;
let p = p.offset(fill as int) as *mut T;
mem::move_val_init(&mut(*p), t);
}
}
@ -1511,7 +1511,7 @@ impl<T> OwnedVector<T> for ~[T] {
unsafe { // Note: infallible.
let self_p = self.as_mut_ptr();
let rhs_p = rhs.as_ptr();
ptr::copy_memory(ptr::mut_offset(self_p, self_len as int), rhs_p, rhs_len);
ptr::copy_memory(self_p.offset(self_len as int), rhs_p, rhs_len);
self.set_len(new_len);
rhs.set_len(0);
}
@ -1798,11 +1798,11 @@ impl<T:Eq> OwnedEqVector<T> for ~[T] {
let mut w = 1;
while r < ln {
let p_r = ptr::mut_offset(p, r as int);
let p_wm1 = ptr::mut_offset(p, (w - 1) as int);
let p_r = p.offset(r as int);
let p_wm1 = p.offset((w - 1) as int);
if *p_r != *p_wm1 {
if r != w {
let p_w = ptr::mut_offset(p_wm1, 1);
let p_w = p_wm1.offset(1);
mem::swap(&mut *p_r, &mut *p_w);
}
w += 1;
@ -2385,7 +2385,7 @@ impl<'a,T> MutableVector<'a, T> for &'a mut [T] {
#[inline]
unsafe fn unsafe_mut_ref(self, index: uint) -> &'a mut T {
cast::transmute(ptr::mut_offset(self.repr().data as *mut T, index as int))
cast::transmute((self.repr().data as *mut T).offset(index as int))
}
#[inline]
@ -2486,6 +2486,7 @@ pub unsafe fn from_buf<T>(ptr: *T, elts: uint) -> ~[T] {
pub mod raw {
use cast;
use ptr;
use ptr::RawPtr;
use vec::{with_capacity, MutableVector, OwnedVector};
use unstable::raw::Slice;
@ -2544,7 +2545,7 @@ pub mod raw {
pub unsafe fn shift_ptr<T>(slice: &mut Slice<T>) -> *T {
if slice.len == 0 { fail!("shift on empty slice"); }
let head: *T = slice.data;
slice.data = ptr::offset(slice.data, 1);
slice.data = slice.data.offset(1);
slice.len -= 1;
head
}
@ -2556,7 +2557,7 @@ pub mod raw {
*/
pub unsafe fn pop_ptr<T>(slice: &mut Slice<T>) -> *T {
if slice.len == 0 { fail!("pop on empty slice"); }
let tail: *T = ptr::offset(slice.data, (slice.len - 1) as int);
let tail: *T = slice.data.offset((slice.len - 1) as int);
slice.len -= 1;
tail
}

View File

@ -22,7 +22,8 @@ use cast::{forget, transmute};
use rt::global_heap::{malloc_raw, realloc_raw};
use vec::{ImmutableVector, Items, MutableVector};
use unstable::raw::Slice;
use ptr::{offset, read_ptr};
use ptr::read_ptr;
use ptr::RawPtr;
use libc::{free, c_void};
pub struct Vec<T> {
@ -135,7 +136,7 @@ impl<T> Vec<T> {
}
unsafe {
let end = offset(self.ptr as *T, self.len as int) as *mut T;
let end = (self.ptr as *T).offset(self.len as int) as *mut T;
move_val_init(&mut *end, value);
self.len += 1;
}