std: Move size/align functions to std::mem. #2240
This commit is contained in:
parent
3fd0e3a77b
commit
34d376f3cf
46 changed files with 288 additions and 269 deletions
|
|
@ -14,7 +14,7 @@ use clone::Clone;
|
|||
use container::Container;
|
||||
use iter::Iterator;
|
||||
use option::{Option, Some, None};
|
||||
use sys;
|
||||
use mem;
|
||||
use unstable::raw::Repr;
|
||||
use vec::{ImmutableVector, OwnedVector};
|
||||
|
||||
|
|
@ -26,7 +26,7 @@ use vec::{ImmutableVector, OwnedVector};
|
|||
pub fn capacity<T>(v: @[T]) -> uint {
|
||||
unsafe {
|
||||
let box = v.repr();
|
||||
(*box).data.alloc / sys::size_of::<T>()
|
||||
(*box).data.alloc / mem::size_of::<T>()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -160,7 +160,7 @@ pub mod raw {
|
|||
use cast::{transmute, transmute_copy};
|
||||
use libc;
|
||||
use ptr;
|
||||
use sys;
|
||||
use mem;
|
||||
use uint;
|
||||
use unstable::intrinsics::{move_val_init, TyDesc};
|
||||
use unstable::intrinsics;
|
||||
|
|
@ -176,7 +176,7 @@ pub mod raw {
|
|||
#[inline]
|
||||
pub unsafe fn set_len<T>(v: &mut @[T], new_len: uint) {
|
||||
let repr: *mut Box<Vec<T>> = cast::transmute_copy(v);
|
||||
(*repr).data.fill = new_len * sys::size_of::<T>();
|
||||
(*repr).data.fill = new_len * mem::size_of::<T>();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -199,7 +199,7 @@ pub mod raw {
|
|||
unsafe fn push_fast<T>(v: &mut @[T], initval: T) {
|
||||
let repr: *mut Box<Vec<T>> = cast::transmute_copy(v);
|
||||
let amt = v.len();
|
||||
(*repr).data.fill += sys::size_of::<T>();
|
||||
(*repr).data.fill += mem::size_of::<T>();
|
||||
let p = ptr::offset(&(*repr).data.data as *T, amt as int) as *mut T;
|
||||
move_val_init(&mut(*p), initval);
|
||||
}
|
||||
|
|
@ -236,7 +236,7 @@ pub mod raw {
|
|||
unsafe {
|
||||
if n > (**ptr).data.alloc / (*ty).size {
|
||||
let alloc = n * (*ty).size;
|
||||
let total_size = alloc + sys::size_of::<Vec<()>>();
|
||||
let total_size = alloc + mem::size_of::<Vec<()>>();
|
||||
if alloc / (*ty).size != n || total_size < alloc {
|
||||
fail2!("vector size is too large: {}", n);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
//! Unsafe casting functions
|
||||
|
||||
use ptr::RawPtr;
|
||||
use sys;
|
||||
use mem;
|
||||
use unstable::intrinsics;
|
||||
|
||||
/// Casts the value at `src` to U. The two types must have the same length.
|
||||
|
|
@ -21,7 +21,7 @@ pub unsafe fn transmute_copy<T, U>(src: &T) -> U {
|
|||
let mut dest: U = intrinsics::uninit();
|
||||
let dest_ptr: *mut u8 = transmute(&mut dest);
|
||||
let src_ptr: *u8 = transmute(src);
|
||||
intrinsics::memcpy32(dest_ptr, src_ptr, sys::size_of::<U>() as u32);
|
||||
intrinsics::memcpy32(dest_ptr, src_ptr, mem::size_of::<U>() as u32);
|
||||
dest
|
||||
}
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ pub unsafe fn transmute_copy<T, U>(src: &T) -> U {
|
|||
let mut dest: U = intrinsics::uninit();
|
||||
let dest_ptr: *mut u8 = transmute(&mut dest);
|
||||
let src_ptr: *u8 = transmute(src);
|
||||
intrinsics::memcpy64(dest_ptr, src_ptr, sys::size_of::<U>() as u64);
|
||||
intrinsics::memcpy64(dest_ptr, src_ptr, mem::size_of::<U>() as u64);
|
||||
dest
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ fn debug_mem() -> bool {
|
|||
/// Destroys all managed memory (i.e. @ boxes) held by the current task.
|
||||
pub unsafe fn annihilate() {
|
||||
use rt::local_heap::local_free;
|
||||
use sys;
|
||||
use mem;
|
||||
use managed;
|
||||
|
||||
let mut stats = AnnihilateStats {
|
||||
|
|
@ -115,7 +115,7 @@ pub unsafe fn annihilate() {
|
|||
if !uniq {
|
||||
stats.n_bytes_freed +=
|
||||
(*((*box).type_desc)).size
|
||||
+ sys::size_of::<raw::Box<()>>();
|
||||
+ mem::size_of::<raw::Box<()>>();
|
||||
local_free(box as *i8);
|
||||
}
|
||||
true
|
||||
|
|
|
|||
158
src/libstd/mem.rs
Normal file
158
src/libstd/mem.rs
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
//! Functions relating to memory layout
|
||||
|
||||
use unstable::intrinsics;
|
||||
|
||||
/// Returns the size of a type
|
||||
#[inline]
|
||||
pub fn size_of<T>() -> uint {
|
||||
unsafe { intrinsics::size_of::<T>() }
|
||||
}
|
||||
|
||||
/// Returns the size of the type that `_val` points to
|
||||
#[inline]
|
||||
pub fn size_of_val<T>(_val: &T) -> uint {
|
||||
size_of::<T>()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the size of a type, or 1 if the actual size is zero.
|
||||
*
|
||||
* Useful for building structures containing variable-length arrays.
|
||||
*/
|
||||
#[inline]
|
||||
pub fn nonzero_size_of<T>() -> uint {
|
||||
let s = size_of::<T>();
|
||||
if s == 0 { 1 } else { s }
|
||||
}
|
||||
|
||||
/// Returns the size of the type of the value that `_val` points to
|
||||
#[inline]
|
||||
pub fn nonzero_size_of_val<T>(_val: &T) -> uint {
|
||||
nonzero_size_of::<T>()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the ABI-required minimum alignment of a type
|
||||
*
|
||||
* This is the alignment used for struct fields. It may be smaller
|
||||
* than the preferred alignment.
|
||||
*/
|
||||
#[inline]
|
||||
pub fn min_align_of<T>() -> uint {
|
||||
unsafe { intrinsics::min_align_of::<T>() }
|
||||
}
|
||||
|
||||
/// Returns the ABI-required minimum alignment of the type of the value that
|
||||
/// `_val` points to
|
||||
#[inline]
|
||||
pub fn min_align_of_val<T>(_val: &T) -> uint {
|
||||
min_align_of::<T>()
|
||||
}
|
||||
|
||||
/// Returns the preferred alignment of a type
|
||||
#[inline]
|
||||
pub fn pref_align_of<T>() -> uint {
|
||||
unsafe { intrinsics::pref_align_of::<T>() }
|
||||
}
|
||||
|
||||
/// Returns the preferred alignment of the type of the value that
|
||||
/// `_val` points to
|
||||
#[inline]
|
||||
pub fn pref_align_of_val<T>(_val: &T) -> uint {
|
||||
pref_align_of::<T>()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use cast;
|
||||
use mem::*;
|
||||
|
||||
#[test]
|
||||
fn size_of_basic() {
|
||||
assert_eq!(size_of::<u8>(), 1u);
|
||||
assert_eq!(size_of::<u16>(), 2u);
|
||||
assert_eq!(size_of::<u32>(), 4u);
|
||||
assert_eq!(size_of::<u64>(), 8u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86")]
|
||||
#[cfg(target_arch = "arm")]
|
||||
#[cfg(target_arch = "mips")]
|
||||
fn size_of_32() {
|
||||
assert_eq!(size_of::<uint>(), 4u);
|
||||
assert_eq!(size_of::<*uint>(), 4u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
fn size_of_64() {
|
||||
assert_eq!(size_of::<uint>(), 8u);
|
||||
assert_eq!(size_of::<*uint>(), 8u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn size_of_val_basic() {
|
||||
assert_eq!(size_of_val(&1u8), 1);
|
||||
assert_eq!(size_of_val(&1u16), 2);
|
||||
assert_eq!(size_of_val(&1u32), 4);
|
||||
assert_eq!(size_of_val(&1u64), 8);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nonzero_size_of_basic() {
|
||||
type Z = [i8, ..0];
|
||||
assert_eq!(size_of::<Z>(), 0u);
|
||||
assert_eq!(nonzero_size_of::<Z>(), 1u);
|
||||
assert_eq!(nonzero_size_of::<uint>(), size_of::<uint>());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nonzero_size_of_val_basic() {
|
||||
let z = [0u8, ..0];
|
||||
assert_eq!(size_of_val(&z), 0u);
|
||||
assert_eq!(nonzero_size_of_val(&z), 1u);
|
||||
assert_eq!(nonzero_size_of_val(&1u), size_of_val(&1u));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn align_of_basic() {
|
||||
assert_eq!(pref_align_of::<u8>(), 1u);
|
||||
assert_eq!(pref_align_of::<u16>(), 2u);
|
||||
assert_eq!(pref_align_of::<u32>(), 4u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86")]
|
||||
#[cfg(target_arch = "arm")]
|
||||
#[cfg(target_arch = "mips")]
|
||||
fn align_of_32() {
|
||||
assert_eq!(pref_align_of::<uint>(), 4u);
|
||||
assert_eq!(pref_align_of::<*uint>(), 4u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
fn align_of_64() {
|
||||
assert_eq!(pref_align_of::<uint>(), 8u);
|
||||
assert_eq!(pref_align_of::<*uint>(), 8u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn align_of_val_basic() {
|
||||
assert_eq!(pref_align_of_val(&1u8), 1u);
|
||||
assert_eq!(pref_align_of_val(&1u16), 2u);
|
||||
assert_eq!(pref_align_of_val(&1u32), 4u);
|
||||
}
|
||||
}
|
||||
|
|
@ -928,7 +928,7 @@ mod tests {
|
|||
|
||||
use num::*;
|
||||
use num;
|
||||
use sys;
|
||||
use mem;
|
||||
|
||||
#[test]
|
||||
fn test_num() {
|
||||
|
|
@ -1198,8 +1198,8 @@ mod tests {
|
|||
#[test]
|
||||
fn test_primitive() {
|
||||
let none: Option<f32> = None;
|
||||
assert_eq!(Primitive::bits(none), sys::size_of::<f32>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), sys::size_of::<f32>());
|
||||
assert_eq!(Primitive::bits(none), mem::size_of::<f32>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), mem::size_of::<f32>());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -976,7 +976,7 @@ mod tests {
|
|||
|
||||
use num::*;
|
||||
use num;
|
||||
use sys;
|
||||
use mem;
|
||||
|
||||
#[test]
|
||||
fn test_num() {
|
||||
|
|
@ -1249,8 +1249,8 @@ mod tests {
|
|||
#[test]
|
||||
fn test_primitive() {
|
||||
let none: Option<f64> = None;
|
||||
assert_eq!(Primitive::bits(none), sys::size_of::<f64>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), sys::size_of::<f64>());
|
||||
assert_eq!(Primitive::bits(none), mem::size_of::<f64>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), mem::size_of::<f64>());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ mod tests {
|
|||
use int;
|
||||
use i32;
|
||||
use num;
|
||||
use sys;
|
||||
use mem;
|
||||
|
||||
#[test]
|
||||
fn test_num() {
|
||||
|
|
@ -653,8 +653,8 @@ mod tests {
|
|||
#[test]
|
||||
fn test_primitive() {
|
||||
let none: Option<$T> = None;
|
||||
assert_eq!(Primitive::bits(none), sys::size_of::<$T>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), sys::size_of::<$T>());
|
||||
assert_eq!(Primitive::bits(none), mem::size_of::<$T>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), mem::size_of::<$T>());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ use num;
|
|||
use num::{CheckedAdd, CheckedSub, CheckedMul};
|
||||
use option::{Option, Some, None};
|
||||
use unstable::intrinsics;
|
||||
use sys;
|
||||
use mem;
|
||||
|
||||
pub use self::generated::*;
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ impl num::Times for uint {
|
|||
/// Returns the smallest power of 2 greater than or equal to `n`
|
||||
#[inline]
|
||||
pub fn next_power_of_two(n: uint) -> uint {
|
||||
let halfbits: uint = sys::size_of::<uint>() * 4u;
|
||||
let halfbits: uint = mem::size_of::<uint>() * 4u;
|
||||
let mut tmp: uint = n - 1u;
|
||||
let mut shift: uint = 1u;
|
||||
while shift <= halfbits { tmp |= tmp >> shift; shift <<= 1u; }
|
||||
|
|
@ -107,7 +107,7 @@ pub fn next_power_of_two(n: uint) -> uint {
|
|||
/// Returns the smallest power of 2 greater than or equal to `n`
|
||||
#[inline]
|
||||
pub fn next_power_of_two_opt(n: uint) -> Option<uint> {
|
||||
let halfbits: uint = sys::size_of::<uint>() * 4u;
|
||||
let halfbits: uint = mem::size_of::<uint>() * 4u;
|
||||
let mut tmp: uint = n - 1u;
|
||||
let mut shift: uint = 1u;
|
||||
while shift <= halfbits { tmp |= tmp >> shift; shift <<= 1u; }
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@ mod tests {
|
|||
use super::*;
|
||||
|
||||
use num;
|
||||
use sys;
|
||||
use mem;
|
||||
use u16;
|
||||
|
||||
#[test]
|
||||
|
|
@ -431,8 +431,8 @@ mod tests {
|
|||
#[test]
|
||||
fn test_primitive() {
|
||||
let none: Option<$T> = None;
|
||||
assert_eq!(Primitive::bits(none), sys::size_of::<$T>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), sys::size_of::<$T>());
|
||||
assert_eq!(Primitive::bits(none), mem::size_of::<$T>() * 8);
|
||||
assert_eq!(Primitive::bytes(none), mem::size_of::<$T>());
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ fn main () {
|
|||
```
|
||||
*/
|
||||
|
||||
use sys::size_of;
|
||||
use mem::size_of;
|
||||
use unstable::raw::Slice;
|
||||
use cast;
|
||||
use container::Container;
|
||||
|
|
@ -952,7 +952,7 @@ mod test {
|
|||
mod bench {
|
||||
use extra::test::BenchHarness;
|
||||
use rand::*;
|
||||
use sys::size_of;
|
||||
use mem::size_of;
|
||||
|
||||
#[bench]
|
||||
fn rand_xorshift(bh: &mut BenchHarness) {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Runtime type reflection
|
|||
|
||||
use unstable::intrinsics::{Opaque, TyDesc, TyVisitor};
|
||||
use libc::c_void;
|
||||
use sys;
|
||||
use mem;
|
||||
use unstable::raw;
|
||||
|
||||
/**
|
||||
|
|
@ -64,12 +64,12 @@ impl<V:TyVisitor + MovePtr> MovePtrAdaptor<V> {
|
|||
|
||||
#[inline]
|
||||
pub fn align_to<T>(&mut self) {
|
||||
self.align(sys::min_align_of::<T>());
|
||||
self.align(mem::min_align_of::<T>());
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn bump_past<T>(&mut self) {
|
||||
self.bump(sys::size_of::<T>());
|
||||
self.bump(mem::size_of::<T>());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -233,6 +233,6 @@ fn align_down(sp: *mut uint) -> *mut uint {
|
|||
// ptr::mut_offset is positive ints only
|
||||
#[inline]
|
||||
pub fn mut_offset<T>(ptr: *mut T, count: int) -> *mut T {
|
||||
use std::sys::size_of;
|
||||
use mem::size_of;
|
||||
(ptr as int + count * (size_of::<T>() as int)) as *mut T
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
use libc::{c_void, c_char, size_t, uintptr_t, free, malloc, realloc};
|
||||
use unstable::intrinsics::TyDesc;
|
||||
use unstable::raw;
|
||||
use sys::size_of;
|
||||
use mem::size_of;
|
||||
|
||||
extern {
|
||||
#[rust_stack]
|
||||
|
|
|
|||
|
|
@ -271,12 +271,12 @@ fn spawn_process_os(prog: &str, args: &[~str],
|
|||
};
|
||||
use libc::funcs::extra::msvcrt::get_osfhandle;
|
||||
|
||||
use sys;
|
||||
use mem;
|
||||
|
||||
unsafe {
|
||||
|
||||
let mut si = zeroed_startupinfo();
|
||||
si.cb = sys::size_of::<STARTUPINFO>() as DWORD;
|
||||
si.cb = mem::size_of::<STARTUPINFO>() as DWORD;
|
||||
si.dwFlags = STARTF_USESTDHANDLES;
|
||||
|
||||
let cur_proc = GetCurrentProcess();
|
||||
|
|
|
|||
|
|
@ -857,7 +857,7 @@ fn new_sched_rng() -> XorShiftRng {
|
|||
#[fixed_stack_segment] #[inline(never)]
|
||||
fn new_sched_rng() -> XorShiftRng {
|
||||
use libc;
|
||||
use sys;
|
||||
use mem;
|
||||
use c_str::ToCStr;
|
||||
use vec::MutableVector;
|
||||
use iter::Iterator;
|
||||
|
|
@ -871,7 +871,7 @@ fn new_sched_rng() -> XorShiftRng {
|
|||
}
|
||||
|
||||
let mut seeds = [0u32, .. 4];
|
||||
let size = sys::size_of_val(&seeds);
|
||||
let size = mem::size_of_val(&seeds);
|
||||
loop {
|
||||
let nbytes = do seeds.as_mut_buf |buf, _| {
|
||||
unsafe {
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ mod darwin_fd_limit {
|
|||
// The strategy here is to fetch the current resource limits, read the kern.maxfilesperproc
|
||||
// sysctl value, and bump the soft resource limit for maxfiles up to the sysctl value.
|
||||
use ptr::{to_unsafe_ptr, to_mut_unsafe_ptr, mut_null};
|
||||
use sys::size_of_val;
|
||||
use mem::size_of_val;
|
||||
use os::last_os_error;
|
||||
|
||||
// Fetch the kern.maxfilesperproc value
|
||||
|
|
|
|||
|
|
@ -189,6 +189,7 @@ pub mod condition;
|
|||
pub mod logging;
|
||||
pub mod util;
|
||||
pub mod routine;
|
||||
pub mod mem;
|
||||
|
||||
/* Unsupported interfaces */
|
||||
|
||||
|
|
|
|||
|
|
@ -19,68 +19,6 @@ use libc;
|
|||
use repr;
|
||||
use rt::task;
|
||||
use str;
|
||||
use unstable::intrinsics;
|
||||
|
||||
/// Returns the size of a type
|
||||
#[inline]
|
||||
pub fn size_of<T>() -> uint {
|
||||
unsafe { intrinsics::size_of::<T>() }
|
||||
}
|
||||
|
||||
/// Returns the size of the type that `_val` points to
|
||||
#[inline]
|
||||
pub fn size_of_val<T>(_val: &T) -> uint {
|
||||
size_of::<T>()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the size of a type, or 1 if the actual size is zero.
|
||||
*
|
||||
* Useful for building structures containing variable-length arrays.
|
||||
*/
|
||||
#[inline]
|
||||
pub fn nonzero_size_of<T>() -> uint {
|
||||
let s = size_of::<T>();
|
||||
if s == 0 { 1 } else { s }
|
||||
}
|
||||
|
||||
/// Returns the size of the type of the value that `_val` points to
|
||||
#[inline]
|
||||
pub fn nonzero_size_of_val<T>(_val: &T) -> uint {
|
||||
nonzero_size_of::<T>()
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the ABI-required minimum alignment of a type
|
||||
*
|
||||
* This is the alignment used for struct fields. It may be smaller
|
||||
* than the preferred alignment.
|
||||
*/
|
||||
#[inline]
|
||||
pub fn min_align_of<T>() -> uint {
|
||||
unsafe { intrinsics::min_align_of::<T>() }
|
||||
}
|
||||
|
||||
/// Returns the ABI-required minimum alignment of the type of the value that
|
||||
/// `_val` points to
|
||||
#[inline]
|
||||
pub fn min_align_of_val<T>(_val: &T) -> uint {
|
||||
min_align_of::<T>()
|
||||
}
|
||||
|
||||
/// Returns the preferred alignment of a type
|
||||
#[inline]
|
||||
pub fn pref_align_of<T>() -> uint {
|
||||
unsafe { intrinsics::pref_align_of::<T>() }
|
||||
}
|
||||
|
||||
/// Returns the preferred alignment of the type of the value that
|
||||
/// `_val` points to
|
||||
#[inline]
|
||||
pub fn pref_align_of_val<T>(_val: &T) -> uint {
|
||||
pref_align_of::<T>()
|
||||
}
|
||||
|
||||
/// Returns the refcount of a shared box (as just before calling this)
|
||||
#[inline]
|
||||
|
|
@ -131,84 +69,6 @@ mod tests {
|
|||
use cast;
|
||||
use sys::*;
|
||||
|
||||
#[test]
|
||||
fn size_of_basic() {
|
||||
assert_eq!(size_of::<u8>(), 1u);
|
||||
assert_eq!(size_of::<u16>(), 2u);
|
||||
assert_eq!(size_of::<u32>(), 4u);
|
||||
assert_eq!(size_of::<u64>(), 8u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86")]
|
||||
#[cfg(target_arch = "arm")]
|
||||
#[cfg(target_arch = "mips")]
|
||||
fn size_of_32() {
|
||||
assert_eq!(size_of::<uint>(), 4u);
|
||||
assert_eq!(size_of::<*uint>(), 4u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
fn size_of_64() {
|
||||
assert_eq!(size_of::<uint>(), 8u);
|
||||
assert_eq!(size_of::<*uint>(), 8u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn size_of_val_basic() {
|
||||
assert_eq!(size_of_val(&1u8), 1);
|
||||
assert_eq!(size_of_val(&1u16), 2);
|
||||
assert_eq!(size_of_val(&1u32), 4);
|
||||
assert_eq!(size_of_val(&1u64), 8);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nonzero_size_of_basic() {
|
||||
type Z = [i8, ..0];
|
||||
assert_eq!(size_of::<Z>(), 0u);
|
||||
assert_eq!(nonzero_size_of::<Z>(), 1u);
|
||||
assert_eq!(nonzero_size_of::<uint>(), size_of::<uint>());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nonzero_size_of_val_basic() {
|
||||
let z = [0u8, ..0];
|
||||
assert_eq!(size_of_val(&z), 0u);
|
||||
assert_eq!(nonzero_size_of_val(&z), 1u);
|
||||
assert_eq!(nonzero_size_of_val(&1u), size_of_val(&1u));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn align_of_basic() {
|
||||
assert_eq!(pref_align_of::<u8>(), 1u);
|
||||
assert_eq!(pref_align_of::<u16>(), 2u);
|
||||
assert_eq!(pref_align_of::<u32>(), 4u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86")]
|
||||
#[cfg(target_arch = "arm")]
|
||||
#[cfg(target_arch = "mips")]
|
||||
fn align_of_32() {
|
||||
assert_eq!(pref_align_of::<uint>(), 4u);
|
||||
assert_eq!(pref_align_of::<*uint>(), 4u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
fn align_of_64() {
|
||||
assert_eq!(pref_align_of::<uint>(), 8u);
|
||||
assert_eq!(pref_align_of::<*uint>(), 8u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn align_of_val_basic() {
|
||||
assert_eq!(pref_align_of_val(&1u8), 1u);
|
||||
assert_eq!(pref_align_of_val(&1u16), 2u);
|
||||
assert_eq!(pref_align_of_val(&1u32), 4u);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn synthesize_closure() {
|
||||
use unstable::raw::Closure;
|
||||
|
|
|
|||
|
|
@ -425,7 +425,7 @@ mod tests {
|
|||
use super::{Exclusive, UnsafeArc, atomically};
|
||||
use task;
|
||||
use util;
|
||||
use sys::size_of;
|
||||
use mem::size_of;
|
||||
|
||||
//#[unsafe_no_drop_flag] FIXME: #9758
|
||||
#[ignore]
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ mod tests {
|
|||
use ops::Drop;
|
||||
use option::{None, Some};
|
||||
use either::{Either, Left, Right};
|
||||
use sys::size_of;
|
||||
use mem::size_of;
|
||||
|
||||
#[test]
|
||||
fn identity_crisis() {
|
||||
|
|
|
|||
|
|
@ -116,8 +116,8 @@ use ptr;
|
|||
use ptr::RawPtr;
|
||||
use rt::global_heap::malloc_raw;
|
||||
use rt::global_heap::realloc_raw;
|
||||
use sys;
|
||||
use sys::size_of;
|
||||
use mem;
|
||||
use mem::size_of;
|
||||
use uint;
|
||||
use unstable::finally::Finally;
|
||||
use unstable::intrinsics;
|
||||
|
|
@ -185,8 +185,8 @@ pub fn with_capacity<T>(capacity: uint) -> ~[T] {
|
|||
vec.reserve(capacity);
|
||||
vec
|
||||
} else {
|
||||
let alloc = capacity * sys::nonzero_size_of::<T>();
|
||||
let ptr = malloc_raw(alloc + sys::size_of::<Vec<()>>()) as *mut Vec<()>;
|
||||
let alloc = capacity * mem::nonzero_size_of::<T>();
|
||||
let ptr = malloc_raw(alloc + mem::size_of::<Vec<()>>()) as *mut Vec<()>;
|
||||
(*ptr).alloc = alloc;
|
||||
(*ptr).fill = 0;
|
||||
cast::transmute(ptr)
|
||||
|
|
@ -1002,7 +1002,7 @@ impl<'self,T> ImmutableVector<'self, T> for &'self [T] {
|
|||
fn iter(self) -> VecIterator<'self, T> {
|
||||
unsafe {
|
||||
let p = vec::raw::to_ptr(self);
|
||||
if sys::size_of::<T>() == 0 {
|
||||
if mem::size_of::<T>() == 0 {
|
||||
VecIterator{ptr: p,
|
||||
end: (p as uint + self.len()) as *T,
|
||||
lifetime: None}
|
||||
|
|
@ -1406,9 +1406,9 @@ impl<T> OwnedVector<T> for ~[T] {
|
|||
::at_vec::raw::reserve_raw(td, ptr, n);
|
||||
} else {
|
||||
let ptr: *mut *mut Vec<()> = cast::transmute(self);
|
||||
let alloc = n * sys::nonzero_size_of::<T>();
|
||||
let size = alloc + sys::size_of::<Vec<()>>();
|
||||
if alloc / sys::nonzero_size_of::<T>() != n || size < alloc {
|
||||
let alloc = n * mem::nonzero_size_of::<T>();
|
||||
let size = alloc + mem::size_of::<Vec<()>>();
|
||||
if alloc / mem::nonzero_size_of::<T>() != n || size < alloc {
|
||||
fail2!("vector size is too large: {}", n);
|
||||
}
|
||||
*ptr = realloc_raw(*ptr as *mut c_void, size)
|
||||
|
|
@ -1439,10 +1439,10 @@ impl<T> OwnedVector<T> for ~[T] {
|
|||
unsafe {
|
||||
if contains_managed::<T>() {
|
||||
let repr: **Box<Vec<()>> = cast::transmute(self);
|
||||
(**repr).data.alloc / sys::nonzero_size_of::<T>()
|
||||
(**repr).data.alloc / mem::nonzero_size_of::<T>()
|
||||
} else {
|
||||
let repr: **Vec<()> = cast::transmute(self);
|
||||
(**repr).alloc / sys::nonzero_size_of::<T>()
|
||||
(**repr).alloc / mem::nonzero_size_of::<T>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1451,7 +1451,7 @@ impl<T> OwnedVector<T> for ~[T] {
|
|||
unsafe {
|
||||
let ptr: *mut *mut Vec<()> = cast::transmute(self);
|
||||
let alloc = (**ptr).fill;
|
||||
let size = alloc + sys::size_of::<Vec<()>>();
|
||||
let size = alloc + mem::size_of::<Vec<()>>();
|
||||
*ptr = realloc_raw(*ptr as *mut c_void, size) as *mut Vec<()>;
|
||||
(**ptr).alloc = alloc;
|
||||
}
|
||||
|
|
@ -1485,14 +1485,14 @@ impl<T> OwnedVector<T> for ~[T] {
|
|||
if contains_managed::<T>() {
|
||||
let repr: **mut Box<Vec<u8>> = cast::transmute(this);
|
||||
let fill = (**repr).data.fill;
|
||||
(**repr).data.fill += sys::nonzero_size_of::<T>();
|
||||
(**repr).data.fill += mem::nonzero_size_of::<T>();
|
||||
let p = to_unsafe_ptr(&((**repr).data.data));
|
||||
let p = ptr::offset(p, fill as int) as *mut T;
|
||||
intrinsics::move_val_init(&mut(*p), t);
|
||||
} else {
|
||||
let repr: **mut Vec<u8> = cast::transmute(this);
|
||||
let fill = (**repr).fill;
|
||||
(**repr).fill += sys::nonzero_size_of::<T>();
|
||||
(**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;
|
||||
intrinsics::move_val_init(&mut(*p), t);
|
||||
|
|
@ -1957,7 +1957,7 @@ impl<'self,T> MutableVector<'self, T> for &'self mut [T] {
|
|||
fn mut_iter(self) -> VecMutIterator<'self, T> {
|
||||
unsafe {
|
||||
let p = vec::raw::to_mut_ptr(self);
|
||||
if sys::size_of::<T>() == 0 {
|
||||
if mem::size_of::<T>() == 0 {
|
||||
VecMutIterator{ptr: p,
|
||||
end: (p as uint + self.len()) as *mut T,
|
||||
lifetime: None}
|
||||
|
|
@ -2054,7 +2054,7 @@ pub mod raw {
|
|||
use clone::Clone;
|
||||
use option::Some;
|
||||
use ptr;
|
||||
use sys;
|
||||
use mem;
|
||||
use unstable::intrinsics;
|
||||
use vec::{with_capacity, ImmutableVector, MutableVector};
|
||||
use unstable::intrinsics::contains_managed;
|
||||
|
|
@ -2071,10 +2071,10 @@ pub mod raw {
|
|||
pub unsafe fn set_len<T>(v: &mut ~[T], new_len: uint) {
|
||||
if contains_managed::<T>() {
|
||||
let repr: **mut Box<Vec<()>> = cast::transmute(v);
|
||||
(**repr).data.fill = new_len * sys::nonzero_size_of::<T>();
|
||||
(**repr).data.fill = new_len * mem::nonzero_size_of::<T>();
|
||||
} else {
|
||||
let repr: **mut Vec<()> = cast::transmute(v);
|
||||
(**repr).fill = new_len * sys::nonzero_size_of::<T>();
|
||||
(**repr).fill = new_len * mem::nonzero_size_of::<T>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2323,7 +2323,7 @@ macro_rules! iterator {
|
|||
None
|
||||
} else {
|
||||
let old = self.ptr;
|
||||
self.ptr = if sys::size_of::<T>() == 0 {
|
||||
self.ptr = if mem::size_of::<T>() == 0 {
|
||||
// purposefully don't use 'ptr.offset' because for
|
||||
// vectors with 0-size elements this would return the
|
||||
// same pointer.
|
||||
|
|
@ -2340,7 +2340,7 @@ macro_rules! iterator {
|
|||
#[inline]
|
||||
fn size_hint(&self) -> (uint, Option<uint>) {
|
||||
let diff = (self.end as uint) - (self.ptr as uint);
|
||||
let exact = diff / sys::nonzero_size_of::<T>();
|
||||
let exact = diff / mem::nonzero_size_of::<T>();
|
||||
(exact, Some(exact))
|
||||
}
|
||||
}
|
||||
|
|
@ -2357,7 +2357,7 @@ macro_rules! double_ended_iterator {
|
|||
if self.end == self.ptr {
|
||||
None
|
||||
} else {
|
||||
self.end = if sys::size_of::<T>() == 0 {
|
||||
self.end = if mem::size_of::<T>() == 0 {
|
||||
// See above for why 'ptr.offset' isn't used
|
||||
cast::transmute(self.end as uint - 1)
|
||||
} else {
|
||||
|
|
@ -2497,7 +2497,7 @@ impl<A> Extendable<A> for ~[A] {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use option::{None, Option, Some};
|
||||
use sys;
|
||||
use mem;
|
||||
use vec::*;
|
||||
use cmp::*;
|
||||
use prelude::*;
|
||||
|
|
@ -2597,7 +2597,7 @@ mod tests {
|
|||
let v0 : &[Z] = &[];
|
||||
let v1 : &[Z] = &[[]];
|
||||
let v2 : &[Z] = &[[], []];
|
||||
assert_eq!(sys::size_of::<Z>(), 0);
|
||||
assert_eq!(mem::size_of::<Z>(), 0);
|
||||
assert_eq!(v0.len(), 0);
|
||||
assert_eq!(v1.len(), 1);
|
||||
assert_eq!(v2.len(), 2);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue