Sha256: 70dc20868ff71f87210f1589621c1e6e5485312a1a194a1407d113c989fd5d15

Contents?: true

Size: 1 KB

Versions: 11

Compression:

Stored size: 1 KB

Contents

module Snappy
  class Writer
    if RUBY_VERSION[0..2] == '1.8'
      MAGIC = "\x82SNAPPY\x0"
    else
      MAGIC = "\x82SNAPPY\x0".force_encoding Encoding::ASCII_8BIT
    end
    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 = ""
      @io = io
      @io.set_encoding Encoding::ASCII_8BIT unless RUBY_VERSION =~ /^1\.8/
      write_header!
      if block_given?
        yield self
        dump!
      end
    end

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

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

    alias_method :flush, :dump!

    private

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

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
snappy-0.0.12-java lib/snappy/writer.rb
snappy-0.0.12 lib/snappy/writer.rb
snappy-0.0.11-java lib/snappy/writer.rb
snappy-0.0.11 lib/snappy/writer.rb
snappy-0.0.10-java lib/snappy/writer.rb
snappy-0.0.10 lib/snappy/writer.rb
snappy-0.0.9-java lib/snappy/writer.rb
snappy-0.0.9 lib/snappy/writer.rb
snappy-0.0.8 lib/snappy/writer.rb
snappy-0.0.7 lib/snappy/writer.rb
snappy-0.0.6 lib/snappy/writer.rb