Skip to content

Commit e3ab4bc

Browse files
committed
Define kmerge in terms of kmerge_by
1 parent 1ff00a9 commit e3ab4bc

File tree

1 file changed

+3
-9
lines changed

1 file changed

+3
-9
lines changed

src/kmerge_impl.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,7 @@ pub fn kmerge<I>(iterable: I) -> KMerge<<I::Item as IntoIterator>::IntoIter>
150150
I::Item: IntoIterator,
151151
<<I as IntoIterator>::Item as IntoIterator>::Item: PartialOrd
152152
{
153-
let iter = iterable.into_iter();
154-
let (lower, _) = iter.size_hint();
155-
let mut heap = Vec::with_capacity(lower);
156-
heap.extend(iter.filter_map(|it| HeadTail::new(it.into_iter())));
157-
heapify(&mut heap, |a, b| a.head < b.head);
158-
KMerge { heap: heap , less_than: KMergeByLt }
153+
kmerge_by(iterable, KMergeByLt)
159154
}
160155

161156
/// An iterator adaptor that merges an abitrary number of base iterators
@@ -187,14 +182,13 @@ pub fn kmerge_by<I, F>(iterable: I, mut less_than: F)
187182
-> KMergeBy<<I::Item as IntoIterator>::IntoIter, F>
188183
where I: IntoIterator,
189184
I::Item: IntoIterator,
190-
F: FnMut(&<<I as IntoIterator>::Item as IntoIterator>::Item,
191-
&<<I as IntoIterator>::Item as IntoIterator>::Item) -> bool
185+
F: KMergePredicate<<<I as IntoIterator>::Item as IntoIterator>::Item>,
192186
{
193187
let iter = iterable.into_iter();
194188
let (lower, _) = iter.size_hint();
195189
let mut heap: Vec<_> = Vec::with_capacity(lower);
196190
heap.extend(iter.filter_map(|it| HeadTail::new(it.into_iter())));
197-
heapify(&mut heap, |a, b| less_than(&a.head, &b.head));
191+
heapify(&mut heap, |a, b| less_than.kmerge_pred(&a.head, &b.head));
198192
KMergeBy { heap: heap, less_than: less_than }
199193
}
200194

0 commit comments

Comments
 (0)