lib/amq/protocol/table_value_decoder.rb in amq-protocol-0.9.5 vs lib/amq/protocol/table_value_decoder.rb in amq-protocol-1.0.0.pre1
- old
+ new
@@ -18,65 +18,55 @@
#
# API
#
- BIG_ENDIAN = ([1].pack("s") == "\x00\x01")
- Q = "Q".freeze
-
-
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
- # TODO
- raise NotImplementedError.new
- when TYPE_SIGNED_16BIT then
- # TODO
- raise NotImplementedError.new
- when TYPE_SIGNED_64BIT then
- v, offset = decode_long(data, offset)
- v
- 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 in a table value: #{type.inspect}, do not know how to decode!")
- end
+ 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
@@ -98,27 +88,9 @@
v = data.slice(offset, 4).unpack(PACK_UINT32).first
offset += 4
[v, offset]
end # self.decode_integer(data, offset)
-
-
- if BIG_ENDIAN
- def self.decode_long(data, offset)
- v = data.slice(offset, 8).unpack(Q)
-
- offset += 8
- [v, offset]
- end
- else
- def self.decode_long(data, offset)
- slice = data.slice(offset, 8).bytes.to_a.reverse.map(&:chr).join
- v = slice.unpack(Q).first
-
- offset += 8
- [v, offset]
- end
- end
def self.decode_big_decimal(data, offset)
decimals, raw = data.slice(offset, 5).unpack(PACK_UCHAR_UINT32)
offset += 5