Class: Omnizip::Formats::Rar::Rar5::Compression::Lzss::Decoder
- Inherits:
-
Object
- Object
- Omnizip::Formats::Rar::Rar5::Compression::Lzss::Decoder
- Defined in:
- lib/omnizip/formats/rar/rar5/compression/lzss.rb
Overview
RAR5 LZSS Decoder
Based on libarchive's do_uncompress_block()
Instance Method Summary collapse
-
#decode(expected_size = nil) ⇒ String
Decode the compressed data.
-
#initialize(data, window_size) ⇒ Decoder
constructor
A new instance of Decoder.
Constructor Details
#initialize(data, window_size) ⇒ Decoder
Returns a new instance of Decoder.
317 318 319 320 321 322 323 324 325 326 327 |
# File 'lib/omnizip/formats/rar/rar5/compression/lzss.rb', line 317 def initialize(data, window_size) @data = data.dup.force_encoding(Encoding::BINARY) @window_size = window_size @window_mask = window_size - 1 @window = "\x00" * window_size @output = StringIO.new @output.set_encoding(Encoding::BINARY) @write_ptr = 0 @dist_cache = [0, 0, 0, 0] # Distance cache @last_len = 0 end |
Instance Method Details
#decode(expected_size = nil) ⇒ String
Decode the compressed data
333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 |
# File 'lib/omnizip/formats/rar/rar5/compression/lzss.rb', line 333 def decode(expected_size = nil) return "" if @data.empty? @bit_reader = BitReader.new(@data) # Parse block header parse_block_header return @output.string unless @table_present # Parse Huffman tables return @output.string unless parse_huffman_tables # Decode data decode_data(expected_size) @output.string end |