@@ -150,12 +150,7 @@ pub fn kmerge<I>(iterable: I) -> KMerge<<I::Item as IntoIterator>::IntoIter>
150
150
I :: Item : IntoIterator ,
151
151
<<I as IntoIterator >:: Item as IntoIterator >:: Item : PartialOrd
152
152
{
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 )
159
154
}
160
155
161
156
/// 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)
187
182
-> KMergeBy < <I :: Item as IntoIterator >:: IntoIter , F >
188
183
where I : IntoIterator ,
189
184
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 > ,
192
186
{
193
187
let iter = iterable. into_iter ( ) ;
194
188
let ( lower, _) = iter. size_hint ( ) ;
195
189
let mut heap: Vec < _ > = Vec :: with_capacity ( lower) ;
196
190
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 ) ) ;
198
192
KMergeBy { heap : heap, less_than : less_than }
199
193
}
200
194
0 commit comments