Skip to content

Commit f7419d5

Browse files
thestingergraydon
authored andcommitted
---
yaml --- r: 41804 b: refs/heads/master c: 9fb4908 h: refs/heads/master v: v3
1 parent 013d004 commit f7419d5

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 8935771377207f74c69d6011cde006998c3a8fb8
2+
refs/heads/master: 9fb49088b35ae82c290ed112cdc87b71986d3d7e
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 2f46b763da2c098913884f101b6d71d69af41b49
55
refs/heads/try: 3d5418789064fdb463e872a4e651af1c628a3650

trunk/src/libstd/treemap.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,24 @@ impl <T: Ord> TreeSet<T> {
237237
/// Return true if the set has no elements in common with `other`.
238238
/// This is equivalent to checking for an empty intersection.
239239
pure fn is_disjoint(&self, other: &TreeSet<T>) -> bool {
240-
// FIXME: this is a naive O(n*log(m)) implementation, could be O(n + m)
241-
!iter::any(self, |x| other.contains(x))
240+
let mut x = self.iter();
241+
let mut y = other.iter();
242+
unsafe { // purity workaround
243+
let mut a = x.next();
244+
let mut b = y.next();
245+
while a.is_some() && b.is_some() {
246+
let a1 = a.unwrap();
247+
let b1 = b.unwrap();
248+
if a1 < b1 {
249+
a = x.next();
250+
} else if b1 < a1 {
251+
b = y.next();
252+
} else {
253+
return false;
254+
}
255+
}
256+
}
257+
true
242258
}
243259

244260
/// Check of the set is a subset of another

0 commit comments

Comments
 (0)