core: replace vec.truncate(0) with vec.clear()
[nihav.git] / nihav-core / src / scale / palette / elbg.rs
index 09269010aa71843c667d6f499be42d1ee6078038..9a7d96701e764e38729778da71daa7af6c6c61a2 100644 (file)
@@ -8,7 +8,7 @@ impl RNG {
     fn new() -> Self { Self { seed: 0x1234 } }
     fn next(&mut self) -> u8 {
         if (self.seed & 0x8000) != 0 {
-            self.seed = (self.seed & 0x7FFF) * 2 ^ 0x1B2B;
+            self.seed = ((self.seed & 0x7FFF) * 2) ^ 0x1B2B;
         } else {
             self.seed <<= 1;
         }
@@ -66,9 +66,6 @@ impl Cluster {
         }
     }
     fn calc_dist(&mut self) {
-        if self.count != 0 {
-            self.dist = (self.dist + self.count / 2) / self.count;
-        }
     }
 }
 
@@ -198,6 +195,7 @@ impl ELBG {
         clu1.calc_dist();
         clu0.dist + clu1.dist
     }
+    #[allow(clippy::cognitive_complexity)]
     pub fn quantise(&mut self, src: &[Pixel], dst: &mut [[u8; 3]; 256]) {
         if src.len() < 3 {
             return;
@@ -231,14 +229,14 @@ impl ELBG {
         let mut rng = RNG::new();
         let mut iterations = 0usize;
         let mut do_elbg_step = true;
-        while (iterations < 20) && (dist < prev_dist - prev_dist / 1000) {
+        while (iterations < 10) && (dist < prev_dist - prev_dist / 100) {
             prev_dist = dist;
             for i in 0..256 {
                 old_cb[i] = self.clusters[i].centroid;
                 self.clusters[i].reset();
             }
             // put pixels into the nearest clusters
-            indices.truncate(0);
+            indices.clear();
             for entry in entries.iter() {
                 let mut bestidx = 0;
                 let mut bestdist = std::u32::MAX;
@@ -269,8 +267,8 @@ impl ELBG {
             }
 
             let dmean = dist / 256;
-            low_u.truncate(0);
-            high_u.truncate(0);
+            low_u.clear();
+            high_u.clear();
             let mut used = [false; 256];
             for (i, cluster) in self.clusters.iter().enumerate() {
                 if cluster.dist < dmean {
@@ -284,7 +282,7 @@ impl ELBG {
             if do_elbg_step {
                 do_elbg_step = false;
                 for low_idx in low_u.iter() {
-                    if high_u.len() == 0 {
+                    if high_u.is_empty() {
                         break;
                     }
                     let high_idx_idx = (rng.next() as usize) % high_u.len();