Revert "libcore: De-mode at_vec"

This reverts commit ab6318803e.
This commit is contained in:
Tim Chevalier
2012-09-25 20:57:18 -07:00
parent 3023bd8729
commit fe09451a5a
2 changed files with 16 additions and 20 deletions
+15 -19
View File
@@ -1,9 +1,5 @@
//! Managed vectors
// NB: transitionary, de-mode-ing.
#[forbid(deprecated_mode)];
#[forbid(deprecated_pattern)];
use ptr::addr_of;
/// Code for dealing with @-vectors. This is pretty incomplete, and
@@ -25,7 +21,7 @@ fn vec_reserve_shared_actual(++t: *sys::TypeDesc,
/// Returns the number of elements the vector can hold without reallocating
#[inline(always)]
pub pure fn capacity<T>(v: @[const T]) -> uint {
pub pure fn capacity<T>(&&v: @[const T]) -> uint {
unsafe {
let repr: **raw::VecRepr =
::cast::reinterpret_cast(&addr_of(v));
@@ -47,7 +43,7 @@ fn vec_reserve_shared_actual(++t: *sys::TypeDesc,
*/
#[inline(always)]
pub pure fn build_sized<A>(size: uint,
builder: &fn(push: pure fn(+v: A))) -> @[A] {
builder: fn(push: pure fn(+v: A))) -> @[A] {
let mut vec = @[];
unsafe { raw::reserve(vec, size); }
builder(|+x| unsafe { raw::push(vec, move x) });
@@ -65,7 +61,7 @@ fn vec_reserve_shared_actual(++t: *sys::TypeDesc,
* onto the vector being constructed.
*/
#[inline(always)]
pub pure fn build<A>(builder: &fn(push: pure fn(+v: A))) -> @[A] {
pub pure fn build<A>(builder: fn(push: pure fn(+v: A))) -> @[A] {
build_sized(4, builder)
}
@@ -82,8 +78,8 @@ fn vec_reserve_shared_actual(++t: *sys::TypeDesc,
* onto the vector being constructed.
*/
#[inline(always)]
pub pure fn build_sized_opt<A>(+size: Option<uint>,
builder: &fn(push: pure fn(+v: A))) -> @[A] {
pub pure fn build_sized_opt<A>(size: Option<uint>,
builder: fn(push: pure fn(+v: A))) -> @[A] {
build_sized(size.get_default(4), builder)
}
@@ -98,10 +94,10 @@ fn vec_reserve_shared_actual(++t: *sys::TypeDesc,
/// Apply a function to each element of a vector and return the results
pub pure fn map<T, U>(v: &[T], f: &fn(x: &T) -> U) -> @[U] {
pub pure fn map<T, U>(v: &[T], f: fn(T) -> U) -> @[U] {
do build_sized(v.len()) |push| {
for vec::each(v) |elem| {
push(f(elem));
push(f(*elem));
}
}
}
@@ -125,10 +121,10 @@ fn vec_reserve_shared_actual(++t: *sys::TypeDesc,
* Creates an immutable vector of size `n_elts` and initializes the elements
* to the value `t`.
*/
pub pure fn from_elem<T: Copy>(n_elts: uint, t: &T) -> @[T] {
pub pure fn from_elem<T: Copy>(n_elts: uint, t: T) -> @[T] {
do build_sized(n_elts) |push| {
let mut i: uint = 0u;
while i < n_elts { push(copy *t); i += 1u; }
while i < n_elts { push(t); i += 1u; }
}
}
@@ -159,13 +155,13 @@ pub mod raw {
* the vector is actually the specified size.
*/
#[inline(always)]
pub unsafe fn set_len<T>(v: @[const T], new_len: uint) {
pub unsafe fn set_len<T>(&&v: @[const T], new_len: uint) {
let repr: **VecRepr = ::cast::reinterpret_cast(&addr_of(v));
(**repr).unboxed.fill = new_len * sys::size_of::<T>();
}
#[inline(always)]
pub unsafe fn push<T>(v: @[const T], +initval: T) {
pub unsafe fn push<T>(&v: @[const T], +initval: T) {
let repr: **VecRepr = ::cast::reinterpret_cast(&addr_of(v));
let fill = (**repr).unboxed.fill;
if (**repr).unboxed.alloc > fill {
@@ -177,7 +173,7 @@ pub unsafe fn push<T>(v: @[const T], +initval: T) {
}
// This doesn't bother to make sure we have space.
#[inline(always)] // really pretty please
pub unsafe fn push_fast<T>(v: @[const T], +initval: T) {
pub unsafe fn push_fast<T>(&v: @[const T], +initval: T) {
let repr: **VecRepr = ::cast::reinterpret_cast(&addr_of(v));
let fill = (**repr).unboxed.fill;
(**repr).unboxed.fill += sys::size_of::<T>();
@@ -186,7 +182,7 @@ pub unsafe fn push_fast<T>(v: @[const T], +initval: T) {
rusti::move_val_init(*p, move initval);
}
pub unsafe fn push_slow<T>(v: @[const T], +initval: T) {
pub unsafe fn push_slow<T>(&v: @[const T], +initval: T) {
reserve_at_least(v, v.len() + 1u);
push_fast(v, move initval);
}
@@ -202,7 +198,7 @@ pub unsafe fn push_slow<T>(v: @[const T], +initval: T) {
* * v - A vector
* * n - The number of elements to reserve space for
*/
pub unsafe fn reserve<T>(v: @[const T], n: uint) {
pub unsafe fn reserve<T>(&v: @[const T], n: uint) {
// Only make the (slow) call into the runtime if we have to
if capacity(v) < n {
let ptr = addr_of(v) as **VecRepr;
@@ -226,7 +222,7 @@ pub unsafe fn reserve<T>(v: @[const T], n: uint) {
* * v - A vector
* * n - The number of elements to reserve space for
*/
pub unsafe fn reserve_at_least<T>(v: @[const T], n: uint) {
pub unsafe fn reserve_at_least<T>(&v: @[const T], n: uint) {
reserve(v, uint::next_power_of_two(n));
}
+1 -1
View File
@@ -7,7 +7,7 @@
use cmp::{Eq, Ord};
/// A function used to initialize the elements of a sequence
type InitOp<T> = &fn(uint) -> T;
type InitOp<T> = fn(uint) -> T;
trait BaseIter<A> {
pure fn each(blk: fn(v: &A) -> bool);