1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
pub mod http; pub mod timer; pub mod tmp_image_access; pub use self::http::get_bytes; pub use self::timer::Timer; pub use self::tmp_image_access::TmpImageViewAccess; use std::sync::Arc; pub fn do_work<W: Send + 'static>(work: Vec<W>, func: Arc<dyn Fn(W) + Send + Sync>) { let threads = ::num_cpus::get(); let mut split = Vec::new(); for _ in 0..threads { split.push(Vec::new()); } let mut t = 0; for w in work { split[t].push(w); t += 1; if t >= threads { t = 0; } } let mut handles = Vec::new(); for tw in split { let f = func.clone(); handles.push(::thread::spawn(move || { for w in tw { f(w); } })); } for handle in handles { let _ = handle.join(); } } pub fn partial_ord_min<T: PartialOrd>(v1: T, v2: T) -> T { if v1 < v2 { v1 } else { v2 } } pub fn partial_ord_min3<T: PartialOrd>(v1: T, v2: T, v3: T) -> T { partial_ord_min(partial_ord_min(v1, v2), v3) } pub fn partial_ord_max<T: PartialOrd>(v1: T, v2: T) -> T { if v1 > v2 { v1 } else { v2 } } pub fn partial_ord_max3<T: PartialOrd>(v1: T, v2: T, v3: T) -> T { partial_ord_max(partial_ord_max(v1, v2), v3) }