Crate implode [] [src]

Implementation of the PKWARE DCL Implode algorithm. Note that this is different from the Imploding algorithm in PKZIP. This implementation is based off of the one in zlib/contrib/blast.c, but uses lookup tables to decode the Shannon-Fano codes instead, which is way faster. This implementation uses no code from the PKWARE Data Compression Library (PKWARE DCL).

use implode::symbol::{Symbol, CodeTable, DEFAULT_CODE_TABLE, decode_bits};
use implode::exploder::Exploder;
use std::fs::File;
use std::io::Read;
use std::io::Write;
 
fn main() 
{
    let mut f = File::open("/path/to/input").expect("File open failed");
    let mut buf = [0u8; FILE_SIZE];
    f.read(&mut buf);
    let mut exploder = Exploder::new(&DEFAULT_CODE_TABLE);
    
    let mut ex = File::create("/path/to/output").expect("File create failed");
    let mut cpos: u32 = 0;
    let len = buf.len();
    let mut iter = 0;
    
    while !exploder.ended {
        
        let abuf = &mut buf[cpos as usize .. len];
        
        let x = exploder.explode_block(abuf).unwrap();
        cpos += x.0;
        
        //println!("{} {:?}",x.0, x.1);
        let bf = x.1;
    
        ex.write(bf);
        iter+=1;
    }
    
}

Modules

exploder
symbol