Class: Zrip::Dictionary

Inherits:
Data
  • Object
show all
Defined in:
lib/zrip/dictionary.rb,
lib/zrip/dictionary.rb

Overview

Immutable Zstandard dictionary value.

Constant Summary collapse

ZDICT_MAGIC =
"\x37\xA4\x30\xEC".b.freeze
USER_DICT_ID_MIN =
32_768
USER_DICT_ID_MAX =
(2**31) - 1
USER_DICT_ID_SIZE =
USER_DICT_ID_MAX - USER_DICT_ID_MIN + 1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bytes:, id: nil) ⇒ Dictionary

Returns a new instance of Dictionary.

Parameters:

  • bytes (String)

    dictionary bytes

  • id (Integer, nil) (defaults to: nil)

    optional dictionary ID



24
25
26
27
28
29
30
31
32
33
# File 'lib/zrip/dictionary.rb', line 24

def initialize(bytes:, id: nil)
  b = bytes.b
  id ||= if b.byteslice(0, 4) == ZDICT_MAGIC
           b.byteslice(4, 4).unpack1("V")
         else
           raw = Digest::SHA256.digest(b).byteslice(0, 4).unpack1("V")
           USER_DICT_ID_MIN + (raw % USER_DICT_ID_SIZE)
         end
  super(bytes: b.freeze, id: id)
end

Instance Attribute Details

#bytesString (readonly)

Returns frozen binary dictionary bytes.

Returns:

  • (String)

    frozen binary dictionary bytes



13
# File 'lib/zrip/dictionary.rb', line 13

Dictionary = Data.define(:bytes, :id)

#idInteger (readonly)

Returns dictionary ID.

Returns:

  • (Integer)

    dictionary ID



13
# File 'lib/zrip/dictionary.rb', line 13

Dictionary = Data.define(:bytes, :id)

Instance Method Details

#sizeInteger

Returns dictionary size in bytes.

Returns:

  • (Integer)

    dictionary size in bytes



37
38
39
# File 'lib/zrip/dictionary.rb', line 37

def size
  bytes.bytesize
end