Sha256: dfcc16f0c4a9cdbb12af71fc3cfab4c0e3820c2bd36a14eff3a9ac9170e7f918

Contents?: true

Size: 994 Bytes

Versions: 12

Compression:

Stored size: 994 Bytes

Contents

# frozen_string_literal: true

require 'snappy/shim'

module Snappy
  class Writer
    MAGIC = Snappy.b("\x82SNAPPY\x0")
    DEFAULT_VERSION = 1
    MINIMUM_COMPATIBLE_VERSION = 1
    DEFAULT_BLOCK_SIZE = 32 * 1024

    attr_reader :io, :block_size

    def initialize(io, block_size = DEFAULT_BLOCK_SIZE)
      @block_size = block_size
      @buffer = String.new
      @io = Snappy.set_encoding io
      write_header!
      if block_given?
        yield self
        dump!
      end
    end

    def <<(msg)
      @buffer << msg.to_s
      dump! if @buffer.size > @block_size
    end

    alias_method :write, :<<

    def dump!
      compressed = Snappy.deflate(@buffer)
      @io << [compressed.size, compressed].pack("Na#{compressed.size}")
      @io.flush
      @buffer.clear
    end

    alias_method :flush, :dump!

    def close
      @io.close
    end

    private

    def write_header!
      @io << [MAGIC, DEFAULT_VERSION, MINIMUM_COMPATIBLE_VERSION].pack("a8NN")
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
snappy-0.4.0-java lib/snappy/writer.rb
snappy-0.4.0 lib/snappy/writer.rb
snappy-0.3.0-java lib/snappy/writer.rb
snappy-0.3.0 lib/snappy/writer.rb
snappy-0.2.0-java lib/snappy/writer.rb
snappy-0.2.0 lib/snappy/writer.rb
snappy-0.1.0-java lib/snappy/writer.rb
snappy-0.1.0 lib/snappy/writer.rb
snappy-0.0.17-java lib/snappy/writer.rb
snappy-0.0.17 lib/snappy/writer.rb
snappy-0.0.16-java lib/snappy/writer.rb
snappy-0.0.16 lib/snappy/writer.rb