Convert vec::{head, tail, init, last} (and similar fns) to methods.

This commit is contained in:
Huon Wilson 2013-06-27 22:36:27 +10:00
parent d0512b1055
commit d2e3e1e52b
7 changed files with 33 additions and 59 deletions

View File

@ -75,7 +75,7 @@ pub fn parse_config(args: ~[~str]) -> config {
];
assert!(!args.is_empty());
let args_ = vec::tail(args);
let args_ = args.tail();
let matches =
&match getopts::getopts(args_, opts) {
Ok(m) => m,

View File

@ -139,7 +139,7 @@ pub struct TestOpts {
// Parses command line arguments into test options
pub fn parse_opts(args: &[~str]) -> OptRes {
let args_ = vec::tail(args);
let args_ = args.tail();
let opts = ~[getopts::optflag("ignored"),
getopts::optflag("test"),
getopts::optflag("bench"),

View File

@ -312,7 +312,7 @@ fn llvec_len(cls: &[RegClass]) -> uint {
tys.push(Type::i64());
}
SSEFv => {
let vec_len = llvec_len(vec::tailn(cls, i + 1u)) * 2u;
let vec_len = llvec_len(cls.tailn(i + 1u)) * 2u;
let vec_ty = Type::vector(&Type::f32(), vec_len as u64);
tys.push(vec_ty);
i += vec_len;

View File

@ -47,7 +47,6 @@
use middle::trans::type_::Type;
use core::vec;
use syntax::ast;
use syntax::ast_map;
use syntax::visit;
@ -503,7 +502,7 @@ pub fn trans_call_inner(in_cx: block,
do base::with_scope(in_cx, call_info, "call") |cx| {
let ret_in_loop = match args {
ArgExprs(args) => {
args.len() > 0u && match vec::last(args).node {
args.len() > 0u && match args.last().node {
ast::expr_loop_body(@ast::expr {
node: ast::expr_fn_block(_, ref body),
_

View File

@ -492,8 +492,7 @@ pub fn combine_impl_and_methods_tps(bcx: block,
debug!("rcvr_substs=%?", rcvr_substs.map(|t| bcx.ty_to_str(*t)));
let ty_substs
= vec::append(rcvr_substs.to_owned(),
vec::tailn(node_substs,
node_substs.len() - n_m_tps));
node_substs.tailn(node_substs.len() - n_m_tps));
debug!("n_m_tps=%?", n_m_tps);
debug!("node_substs=%?", node_substs.map(|t| bcx.ty_to_str(*t)));
debug!("ty_substs=%?", ty_substs.map(|t| bcx.ty_to_str(*t)));
@ -540,7 +539,7 @@ pub fn combine_impl_and_methods_origins(bcx: block,
};
// Extract those that belong to method:
let m_origins = vec::tailn(*r_m_origins, r_m_origins.len() - m_vtables);
let m_origins = r_m_origins.tailn(r_m_origins.len() - m_vtables);
// Combine rcvr + method to find the final result:
@vec::append(/*bad*/copy *rcvr_origins, m_origins)

View File

@ -3954,7 +3954,7 @@ pub fn item_path(cx: ctxt, id: ast::def_id) -> ast_map::path {
}
ast_map::node_variant(ref variant, _, path) => {
vec::append_one(vec::to_owned(vec::init(*path)),
vec::append_one(vec::to_owned(path.init()),
ast_map::path_name((*variant).node.name))
}

View File

@ -238,44 +238,6 @@ pub fn build_sized_opt<A>(size: Option<uint>,
// Accessors
/// Returns the first element of a vector
pub fn head<'r,T>(v: &'r [T]) -> &'r T {
if v.len() == 0 { fail!("head: empty vector") }
&v[0]
}
/// Returns `Some(x)` where `x` is the first element of the slice `v`,
/// or `None` if the vector is empty.
pub fn head_opt<'r,T>(v: &'r [T]) -> Option<&'r T> {
if v.len() == 0 { None } else { Some(&v[0]) }
}
/// Returns a vector containing all but the first element of a slice
pub fn tail<'r,T>(v: &'r [T]) -> &'r [T] { v.slice(1, v.len()) }
/// Returns a vector containing all but the first `n` elements of a slice
pub fn tailn<'r,T>(v: &'r [T], n: uint) -> &'r [T] { v.slice(n, v.len()) }
/// Returns a vector containing all but the last element of a slice
pub fn init<'r,T>(v: &'r [T]) -> &'r [T] { v.slice(0, v.len() - 1) }
/// Returns a vector containing all but the last `n' elements of a slice
pub fn initn<'r,T>(v: &'r [T], n: uint) -> &'r [T] {
v.slice(0, v.len() - n)
}
/// Returns the last element of the slice `v`, failing if the slice is empty.
pub fn last<'r,T>(v: &'r [T]) -> &'r T {
if v.len() == 0 { fail!("last: empty vector") }
&v[v.len() - 1]
}
/// Returns `Some(x)` where `x` is the last element of the slice `v`, or
/// `None` if the vector is empty.
pub fn last_opt<'r,T>(v: &'r [T]) -> Option<&'r T> {
if v.len() == 0 { None } else { Some(&v[v.len() - 1]) }
}
/// Copies
/// Split the vector `v` by applying each element against the predicate `f`.
@ -1678,35 +1640,49 @@ fn rev_iter(self) -> VecRevIterator<'self, T> {
/// Returns the first element of a vector, failing if the vector is empty.
#[inline]
fn head(&self) -> &'self T { head(*self) }
fn head(&self) -> &'self T {
if self.len() == 0 { fail!("head: empty vector") }
&self[0]
}
/// Returns the first element of a vector
/// Returns the first element of a vector, or `None` if it is empty
#[inline]
fn head_opt(&self) -> Option<&'self T> { head_opt(*self) }
fn head_opt(&self) -> Option<&'self T> {
if self.len() == 0 { None } else { Some(&self[0]) }
}
/// Returns all but the first element of a vector
#[inline]
fn tail(&self) -> &'self [T] { tail(*self) }
fn tail(&self) -> &'self [T] { self.slice(1, self.len()) }
/// Returns all but the first `n' elements of a vector
#[inline]
fn tailn(&self, n: uint) -> &'self [T] { tailn(*self, n) }
fn tailn(&self, n: uint) -> &'self [T] { self.slice(n, self.len()) }
/// Returns all but the last elemnt of a vector
/// Returns all but the last element of a vector
#[inline]
fn init(&self) -> &'self [T] { init(*self) }
fn init(&self) -> &'self [T] {
self.slice(0, self.len() - 1)
}
/// Returns all but the last `n' elemnts of a vector
#[inline]
fn initn(&self, n: uint) -> &'self [T] { initn(*self, n) }
fn initn(&self, n: uint) -> &'self [T] {
self.slice(0, self.len() - n)
}
/// Returns the last element of a `v`, failing if the vector is empty.
/// Returns the last element of a vector, failing if the vector is empty.
#[inline]
fn last(&self) -> &'self T { last(*self) }
fn last(&self) -> &'self T {
if self.len() == 0 { fail!("last: empty vector") }
&self[self.len() - 1]
}
/// Returns the last element of a `v`, failing if the vector is empty.
/// Returns the last element of a vector, or `None` if it is empty.
#[inline]
fn last_opt(&self) -> Option<&'self T> { last_opt(*self) }
fn last_opt(&self) -> Option<&'self T> {
if self.len() == 0 { None } else { Some(&self[self.len() - 1]) }
}
/**
* Find the last index matching some predicate