Class: ZipKit::StreamCRC32

Inherits:
Object
  • Object
show all
Includes:
WriteShovel
Defined in:
lib/zip_kit/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

Methods included from WriteShovel

#write

Constructor Details

#initializeStreamCRC32

Creates a new streaming CRC32 calculator



31
32
33
# File 'lib/zip_kit/stream_crc32.rb', line 31

def initialize
  @crc = Zlib.crc32
end

Class Method Details

.from_io(io) ⇒ Integer

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:

  • (Integer)

    the computed CRC32 value



20
21
22
23
24
25
26
27
28
# File 'lib/zip_kit/stream_crc32.rb', line 20

def self.from_io(io)
  # If we can specify the string capacity upfront we will not have to resize
  # the string during operation. This saves time but is only available on
  # recent Ruby 2.x versions.
  blob = STRINGS_HAVE_CAPACITY_SUPPORT ? String.new("", capacity: CRC_BUF_SIZE) : +""
  crc = new
  crc << io.read(CRC_BUF_SIZE, blob) 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)


39
40
41
42
# File 'lib/zip_kit/stream_crc32.rb', line 39

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

#append(crc32, blob_size) ⇒ Integer

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

Parameters:

  • crc32 (Integer)

    the CRC32 value to append

  • blob_size (Integer)

    the size of the daata the crc32 is computed from

Returns:

  • (Integer)

    the updated CRC32 value for all the blobs so far



57
58
59
# File 'lib/zip_kit/stream_crc32.rb', line 57

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

#to_iInteger

Returns the CRC32 value computed so far

Returns:

  • (Integer)

    the updated CRC32 value for all the blobs so far



47
48
49
# File 'lib/zip_kit/stream_crc32.rb', line 47

def to_i
  @crc
end