Class: Zlib::Inflate
- Defined in:
- lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb
Overview
DEFLATE Decompression
Implements decompression of a RFC-1951 compatible stream.
Defined Under Namespace
Classes: HuffmanTree
Class Method Summary collapse
Instance Method Summary collapse
-
#<<(string) ⇒ Object
Appends data to the input stream.
-
#finish ⇒ Object
Finishes inflating and flushes the buffer.
-
#inflate(zstring = nil) ⇒ Object
Example f = File.open “example.z” i = Inflate.new i.inflate f.read.
-
#initialize(window_bits = MAX_WBITS) ⇒ Inflate
constructor
A new instance of Inflate.
-
#set_dictionary(string) ⇒ Object
Sets the inflate dictionary.
Methods inherited from ZStream
#adler, #avail_in, #avail_out, #avail_out=, #close, #closed?, #data_type, #end, #ended?, #finished?, #flush_next_in, #flush_next_out, #reset, #stream_end?, #total_in, #total_out
Constructor Details
#initialize(window_bits = MAX_WBITS) ⇒ Inflate
Returns a new instance of Inflate.
189 190 191 192 193 194 195 196 197 |
# File 'lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb', line 189 def initialize window_bits=MAX_WBITS @w_bits = window_bits if @w_bits < 0 then @rawdeflate = true @w_bits *= -1 end super() @zstring = "" end |
Class Method Details
.inflate(zstring) ⇒ Object
482 483 484 485 |
# File 'lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb', line 482 def inflate zstring d = self.new d.inflate zstring end |
Instance Method Details
#<<(string) ⇒ Object
Appends data to the input stream
200 201 202 203 |
# File 'lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb', line 200 def <<(string) @zstring << string inflate end |
#finish ⇒ Object
Finishes inflating and flushes the buffer
265 266 267 268 269 270 271 |
# File 'lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb', line 265 def finish output = "" inflate unless @output_buffer.length > 0 @output_buffer.each {|c| output << c } super output end |
#inflate(zstring = nil) ⇒ Object
Example
f = File.open “example.z” i = Inflate.new i.inflate f.read
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 |
# File 'lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb', line 215 def inflate zstring=nil @zstring = zstring unless zstring.nil? #We can't use unpack, IronRuby doesn't have it yet. @zstring.each_byte {|b| @input_buffer << b} unless @rawdeflate then compression_method_and_flags = @input_buffer[@in_pos+=1] flags = @input_buffer[@in_pos+=1] #CMF and FLG, when viewed as a 16-bit unsigned integer stored inMSB order (CMF*256 + FLG), is a multiple of 31 if ((compression_method_and_flags << 0x08) + flags) % 31 != 0 then raise Zlib::DataError.new("incorrect header check") end #CM = 8 denotes the ìdeflateî compression method with a window size up to 32K. (RFC's only specify CM 8) compression_method = compression_method_and_flags & 0x0F if compression_method != Z_DEFLATED then raise Zlib::DataError.new("unknown compression method") end #For CM = 8, CINFO is the base-2 logarithm of the LZ77 window size,minus eight (CINFO=7 indicates a 32K window size) compression_info = compression_method_and_flags >> 0x04 if (compression_info + 8) > @w_bits then raise Zlib::DataError.new("invalid window size") end preset_dictionary_flag = ((flags & 0x20) >> 0x05) == 1 compression_level = (flags & 0xC0) >> 0x06 if preset_dictionary_flag and @dict.nil? then raise Zlib::NeedDict.new "Preset dictionary needed!" end #TODO: Add Preset dictionary support if preset_dictionary_flag then @dict_crc = @input_buffer[@in_pos+=1] << 24 | @input_buffer[@in_pos+=1] << 16 | @input_buffer[@in_pos+=1] << 8 | @input_buffer[@in_pos+=1] end end last_block = false #Begin processing DEFLATE stream until last_block last_block = (get_bits(1) == 1) block_type = get_bits(2) case block_type when 0 then no_compression when 1 then fixed_codes when 2 then dynamic_codes when 3 then raise Zlib::DataError.new("invalid block type") end end finish end |
#set_dictionary(string) ⇒ Object
Sets the inflate dictionary
206 207 208 209 |
# File 'lib/motion-bundler/mocks/zliby-0.0.5/zlib.rb', line 206 def set_dictionary string @dict = string reset end |