class LZ4::Raw

Handles LZ4 native data stream (without any additional headers).

Public Class Methods

compress(source, options = {}) click to toggle source

Compresses `source` string.

@param [String] source string to be compressed @param [Hash] options @option options [Fixnum] :input_size byte size of source to compress (must be less than or equal to `source.bytesize`) @option options [String] :dest output buffer which will receive compressed string @option options [Fixnum] :max_output_size acceptable maximum output size @return [String, Fixnum] compressed string and its length.

# File lib/lz4-ruby.rb, line 96
def self.compress(source, options = {})
  return _compress(source, false, options)
end
compressHC(source, options = {}) click to toggle source

Compresses `source` string using High Compress Mode.

@param [String] source string to be compressed @param [Hash] options @option options [Fixnum] :input_size byte size of source to compress (must be less than or equal to `source.bytesize`) @option options [String] :dest output buffer which will receive compressed string @option options [Fixnum] :max_output_size acceptable maximum output size @return [String, Fixnum] compressed string and its length.

# File lib/lz4-ruby.rb, line 108
def self.compressHC(source, options = {})
  return _compress(source, true, options)
end

Private Class Methods

_compress(source, high_compression, options = {}) click to toggle source
# File lib/lz4-ruby.rb, line 113
def self._compress(source, high_compression, options = {})
  input_size = options[:input_size]
  if input_size == nil
    input_size = source.bytesize

  else
    if source.bytesize < input_size
      raise ArgumentError, "`:input_size` (#{input_size}) must be less than or equal `source.bytesize` (#{source.bytesize})"
    end
  end

  dest = options[:dest]

  max_output_size = options[:max_output_size]
  if max_output_size == nil
    if dest != nil
      max_output_size = dest.bytesize
    else
      max_output_size = input_size + (input_size / 255) + 16 if dest == nil
    end

  else
    if dest != nil && dest.bytesize < max_output_size
      raise ArgumentError, "`:dest` buffer size (#{dest.bytesize}) must be greater than or equal `:max_output_size` (#{max_output_size})"
    end
  end

  result = nil
  if high_compression
    result = LZ4Internal.compressHC_raw(source, input_size, dest, max_output_size)
  else
    result = LZ4Internal.compress_raw(source, input_size, dest, max_output_size)
  end

  if result[1] <= 0
    raise LZ4Error, "compression failed"
  end

  return result[0], result[1]
end
decompress(source, max_output_size, options = {}) click to toggle source

Decompresses `source` compressed string.

@param [String] source @param [Fixnum] max_output_size @param [Hash] options @option options [Fixnum] :input_size byte size of source to decompress (must be less than or equal to `source.bytesize`) @option options [String] :dest output buffer which will receive decompressed string @return [String, Fixnum] decompressed string and its length.

# File lib/lz4-ruby.rb, line 162
def self.decompress(source, max_output_size, options = {})
  input_size = options[:input_size]
  if input_size == nil
    input_size = source.bytesize

  else
    if source.bytesize < input_size
      raise ArgumentError, "`:input_size` (#{input_size}) must be less than or equal `source.bytesize` (#{source.bytesize})"
    end
  end

  dest = options[:dest]

  if dest != nil && dest.bytesize < max_output_size
    raise ArgumentError, "`:dest` buffer size (#{dest.bytesize}) must be greater than or equal `max_output_size` (#{max_output_size})"
  end

  result = LZ4Internal.decompress_raw(source, input_size, dest, max_output_size)

  if result[1] <= 0
    return "", 0 if source == "\x00"
    raise LZ4Error, "decompression failed"
  end

  return result[0], result[1]
end