archivelib 0.1.1

An implementaton of the Greenleaf ArchiveLib compression/decompression algorithm
Documentation
use crate::compress::{CompressU16ArrayAlias, CompressU8ArrayAlias, RCompressData, Result};

use crate::support::ArrayAlias;
use crate::support::BitwiseWrite;
use std::io::Read;

impl<R: Read, W: BitwiseWrite> RCompressData<R, W> {
  pub fn fn211(
    &mut self,
    var212: i32,
    dat_arr_cursor187: &mut CompressU16ArrayAlias<'_>,
    dat_arr_cursor178: &mut CompressU8ArrayAlias<'_>,
    dat_arr_cursor188: &mut CompressU16ArrayAlias<'_>,
  ) -> Result<u32> {
    let dat_arr_cursor178_offset = dat_arr_cursor178.offset(self);
    let dat_arr_cursor188_offset = dat_arr_cursor188.offset(self);

    self.dat174 = var212 as i16;
    let mut var292 = var212 as u32;
    let mut var227 = 0;
    self.dat_arr177[1] = 0;
    for i in 0..(self.dat174 as usize) {
      dat_arr_cursor178.set(self, i, 0);
      if 0 != dat_arr_cursor187.get(self, i) {
        var227 += 1;
        self.dat_arr177[var227] = i as i16
      }
    }
    if var227 < 2 {
      dat_arr_cursor188.set(self, self.dat_arr177[1] as usize, 0);
      Ok(self.dat_arr177[1] as u32)
    } else {
      let mut run_start226 = (var227 / 2) as i16;
      while run_start226 >= 1 {
        self.fn225(i32::from(run_start226), dat_arr_cursor187, var227 as i16);
        run_start226 -= 1
      }
      let mut var289;
      loop {
        run_start226 = self.dat_arr177[1];
        if run_start226 < self.dat174 {
          dat_arr_cursor188.set(self, 0, run_start226 as u16);
          dat_arr_cursor188.shift(self, 1);
        }
        self.dat_arr177[1] = self.dat_arr177[var227];
        var227 -= 1;
        self.fn225(1, dat_arr_cursor187, var227 as i16);
        let run_length276 = self.dat_arr177[1];
        if run_length276 < self.dat174 {
          dat_arr_cursor188.set(self, 0, run_length276 as u16);
          dat_arr_cursor188.shift(self, 1);
        }
        var289 = var292;
        var292 += 1;
        dat_arr_cursor187.set(
          self,
          var289 as usize,
          dat_arr_cursor187.get(self, run_start226 as usize)
            + dat_arr_cursor187.get(self, run_length276 as usize),
        );
        self.dat_arr177[1] = var289 as i16;
        self.fn225(1, dat_arr_cursor187, var227 as i16);
        self.dat_arr189[var289 as usize] = run_start226 as u16;
        self.dat_arr190[var289 as usize] = run_length276 as u16;
        if var227 <= 1 {
          break;
        }
      }
      dat_arr_cursor188.set_offset(self, dat_arr_cursor188_offset);
      self.fn228(var289 as i32, dat_arr_cursor178, dat_arr_cursor188);
      dat_arr_cursor188.set_offset(self, dat_arr_cursor188_offset);
      dat_arr_cursor178.set_offset(self, dat_arr_cursor178_offset);
      self.fn230(var212, dat_arr_cursor178, dat_arr_cursor188);
      Ok(var289)
    }
  }
}