MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / split_progress

Method split_progress

plugins/pdb-ng/src/parser.rs:471–504  ·  view source on GitHub ↗
(
        original_fn: F,
        subpart: usize,
        subpart_weights: &[f64],
    )

Source from the content-addressed store, hash-verified

469 }
470
471 pub(crate) fn split_progress<'b, F: Fn(usize, usize) -> Result<()> + 'b>(
472 original_fn: F,
473 subpart: usize,
474 subpart_weights: &[f64],
475 ) -> Box<dyn Fn(usize, usize) -> Result<()> + 'b> {
476 // Normalize weights
477 let weight_sum: f64 = subpart_weights.iter().sum();
478 if weight_sum < 0.0001 {
479 return Box::new(|_, _| Ok(()));
480 }
481
482 // Keep a running count of weights for the start
483 let mut subpart_starts = vec![];
484 let mut start = 0f64;
485 for w in subpart_weights {
486 subpart_starts.push(start);
487 start += *w;
488 }
489
490 let subpart_start = subpart_starts[subpart] / weight_sum;
491 let weight = subpart_weights[subpart] / weight_sum;
492
493 Box::new(move |cur: usize, max: usize| {
494 // Just use a large number for easy divisibility
495 let steps = 1000000f64;
496 let subpart_size = steps * weight;
497 let subpart_progress = ((cur as f64) / (max as f64)) * subpart_size;
498
499 original_fn(
500 (subpart_start * steps + subpart_progress) as usize,
501 steps as usize,
502 )
503 })
504 }
505}

Callers 2

upload_new_fileMethod · 0.80
download_to_bndbMethod · 0.80

Calls 2

iterMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected