@@ -273,11 +273,11 @@ impl UDDSketch {
273273 }
274274 }
275275
276- // This constructor is used to recreate a UddSketch from it's component data
276+ // This constructor is used to recreate a UddSketch from its component data
277277 pub fn new_from_data (
278278 metadata : & UDDSketchMetadata ,
279- keys : impl Iterator < Item = SketchHashKey > ,
280- counts : impl Iterator < Item = u64 > ,
279+ mut keys : impl Iterator < Item = SketchHashKey > ,
280+ mut counts : impl Iterator < Item = u64 > ,
281281 ) -> Self {
282282 let mut sketch = UDDSketch {
283283 buckets : SketchHashMap :: with_capacity ( metadata. values as usize ) ,
@@ -288,27 +288,10 @@ impl UDDSketch {
288288 num_values : metadata. values ,
289289 values_sum : metadata. sum ,
290290 } ;
291- // TODO
292- let keys: Vec < _ > = keys. collect ( ) ;
293- let counts: Vec < _ > = counts. collect ( ) ;
294- assert_eq ! ( keys. len( ) , counts. len( ) ) ;
295- // assert!(keys.is_sorted());
296- for i in 0 ..keys. len ( ) {
297- sketch
298- . buckets
299- . map
300- . entry ( keys[ i] )
301- . or_insert ( SketchHashEntry {
302- count : 0 ,
303- next : if i == keys. len ( ) - 1 {
304- SketchHashKey :: Invalid
305- } else {
306- keys[ i + 1 ]
307- } ,
308- } )
309- . count = counts[ i] ;
291+
292+ while let ( Some ( key) , Some ( count) ) = ( keys. next ( ) , counts. next ( ) ) {
293+ sketch. buckets . entry_upsert ( key, count) ;
310294 }
311- sketch. buckets . head = keys[ 0 ] ;
312295
313296 sketch
314297 }
0 commit comments