Class: ZipTricks::StreamCRC32

Inherits:
Object
  • Object
show all
Defined in:
lib/zip_tricks/stream_crc32.rb

Overview

A simple stateful class for keeping track of a CRC32 value through multiple writes

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeStreamCRC32

Creates a new streaming CRC32 calculator



16
17
18
# File 'lib/zip_tricks/stream_crc32.rb', line 16

def initialize
  @crc = Zlib.crc32('')
end

Class Method Details

.from_io(io) ⇒ Fixnum

Compute a CRC32 value from an IO object. The object should respond to read and eof?

Parameters:

  • io (IO)

    the IO to read the data from

Returns:

  • (Fixnum)

    the computed CRC32 value



9
10
11
12
13
# File 'lib/zip_tricks/stream_crc32.rb', line 9

def self.from_io(io)
  crc = new
  crc << io.read(1024 * 512) until io.eof?
  crc.to_i
end

Instance Method Details

#<<(blob) ⇒ self

Append data to the CRC32. Updates the contained CRC32 value in place.

Parameters:

  • blob (String)

    the string to compute the CRC32 from

Returns:

  • (self)


24
25
26
27
# File 'lib/zip_tricks/stream_crc32.rb', line 24

def <<(blob)
  @crc = Zlib.crc32_combine(@crc, Zlib.crc32(blob), blob.bytesize)
  self
end

#append(crc32, blob_size) ⇒ Fixnum

Appends a known CRC32 value to the current one, and combines the contained CRC32 value in-place.

Parameters:

  • crc32 (Fixnum)

    the CRC32 value to append

  • blob_size (Fixnum)

    the size of the daata the crc32 is computed from

Returns:

  • (Fixnum)

    the updated CRC32 value for all the blobs so far



42
43
44
# File 'lib/zip_tricks/stream_crc32.rb', line 42

def append(crc32, blob_size)
  @crc = Zlib.crc32_combine(@crc, crc32, blob_size)
end

#to_iFixnum

Returns the CRC32 value computed so far

Returns:

  • (Fixnum)

    the updated CRC32 value for all the blobs so far



32
33
34
# File 'lib/zip_tricks/stream_crc32.rb', line 32

def to_i
  @crc
end