class LZ4

Public Class Methods

compress(input, in_size = nil) click to toggle source
# File lib/lz4-ruby.rb, line 12
def self.compress(input, in_size = nil)
  return _compress(input, in_size, false)
end
compressHC(input, in_size = nil) click to toggle source
# File lib/lz4-ruby.rb, line 16
def self.compressHC(input, in_size = nil)
  return _compress(input, in_size, true)
end
decompress(input, in_size = nil, encoding = nil) click to toggle source
# File lib/lz4-ruby.rb, line 20
def self.decompress(input, in_size = nil, encoding = nil)
  in_size = input.bytesize if in_size == nil
  out_size, varbyte_len = decode_varbyte(input)

  if out_size < 0 || varbyte_len < 0
    raise "Compressed data is maybe corrupted"
  end
  
  result = LZ4Internal::uncompress(input, in_size, varbyte_len, out_size)
  result.force_encoding(encoding) if encoding != nil

  return result
end
uncompress(input, in_size = nil) click to toggle source

@deprecated Use {#decompress} and will be removed.

# File lib/lz4-ruby.rb, line 35
def self.uncompress(input, in_size = nil)
  return decompress(input, in_size)
end

Private Class Methods

_compress(input, in_size, high_compression) click to toggle source
# File lib/lz4-ruby.rb, line 40
def self._compress(input, in_size, high_compression)
  in_size = input.bytesize if in_size == nil
  header = encode_varbyte(in_size)

  if high_compression
    return LZ4Internal.compressHC(header, input, in_size)
  else
    return LZ4Internal.compress(header, input, in_size)
  end
end
decode_varbyte(text) click to toggle source
# File lib/lz4-ruby.rb, line 71
def self.decode_varbyte(text)
  len = [text.bytesize, 5].min
  bytes = text[0, len].unpack("C*")

  varbyte_len = 0
  val = 0
  bytes.each do |b|
    val |= (b & 0x7f) << (7 * varbyte_len)
    varbyte_len += 1
    return val, varbyte_len if b & 0x80 == 0
  end

  return -1, -1
end
encode_varbyte(val) click to toggle source
# File lib/lz4-ruby.rb, line 52
def self.encode_varbyte(val)
  varbytes = []

  loop do
    byte = val & 0x7f
    val >>= 7

    if val == 0
      varbytes.push(byte)
      break
    else
      varbytes.push(byte | 0x80)
    end
  end

  return varbytes.pack("C*")
end