Remove vec::[r]position_between, replaced by slices & iterators.
This commit is contained in:
parent
5d46bcc0e4
commit
45940ed988
@ -291,12 +291,13 @@ pub fn parse(file: @Reader, longnames: bool) -> Result<~TermInfo, ~str> {
|
|||||||
|
|
||||||
|
|
||||||
// Find the offset of the NUL we want to go to
|
// Find the offset of the NUL we want to go to
|
||||||
let nulpos = vec::position_between(string_table, offset as uint,
|
let nulpos = string_table.slice(offset as uint, string_table_bytes as uint)
|
||||||
string_table_bytes as uint, |&b| b == 0);
|
.iter().position_(|&b| b == 0);
|
||||||
match nulpos {
|
match nulpos {
|
||||||
Some(x) => {
|
Some(len) => {
|
||||||
string_map.insert(name.to_owned(),
|
string_map.insert(name.to_owned(),
|
||||||
string_table.slice(offset as uint, x).to_owned())
|
string_table.slice(offset as uint,
|
||||||
|
offset as uint + len).to_owned())
|
||||||
},
|
},
|
||||||
None => {
|
None => {
|
||||||
return Err(~"invalid file: missing NUL in string_table");
|
return Err(~"invalid file: missing NUL in string_table");
|
||||||
|
@ -193,11 +193,11 @@ pub fn split<T:Copy>(v: &[T], f: &fn(t: &T) -> bool) -> ~[~[T]] {
|
|||||||
let mut start = 0u;
|
let mut start = 0u;
|
||||||
let mut result = ~[];
|
let mut result = ~[];
|
||||||
while start < ln {
|
while start < ln {
|
||||||
match position_between(v, start, ln, |t| f(t)) {
|
match v.slice(start, ln).iter().position_(|t| f(t)) {
|
||||||
None => break,
|
None => break,
|
||||||
Some(i) => {
|
Some(i) => {
|
||||||
result.push(v.slice(start, i).to_owned());
|
result.push(v.slice(start, start + i).to_owned());
|
||||||
start = i + 1u;
|
start += i + 1u;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -217,7 +217,7 @@ pub fn splitn<T:Copy>(v: &[T], n: uint, f: &fn(t: &T) -> bool) -> ~[~[T]] {
|
|||||||
let mut count = n;
|
let mut count = n;
|
||||||
let mut result = ~[];
|
let mut result = ~[];
|
||||||
while start < ln && count > 0u {
|
while start < ln && count > 0u {
|
||||||
match position_between(v, start, ln, |t| f(t)) {
|
match v.slice(start, ln).iter().position_(|t| f(t)) {
|
||||||
None => break,
|
None => break,
|
||||||
Some(i) => {
|
Some(i) => {
|
||||||
result.push(v.slice(start, i).to_owned());
|
result.push(v.slice(start, i).to_owned());
|
||||||
@ -242,7 +242,7 @@ pub fn rsplit<T:Copy>(v: &[T], f: &fn(t: &T) -> bool) -> ~[~[T]] {
|
|||||||
let mut end = ln;
|
let mut end = ln;
|
||||||
let mut result = ~[];
|
let mut result = ~[];
|
||||||
while end > 0 {
|
while end > 0 {
|
||||||
match rposition_between(v, 0, end, |t| f(t)) {
|
match v.slice(0, end).rposition(|t| f(t)) {
|
||||||
None => break,
|
None => break,
|
||||||
Some(i) => {
|
Some(i) => {
|
||||||
result.push(v.slice(i + 1, end).to_owned());
|
result.push(v.slice(i + 1, end).to_owned());
|
||||||
@ -267,7 +267,7 @@ pub fn rsplitn<T:Copy>(v: &[T], n: uint, f: &fn(t: &T) -> bool) -> ~[~[T]] {
|
|||||||
let mut count = n;
|
let mut count = n;
|
||||||
let mut result = ~[];
|
let mut result = ~[];
|
||||||
while end > 0u && count > 0u {
|
while end > 0u && count > 0u {
|
||||||
match rposition_between(v, 0u, end, |t| f(t)) {
|
match v.slice(0, end).rposition(|t| f(t)) {
|
||||||
None => break,
|
None => break,
|
||||||
Some(i) => {
|
Some(i) => {
|
||||||
result.push(v.slice(i + 1u, end).to_owned());
|
result.push(v.slice(i + 1u, end).to_owned());
|
||||||
@ -657,25 +657,6 @@ pub fn position_elem<T:Eq>(v: &[T], x: &T) -> Option<uint> {
|
|||||||
v.iter().position_(|y| *x == *y)
|
v.iter().position_(|y| *x == *y)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Find the first index matching some predicate within a range
|
|
||||||
*
|
|
||||||
* Apply function `f` to each element of `v` between the range
|
|
||||||
* [`start`, `end`). When function `f` returns true then an option containing
|
|
||||||
* the index is returned. If `f` matches no elements then none is returned.
|
|
||||||
*/
|
|
||||||
pub fn position_between<T>(v: &[T],
|
|
||||||
start: uint,
|
|
||||||
end: uint,
|
|
||||||
f: &fn(t: &T) -> bool)
|
|
||||||
-> Option<uint> {
|
|
||||||
assert!(start <= end);
|
|
||||||
assert!(end <= v.len());
|
|
||||||
let mut i = start;
|
|
||||||
while i < end { if f(&v[i]) { return Some::<uint>(i); } i += 1u; }
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Find the last index containing a matching value
|
/// Find the last index containing a matching value
|
||||||
pub fn rposition_elem<T:Eq>(v: &[T], x: &T) -> Option<uint> {
|
pub fn rposition_elem<T:Eq>(v: &[T], x: &T) -> Option<uint> {
|
||||||
rposition(v, |y| *x == *y)
|
rposition(v, |y| *x == *y)
|
||||||
@ -689,31 +670,12 @@ pub fn rposition_elem<T:Eq>(v: &[T], x: &T) -> Option<uint> {
|
|||||||
* matches no elements then none is returned.
|
* matches no elements then none is returned.
|
||||||
*/
|
*/
|
||||||
pub fn rposition<T>(v: &[T], f: &fn(t: &T) -> bool) -> Option<uint> {
|
pub fn rposition<T>(v: &[T], f: &fn(t: &T) -> bool) -> Option<uint> {
|
||||||
rposition_between(v, 0u, v.len(), f)
|
for v.rev_iter().enumerate().advance |(i, t)| {
|
||||||
}
|
if f(t) { return Some(v.len() - i - 1); }
|
||||||
|
|
||||||
/**
|
|
||||||
* Find the last index matching some predicate within a range
|
|
||||||
*
|
|
||||||
* Apply function `f` to each element of `v` in reverse order between the
|
|
||||||
* range [`start`, `end`). When function `f` returns true then an option
|
|
||||||
* containing the index is returned. If `f` matches no elements then none is
|
|
||||||
* returned.
|
|
||||||
*/
|
|
||||||
pub fn rposition_between<T>(v: &[T], start: uint, end: uint,
|
|
||||||
f: &fn(t: &T) -> bool) -> Option<uint> {
|
|
||||||
assert!(start <= end);
|
|
||||||
assert!(end <= v.len());
|
|
||||||
let mut i = end;
|
|
||||||
while i > start {
|
|
||||||
if f(&v[i - 1u]) { return Some::<uint>(i - 1u); }
|
|
||||||
i -= 1u;
|
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Binary search a sorted vector with a comparator function.
|
* Binary search a sorted vector with a comparator function.
|
||||||
*
|
*
|
||||||
@ -2885,34 +2847,6 @@ mod tests {
|
|||||||
assert!(position_elem(v1, &4).is_none());
|
assert!(position_elem(v1, &4).is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_position_between() {
|
|
||||||
assert!(position_between([], 0u, 0u, f).is_none());
|
|
||||||
|
|
||||||
fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' }
|
|
||||||
let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')];
|
|
||||||
|
|
||||||
assert!(position_between(v, 0u, 0u, f).is_none());
|
|
||||||
assert!(position_between(v, 0u, 1u, f).is_none());
|
|
||||||
assert_eq!(position_between(v, 0u, 2u, f), Some(1u));
|
|
||||||
assert_eq!(position_between(v, 0u, 3u, f), Some(1u));
|
|
||||||
assert_eq!(position_between(v, 0u, 4u, f), Some(1u));
|
|
||||||
|
|
||||||
assert!(position_between(v, 1u, 1u, f).is_none());
|
|
||||||
assert_eq!(position_between(v, 1u, 2u, f), Some(1u));
|
|
||||||
assert_eq!(position_between(v, 1u, 3u, f), Some(1u));
|
|
||||||
assert_eq!(position_between(v, 1u, 4u, f), Some(1u));
|
|
||||||
|
|
||||||
assert!(position_between(v, 2u, 2u, f).is_none());
|
|
||||||
assert!(position_between(v, 2u, 3u, f).is_none());
|
|
||||||
assert_eq!(position_between(v, 2u, 4u, f), Some(3u));
|
|
||||||
|
|
||||||
assert!(position_between(v, 3u, 3u, f).is_none());
|
|
||||||
assert_eq!(position_between(v, 3u, 4u, f), Some(3u));
|
|
||||||
|
|
||||||
assert!(position_between(v, 4u, 4u, f).is_none());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_rposition() {
|
fn test_rposition() {
|
||||||
fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' }
|
fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' }
|
||||||
@ -2923,34 +2857,6 @@ mod tests {
|
|||||||
assert!(rposition(v, g).is_none());
|
assert!(rposition(v, g).is_none());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_rposition_between() {
|
|
||||||
assert!(rposition_between([], 0u, 0u, f).is_none());
|
|
||||||
|
|
||||||
fn f(xy: &(int, char)) -> bool { let (_x, y) = *xy; y == 'b' }
|
|
||||||
let v = ~[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'b')];
|
|
||||||
|
|
||||||
assert!(rposition_between(v, 0u, 0u, f).is_none());
|
|
||||||
assert!(rposition_between(v, 0u, 1u, f).is_none());
|
|
||||||
assert_eq!(rposition_between(v, 0u, 2u, f), Some(1u));
|
|
||||||
assert_eq!(rposition_between(v, 0u, 3u, f), Some(1u));
|
|
||||||
assert_eq!(rposition_between(v, 0u, 4u, f), Some(3u));
|
|
||||||
|
|
||||||
assert!(rposition_between(v, 1u, 1u, f).is_none());
|
|
||||||
assert_eq!(rposition_between(v, 1u, 2u, f), Some(1u));
|
|
||||||
assert_eq!(rposition_between(v, 1u, 3u, f), Some(1u));
|
|
||||||
assert_eq!(rposition_between(v, 1u, 4u, f), Some(3u));
|
|
||||||
|
|
||||||
assert!(rposition_between(v, 2u, 2u, f).is_none());
|
|
||||||
assert!(rposition_between(v, 2u, 3u, f).is_none());
|
|
||||||
assert_eq!(rposition_between(v, 2u, 4u, f), Some(3u));
|
|
||||||
|
|
||||||
assert!(rposition_between(v, 3u, 3u, f).is_none());
|
|
||||||
assert_eq!(rposition_between(v, 3u, 4u, f), Some(3u));
|
|
||||||
|
|
||||||
assert!(rposition_between(v, 4u, 4u, f).is_none());
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_bsearch_elem() {
|
fn test_bsearch_elem() {
|
||||||
assert_eq!(bsearch_elem([1,2,3,4,5], &5), Some(4));
|
assert_eq!(bsearch_elem([1,2,3,4,5], &5), Some(4));
|
||||||
|
Loading…
Reference in New Issue
Block a user