Convert vec::{grow, grow_fn, grow_set} to methods.
This commit is contained in:
@@ -20,7 +20,6 @@ use std::cmp;
|
|||||||
use std::container::{Container, Mutable, Map, Set};
|
use std::container::{Container, Mutable, Map, Set};
|
||||||
use std::uint;
|
use std::uint;
|
||||||
use std::util::replace;
|
use std::util::replace;
|
||||||
use std::vec;
|
|
||||||
|
|
||||||
#[allow(missing_doc)]
|
#[allow(missing_doc)]
|
||||||
pub struct SmallIntMap<T> {
|
pub struct SmallIntMap<T> {
|
||||||
@@ -86,7 +85,7 @@ impl<V> Map<uint, V> for SmallIntMap<V> {
|
|||||||
let exists = self.contains_key(&key);
|
let exists = self.contains_key(&key);
|
||||||
let len = self.v.len();
|
let len = self.v.len();
|
||||||
if len <= key {
|
if len <= key {
|
||||||
vec::grow_fn(&mut self.v, key - len + 1, |_| None);
|
self.v.grow_fn(key - len + 1, |_| None);
|
||||||
}
|
}
|
||||||
self.v[key] = Some(value);
|
self.v[key] = Some(value);
|
||||||
!exists
|
!exists
|
||||||
|
|||||||
@@ -363,63 +363,6 @@ pub fn append_one<T>(lhs: ~[T], x: T) -> ~[T] {
|
|||||||
v
|
v
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Expands a vector in place, initializing the new elements to a given value
|
|
||||||
*
|
|
||||||
* # Arguments
|
|
||||||
*
|
|
||||||
* * v - The vector to grow
|
|
||||||
* * n - The number of elements to add
|
|
||||||
* * initval - The value for the new elements
|
|
||||||
*/
|
|
||||||
pub fn grow<T:Copy>(v: &mut ~[T], n: uint, initval: &T) {
|
|
||||||
let new_len = v.len() + n;
|
|
||||||
v.reserve_at_least(new_len);
|
|
||||||
let mut i: uint = 0u;
|
|
||||||
|
|
||||||
while i < n {
|
|
||||||
v.push(copy *initval);
|
|
||||||
i += 1u;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Expands a vector in place, initializing the new elements to the result of
|
|
||||||
* a function
|
|
||||||
*
|
|
||||||
* Function `init_op` is called `n` times with the values [0..`n`)
|
|
||||||
*
|
|
||||||
* # Arguments
|
|
||||||
*
|
|
||||||
* * v - The vector to grow
|
|
||||||
* * n - The number of elements to add
|
|
||||||
* * init_op - A function to call to retreive each appended element's
|
|
||||||
* value
|
|
||||||
*/
|
|
||||||
pub fn grow_fn<T>(v: &mut ~[T], n: uint, op: &fn(uint) -> T) {
|
|
||||||
let new_len = v.len() + n;
|
|
||||||
v.reserve_at_least(new_len);
|
|
||||||
let mut i: uint = 0u;
|
|
||||||
while i < n {
|
|
||||||
v.push(op(i));
|
|
||||||
i += 1u;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the value of a vector element at a given index, growing the vector as
|
|
||||||
* needed
|
|
||||||
*
|
|
||||||
* Sets the element at position `index` to `val`. If `index` is past the end
|
|
||||||
* of the vector, expands the vector by replicating `initval` to fill the
|
|
||||||
* intervening space.
|
|
||||||
*/
|
|
||||||
pub fn grow_set<T:Copy>(v: &mut ~[T], index: uint, initval: &T, val: T) {
|
|
||||||
let l = v.len();
|
|
||||||
if index >= l { grow(&mut *v, index - l + 1u, initval); }
|
|
||||||
v[index] = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Functional utilities
|
// Functional utilities
|
||||||
|
|
||||||
/// Apply a function to each element of a vector and return the results
|
/// Apply a function to each element of a vector and return the results
|
||||||
@@ -1648,9 +1591,26 @@ impl<T> OwnedVector<T> for ~[T] {
|
|||||||
(lefts, rights)
|
(lefts, rights)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
/**
|
||||||
|
* Expands a vector in place, initializing the new elements to the result of
|
||||||
|
* a function
|
||||||
|
*
|
||||||
|
* Function `init_op` is called `n` times with the values [0..`n`)
|
||||||
|
*
|
||||||
|
* # Arguments
|
||||||
|
*
|
||||||
|
* * n - The number of elements to add
|
||||||
|
* * init_op - A function to call to retreive each appended element's
|
||||||
|
* value
|
||||||
|
*/
|
||||||
fn grow_fn(&mut self, n: uint, op: &fn(uint) -> T) {
|
fn grow_fn(&mut self, n: uint, op: &fn(uint) -> T) {
|
||||||
grow_fn(self, n, op);
|
let new_len = self.len() + n;
|
||||||
|
self.reserve_at_least(new_len);
|
||||||
|
let mut i: uint = 0u;
|
||||||
|
while i < n {
|
||||||
|
self.push(op(i));
|
||||||
|
i += 1u;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1687,14 +1647,37 @@ impl<T:Copy> OwnedCopyableVector<T> for ~[T] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
/**
|
||||||
|
* Expands a vector in place, initializing the new elements to a given value
|
||||||
|
*
|
||||||
|
* # Arguments
|
||||||
|
*
|
||||||
|
* * n - The number of elements to add
|
||||||
|
* * initval - The value for the new elements
|
||||||
|
*/
|
||||||
fn grow(&mut self, n: uint, initval: &T) {
|
fn grow(&mut self, n: uint, initval: &T) {
|
||||||
grow(self, n, initval);
|
let new_len = self.len() + n;
|
||||||
|
self.reserve_at_least(new_len);
|
||||||
|
let mut i: uint = 0u;
|
||||||
|
|
||||||
|
while i < n {
|
||||||
|
self.push(copy *initval);
|
||||||
|
i += 1u;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
/**
|
||||||
|
* Sets the value of a vector element at a given index, growing the vector as
|
||||||
|
* needed
|
||||||
|
*
|
||||||
|
* Sets the element at position `index` to `val`. If `index` is past the end
|
||||||
|
* of the vector, expands the vector by replicating `initval` to fill the
|
||||||
|
* intervening space.
|
||||||
|
*/
|
||||||
fn grow_set(&mut self, index: uint, initval: &T, val: T) {
|
fn grow_set(&mut self, index: uint, initval: &T, val: T) {
|
||||||
grow_set(self, index, initval, val);
|
let l = self.len();
|
||||||
|
if index >= l { self.grow(index - l + 1u, initval); }
|
||||||
|
self[index] = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,9 +69,7 @@ fn AsciiArt(width: uint, height: uint, fill: char) -> AsciiArt {
|
|||||||
// blank characters for each position in our canvas.
|
// blank characters for each position in our canvas.
|
||||||
let mut lines = do vec::build_sized(height) |push| {
|
let mut lines = do vec::build_sized(height) |push| {
|
||||||
for height.times {
|
for height.times {
|
||||||
let mut line = ~[];
|
push(vec::from_elem(width, '.'));
|
||||||
vec::grow_set(&mut line, width-1, &'.', '.');
|
|
||||||
push(line);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user