Skip to content

Commit 5ecbf53

Browse files
committed
---
yaml --- r: 56570 b: refs/heads/auto c: 6f18bb5 h: refs/heads/master v: v3
1 parent 545f8af commit 5ecbf53

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
1414
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1515
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1616
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
17-
refs/heads/auto: 7fed4800733805156f0d157e45b01de405c4b48e
17+
refs/heads/auto: 6f18bb550e1293e77281b1cc76f1830a4da2d355
1818
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1919
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c

branches/auto/src/libcore/iter.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ much easier to implement.
4141
4242
*/
4343

44+
use option::{Option, Some, None};
45+
4446
pub trait Times {
4547
fn times(&self, it: &fn() -> bool);
4648
}
@@ -104,6 +106,27 @@ pub fn all<T>(predicate: &fn(T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> bool {
104106
true
105107
}
106108

109+
/**
110+
* Return the first element where `predicate` returns `true`, otherwise return `Npne` if no element
111+
* is found.
112+
*
113+
* # Example:
114+
*
115+
* ~~~~
116+
* let xs = ~[1u, 2, 3, 4, 5, 6];
117+
* assert_eq!(*find(|& &x: & &uint| x > 3, |f| xs.each(f)).unwrap(), 4);
118+
* ~~~~
119+
*/
120+
#[inline(always)]
121+
pub fn find<T>(predicate: &fn(&T) -> bool, iter: &fn(f: &fn(T) -> bool)) -> Option<T> {
122+
for iter |x| {
123+
if predicate(&x) {
124+
return Some(x);
125+
}
126+
}
127+
None
128+
}
129+
107130
#[cfg(test)]
108131
mod tests {
109132
use super::*;
@@ -128,4 +151,10 @@ mod tests {
128151
assert!(all(|x: uint| x < 6, |f| uint::range(1, 6, f)));
129152
assert!(!all(|x: uint| x < 5, |f| uint::range(1, 6, f)));
130153
}
154+
155+
#[test]
156+
fn test_find() {
157+
let xs = ~[1u, 2, 3, 4, 5, 6];
158+
assert_eq!(*find(|& &x: & &uint| x > 3, |f| xs.each(f)).unwrap(), 4);
159+
}
131160
}

0 commit comments

Comments
 (0)