module Erlang::ETF
Constants
- B2T
@private
- T2B
@private
- TYPE
@private
- VERSION
Public Class Methods
binary_to_term(buffer, etf)
click to toggle source
@private
# File lib/erlang/etf.rb, line 276 def self.binary_to_term(buffer, etf) magic = buffer.getc if magic == Erlang::ETF::Term::ERLANG_MAGIC_BYTE term = nil begin term = read_term(buffer) rescue NotImplementedError => e buffer.ungetc(magic) raise e end return Erlang.from(term) if etf == false return term else buffer.ungetc(magic) raise NotImplementedError, "unknown Erlang magic byte #{magic.inspect} (should be #{Erlang::ETF::Term::ERLANG_MAGIC_BYTE.inspect})" end # mzbuffer.read(1) # magic = buffer.read(1) # if magic == Erlang::ETF::Term::ERLANG_MAGIC_BYTE # Terms.evolve(buffer) # else # raise NotImplementedError, "unknown Erlang magic byte #{magic.inspect} (should be #{Erlang::ETF::Term::ERLANG_MAGIC_BYTE.inspect})" # end end
intlog2(x)
click to toggle source
@private
# File lib/erlang/etf.rb, line 255 def self.intlog2(x) raise ArgumentError, "x must be a positive Integer" if not x.is_a?(::Integer) or x < 1 r = 0 loop do break if x == 0 x >>= 1 r += 1 end return r end
intlog2div8(x)
click to toggle source
@private
# File lib/erlang/etf.rb, line 267 def self.intlog2div8(x) raise ArgumentError, "x must be a non-negative Integer" if not x.is_a?(::Integer) x = x.abs if x < 0 return 1 if x == 0 x = intlog2(x) return 1 + ((x - 1).div(8)) end
is_atom(term)
click to toggle source
# File lib/erlang/etf.rb, line 104 def self.is_atom(term) return true if term.kind_of?(TYPE[:atom]) return true if Erlang.is_atom(term) and term.size >= 256 and term.utf8 == false return false end
is_atom_utf8(term)
click to toggle source
# File lib/erlang/etf.rb, line 110 def self.is_atom_utf8(term) return true if term.kind_of?(TYPE[:atom_utf8]) return true if Erlang.is_atom(term) and term.size >= 256 and term.utf8 == true return false end
is_binary(term)
click to toggle source
# File lib/erlang/etf.rb, line 116 def self.is_binary(term) return true if term.kind_of?(TYPE[:binary]) return true if Erlang.is_binary(term) return false end
is_bit_binary(term)
click to toggle source
# File lib/erlang/etf.rb, line 122 def self.is_bit_binary(term) return true if term.kind_of?(TYPE[:bit_binary]) return true if not Erlang.is_binary(term) and Erlang.is_bitstring(term) return false end
is_export(term)
click to toggle source
# File lib/erlang/etf.rb, line 128 def self.is_export(term) return true if term.kind_of?(TYPE[:export]) return true if Erlang.is_function(term) and term.kind_of?(Erlang::Export) return false end
is_float(term)
click to toggle source
# File lib/erlang/etf.rb, line 134 def self.is_float(term) return true if term.kind_of?(TYPE[:float]) return true if Erlang.is_float(term) and term.old == true return false end
is_fun(term)
click to toggle source
# File lib/erlang/etf.rb, line 140 def self.is_fun(term) return true if term.kind_of?(TYPE[:fun]) return true if Erlang.is_function(term) and not is_export(term) and not term.new_function? return false end
is_integer(term)
click to toggle source
# File lib/erlang/etf.rb, line 146 def self.is_integer(term) return true if term.kind_of?(TYPE[:integer]) return true if Erlang.is_integer(term) and not is_small_integer(term) and term >= (-(1 << 31) + 1) and term <= (+(1 << 31) - 1) return false end
is_large_big(term)
click to toggle source
# File lib/erlang/etf.rb, line 152 def self.is_large_big(term) return true if term.kind_of?(TYPE[:large_big]) return true if Erlang.is_integer(term) and not is_small_integer(term) and not is_integer(term) and not is_small_big(term) return false end
is_large_tuple(term)
click to toggle source
# File lib/erlang/etf.rb, line 158 def self.is_large_tuple(term) return true if term.kind_of?(TYPE[:large_tuple]) return true if Erlang.is_tuple(term) and not is_small_tuple(term) return false end
is_list(term)
click to toggle source
# File lib/erlang/etf.rb, line 164 def self.is_list(term) return true if term.kind_of?(TYPE[:list]) return true if Erlang.is_list(term) and not is_nil(term) and not is_string(term) return false end
is_map(term)
click to toggle source
# File lib/erlang/etf.rb, line 170 def self.is_map(term) return true if term.kind_of?(TYPE[:map]) return true if Erlang.is_map(term) return false end
is_new_float(term)
click to toggle source
# File lib/erlang/etf.rb, line 176 def self.is_new_float(term) return true if term.kind_of?(TYPE[:new_float]) return true if Erlang.is_float(term) and term.old == false return false end
is_new_fun(term)
click to toggle source
# File lib/erlang/etf.rb, line 182 def self.is_new_fun(term) return true if term.kind_of?(TYPE[:new_fun]) return true if Erlang.is_function(term) and not is_export(term) and term.new_function? return false end
is_new_reference(term)
click to toggle source
# File lib/erlang/etf.rb, line 188 def self.is_new_reference(term) return true if term.kind_of?(TYPE[:new_reference]) return true if Erlang.is_reference(term) and term.new_reference? return false end
is_nil(term)
click to toggle source
# File lib/erlang/etf.rb, line 194 def self.is_nil(term) return true if term.kind_of?(TYPE[:nil]) return true if Erlang.is_list(term) and term.empty? return false end
is_pid(term)
click to toggle source
# File lib/erlang/etf.rb, line 200 def self.is_pid(term) return true if term.kind_of?(TYPE[:pid]) return true if Erlang.is_pid(term) return false end
is_port(term)
click to toggle source
# File lib/erlang/etf.rb, line 206 def self.is_port(term) return true if term.kind_of?(TYPE[:port]) return true if Erlang.is_port(term) return false end
is_reference(term)
click to toggle source
# File lib/erlang/etf.rb, line 212 def self.is_reference(term) return true if term.kind_of?(TYPE[:reference]) return true if Erlang.is_reference(term) and not term.new_reference? return false end
is_small_atom(term)
click to toggle source
# File lib/erlang/etf.rb, line 218 def self.is_small_atom(term) return true if term.kind_of?(TYPE[:small_atom]) return true if Erlang.is_atom(term) and term.size < 256 and term.utf8 == false return false end
is_small_atom_utf8(term)
click to toggle source
# File lib/erlang/etf.rb, line 224 def self.is_small_atom_utf8(term) return true if term.kind_of?(TYPE[:small_atom_utf8]) return true if Erlang.is_atom(term) and term.size < 256 and term.utf8 == true return false end
is_small_big(term)
click to toggle source
# File lib/erlang/etf.rb, line 230 def self.is_small_big(term) return true if term.kind_of?(TYPE[:small_big]) return true if Erlang.is_integer(term) and not is_small_integer(term) and not is_integer(term) and intlog2div8(term) < 256 return false end
is_small_integer(term)
click to toggle source
# File lib/erlang/etf.rb, line 236 def self.is_small_integer(term) return true if term.kind_of?(TYPE[:small_integer]) return true if Erlang.is_integer(term) and term >= 0 and term <= (+(1 << 8) - 1) return false end
is_small_tuple(term)
click to toggle source
# File lib/erlang/etf.rb, line 242 def self.is_small_tuple(term) return true if term.kind_of?(TYPE[:small_tuple]) return true if Erlang.is_tuple(term) and term.arity < 256 return false end
is_string(term)
click to toggle source
# File lib/erlang/etf.rb, line 248 def self.is_string(term) return true if term.kind_of?(TYPE[:string]) return true if Erlang.is_list(term) and not is_nil(term) and term.kind_of?(Erlang::String) and term.length < (+(1 << 16) - 1) return false end
read_term(buffer)
click to toggle source
@private
# File lib/erlang/etf.rb, line 302 def self.read_term(buffer) tag = buffer.getbyte if B2T.key?(tag) return B2T[tag].erlang_load(buffer) else buffer.ungetbyte(tag) raise NotImplementedError, "unknown Erlang External Format tag #{tag.inspect} (see http://erlang.org/doc/apps/erts/erl_ext_dist.html)" end end
term_to_binary(term, buffer, compressed)
click to toggle source
@private
# File lib/erlang/etf.rb, line 313 def self.term_to_binary(term, buffer, compressed) buffer << Erlang::ETF::Term::ERLANG_MAGIC_BYTE if compressed == false return term.erlang_dump(buffer) else return Erlang::ETF::Compressed[term, level: compressed].erlang_dump(buffer) end end
write_term(term, buffer)
click to toggle source
@private
# File lib/erlang/etf.rb, line 323 def self.write_term(term, buffer) term = Erlang.etf(term) return term.erlang_dump(buffer) end