class Erlang::ETF::Compressed
| 1 | 4 | N | | — | —————- | ——————- | | 80 | UncompressedSize | Zlib-compressedData |
Uncompressed Size (unsigned 32 bit integer in big-endian byte order) is the size of the data before it was compressed. The compressed data has the following format when it has been expanded:
| 1 | Uncompressed Size | | —- | —————– | | Tag | Data |
(see [`External Term
Format`] and [`term_to_binary/2`])
[`External Term
Format`]: erlang.org/doc/apps/erts/erl_ext_dist.html#overall_format [`term_to_binary/2`]: www.erlang.org/doc/man/erlang.html#term_to_binary-2
Constants
- LEVEL_DEFAULT
- LEVEL_RANGE
- UINT32BE
Public Class Methods
[](term, uncompressed_size = nil, compressed_data = nil, level: LEVEL_DEFAULT)
click to toggle source
# File lib/erlang/etf/compressed.rb, line 33 def [](term, uncompressed_size = nil, compressed_data = nil, level: LEVEL_DEFAULT) term = Erlang.from(term) return new(term, uncompressed_size, compressed_data, level) end
erlang_load(buffer)
click to toggle source
# File lib/erlang/etf/compressed.rb, line 38 def erlang_load(buffer) uncompressed_size, = buffer.read(4).unpack(UINT32BE) compressed_data = buffer.read() uncompressed_data = ::Zlib::Inflate.inflate(compressed_data) if uncompressed_size == uncompressed_data.bytesize term = Erlang.from(Erlang::ETF.read_term(StringIO.new(uncompressed_data))) return new(term, uncompressed_size, compressed_data) else raise ::Zlib::DataError, "UncompressedSize value did not match the size of the uncompressed data" end end
new(term, uncompressed_size = nil, compressed_data = nil, level = LEVEL_DEFAULT)
click to toggle source
# File lib/erlang/etf/compressed.rb, line 51 def initialize(term, uncompressed_size = nil, compressed_data = nil, level = LEVEL_DEFAULT) raise ArgumentError, "term must be of any type" if not Erlang.is_any(term) @term = term @uncompressed_size = uncompressed_size @compressed_data = compressed_data @level = LEVEL_RANGE.include?(level) ? level : LEVEL_DEFAULT end
Public Instance Methods
erlang_dump(buffer = ::String.new.force_encoding(BINARY_ENCODING))
click to toggle source
# File lib/erlang/etf/compressed.rb, line 59 def erlang_dump(buffer = ::String.new.force_encoding(BINARY_ENCODING)) buffer << COMPRESSED if @uncompressed_size.nil? and @compressed_data.nil? uncompressed_data = Erlang::ETF.write_term(@term, ::String.new.force_encoding(BINARY_ENCODING)) uncompressed_size = uncompressed_data.bytesize compressed_data = ::Zlib::Deflate.deflate(uncompressed_data, @level) buffer << [uncompressed_size].pack(UINT32BE) buffer << Erlang::ETF::Term.binary_encoding(compressed_data) else buffer << [@uncompressed_size].pack(UINT32BE) buffer << Erlang::ETF::Term.binary_encoding(@compressed_data) end return buffer end
inspect()
click to toggle source
# File lib/erlang/etf/compressed.rb, line 74 def inspect if @uncompressed_size.nil? and @compressed_data.nil? return "#{self.class}[#{@term.inspect}, level: #{@level.inspect}]" else return "#{self.class}[#{@term.inspect}, #{@uncompressed_size.inspect}, #{@compressed_data.inspect}, level: #{@level.inspect}]" end end
pretty_print(pp)
click to toggle source
# File lib/erlang/etf/compressed.rb, line 82 def pretty_print(pp) state = [@term] state.push(@uncompressed_size, @compressed_data) if not @uncompressed_size.nil? or not @compressed_data.nil? return pp.group(1, "#{self.class}[", ", level: #{@level.inspect}]") do pp.breakable '' pp.seplist(state) { |obj| obj.pretty_print(pp) } end end