Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove duplicate function in std::ptr with std::ptr::RawPtr #12167

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/doc/guide-ffi.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
7 changes: 3 additions & 4 deletions src/libarena/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand All @@ -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
Expand Down Expand Up @@ -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));
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/libextra/c_vec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}

Expand All @@ -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)
}
}

Expand Down
3 changes: 1 addition & 2 deletions src/librustc/metadata/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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| {
Expand Down
5 changes: 2 additions & 3 deletions src/librustc/middle/trans/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion src/librustuv/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 1 addition & 2 deletions src/libserialize/ebml.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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;

Expand Down
47 changes: 23 additions & 24 deletions src/libstd/c_str.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -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)
}
}
Expand Down Expand Up @@ -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);
}
})
}
Expand All @@ -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);
}
});
}
Expand Down Expand Up @@ -634,16 +634,15 @@ mod bench {
use extra::test::BenchHarness;
use libc;
use prelude::*;
use ptr;

#[inline]
fn check(s: &str, c_str: *libc::c_char) {
let s_buf = s.as_ptr();
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));
}
}
}
Expand Down
7 changes: 4 additions & 3 deletions src/libstd/io/extensions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down Expand Up @@ -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;

Expand All @@ -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
}
}
Expand Down
43 changes: 9 additions & 34 deletions src/libstd/ptr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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; }
}
}
Expand All @@ -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.
*
Expand Down Expand Up @@ -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");
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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());

Expand Down
3 changes: 2 additions & 1 deletion src/libstd/repr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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]));
Expand Down
Loading