Parent

Included Modules

Class/Module Index [+]

Quicksearch

AMQ::Protocol::TableValueDecoder

Public Class Methods

decode_32bit_float(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 119
def self.decode_32bit_float(data, offset)
  v = data.slice(offset, 4).unpack(PACK_32BIT_FLOAT).first
  offset += 4

  [v, offset]
end
decode_64bit_float(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 127
def self.decode_64bit_float(data, offset)
  v = data.slice(offset, 8).unpack(PACK_64BIT_FLOAT).first
  offset += 8

  [v, offset]
end
decode_array(data, initial_offset) click to toggle source

API

# File lib/amq/protocol/table_value_decoder.rb, line 22
def self.decode_array(data, initial_offset)
  array_length = data.slice(initial_offset, 4).unpack(PACK_UINT32).first

  ary    = Array.new
  offset = initial_offset + 4

  while offset <= (initial_offset + array_length)
    type, offset = decode_value_type(data, offset)

    i = case type
           when TYPE_STRING
             v, offset = decode_string(data, offset)
             v
           when TYPE_INTEGER
             v, offset = decode_integer(data, offset)
             v
           when TYPE_DECIMAL
             v, offset = decode_big_decimal(data, offset)
             v
           when TYPE_TIME
             v, offset = decode_time(data, offset)
             v
           when TYPE_HASH
             v, offset = decode_hash(data, offset)
             v
           when TYPE_BOOLEAN
             v, offset = decode_boolean(data, offset)
             v
           when TYPE_SIGNED_8BIT then raise NotImplementedError.new
           when TYPE_SIGNED_16BIT then raise NotImplementedError.new
           when TYPE_SIGNED_64BIT then raise NotImplementedError.new
           when TYPE_32BIT_FLOAT then
             v, offset = decode_32bit_float(data, offset)
             v
           when TYPE_64BIT_FLOAT then
             v, offset = decode_64bit_float(data, offset)
             v
           when TYPE_VOID
             nil
           when TYPE_ARRAY
             v, offset = TableValueDecoder.decode_array(data, offset)
             v
           else
             raise ArgumentError.new("unsupported type: #{type.inspect}")
           end

    ary << i
  end


  [ary, initial_offset + array_length + 4]
end
decode_big_decimal(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 94
def self.decode_big_decimal(data, offset)
  decimals, raw = data.slice(offset, 5).unpack(PACK_UCHAR_UINT32)
  offset += 5
  v = BigDecimal.new(raw.to_s) * (BigDecimal.new(TEN) ** -decimals)

  [v, offset]
end
decode_boolean(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 112
def self.decode_boolean(data, offset)
  integer = data.slice(offset, 2).unpack(PACK_CHAR).first # 0 or 1
  offset += 1
  [(integer == 1), offset]
end
decode_hash(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 141
def self.decode_hash(data, offset)
  length = data.slice(offset, 4).unpack(PACK_UINT32).first
  v = Table.decode(data.slice(offset, length + 4))
  offset += 4 + length

  [v, offset]
end
decode_integer(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 86
def self.decode_integer(data, offset)
  v = data.slice(offset, 4).unpack(PACK_UINT32).first
  offset += 4

  [v, offset]
end
decode_string(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 76
def self.decode_string(data, offset)
  length = data.slice(offset, 4).unpack(PACK_UINT32).first
  offset += 4
  v = data.slice(offset, length)
  offset += length

  [v, offset]
end
decode_time(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 103
def self.decode_time(data, offset)
  timestamp = data.slice(offset, 8).unpack(PACK_UINT32_X2).last
  v = Time.at(timestamp)
  offset += 8

  [v, offset]
end
decode_value_type(data, offset) click to toggle source
# File lib/amq/protocol/table_value_decoder.rb, line 135
def self.decode_value_type(data, offset)
  [data.slice(offset, 1), offset + 1]
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.