Class: Erlang::ETF::BitBinary

Inherits:
Object
  • Object
show all
Includes:
Term
Defined in:
lib/erlang/etf/bit_binary.rb

Overview

1 4 1 Len
77 Len Bits Data

This term represents a bitstring whose length in bits is not a multiple of 8 (created using the bit syntax in R12B and later). The Len field is an unsigned 4 byte integer (big endian). The Bits field is the number of bits that are used in the last byte in the data field, counting from the most significant bit towards the least significant.

(see BIT_BINARY_EXT)

Constant Summary collapse

UINT8 =
Erlang::ETF::Term::UINT8
UINT32BE =
Erlang::ETF::Term::UINT32BE
HEAD =
(UINT32BE + UINT8).freeze

Constants included from Term

Term::ATOM_CACHE_REF, Term::ATOM_EXT, Term::ATOM_INTERNAL_REF2, Term::ATOM_INTERNAL_REF3, Term::ATOM_UTF8_EXT, Term::BINARY_ENCODING, Term::BINARY_EXT, Term::BINARY_INTERNAL_REF, Term::BIT_BINARY_EXT, Term::BIT_BINARY_INTERNAL_REF, Term::COMPRESSED, Term::DIST_HEADER, Term::DOUBLE, Term::DOUBLEBE, Term::DOUBLELE, Term::ERLANG_MAGIC_BYTE, Term::EXPORT_EXT, Term::FLOAT_EXT, Term::FUN_EXT, Term::INT128, Term::INT128BE, Term::INT128LE, Term::INT16, Term::INT16BE, Term::INT16LE, Term::INT32, Term::INT32BE, Term::INT32LE, Term::INT64, Term::INT64BE, Term::INT64LE, Term::INT8, Term::INTEGER_EXT, Term::LARGE_BIG_EXT, Term::LARGE_TUPLE_EXT, Term::LIST_EXT, Term::MAP_EXT, Term::NEW_FLOAT_EXT, Term::NEW_FUN_EXT, Term::NEW_REFERENCE_EXT, Term::NIL_EXT, Term::PID_EXT, Term::PORT_EXT, Term::REFERENCE_EXT, Term::SINGLE, Term::SINGLEBE, Term::SINGLELE, Term::SMALL_ATOM_EXT, Term::SMALL_ATOM_UTF8_EXT, Term::SMALL_BIG_EXT, Term::SMALL_INTEGER_EXT, Term::SMALL_TUPLE_EXT, Term::STRING_EXT, Term::UINT128, Term::UINT128BE, Term::UINT128LE, Term::UINT16, Term::UINT16BE, Term::UINT16LE, Term::UINT32, Term::UINT32LE, Term::UINT64, Term::UINT64BE, Term::UINT64LE

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Term

#<=>, binary_encoding, #eql?, #erlang_external_type, #hash, included, #inspect, #to_erlang_etf

Constructor Details

#initialize(term) ⇒ BitBinary

Returns a new instance of BitBinary.

Raises:

  • (ArgumentError)


43
44
45
46
# File 'lib/erlang/etf/bit_binary.rb', line 43

def initialize(term)
  raise ArgumentError, "term must be of type Erlang::Bitstring" if not term.kind_of?(Erlang::Bitstring) and not term.kind_of?(Erlang::Binary)
  @term = term
end

Class Method Details

.[](term) ⇒ Object



28
29
30
31
# File 'lib/erlang/etf/bit_binary.rb', line 28

def [](term)
  term = Erlang.from(term) if not term.kind_of?(Erlang::Bitstring)
  return new(term)
end

.erlang_load(buffer) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/erlang/etf/bit_binary.rb', line 33

def erlang_load(buffer)
  size, bits, = buffer.read(5).unpack(HEAD)
  data = buffer.read(size)
  if size > 0
    data.setbyte(-1, data.getbyte(-1) >> (8 - bits))
  end
  return new(Erlang::Bitstring[data, bits: bits])
end

Instance Method Details

#erlang_dump(buffer = ::String.new.force_encoding(BINARY_ENCODING)) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/erlang/etf/bit_binary.rb', line 48

def erlang_dump(buffer = ::String.new.force_encoding(BINARY_ENCODING))
  buffer << BIT_BINARY_EXT
  buffer << [@term.bytesize, @term.bits].pack(HEAD)
  buffer << Erlang::ETF::Term.binary_encoding(@term.data)
  if @term.bytesize > 0
    buffer.setbyte(-1, buffer.getbyte(-1) << (8 - @term.bits))
  end
  return buffer
end