Class: Erlang::ETF::BitBinary
- Inherits:
-
Object
- Object
- Erlang::ETF::BitBinary
- 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
- #erlang_dump(buffer = ::String.new.force_encoding(BINARY_ENCODING)) ⇒ Object
-
#initialize(term) ⇒ BitBinary
constructor
A new instance of BitBinary.
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.
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 |