Object
# File lib/amq/protocol/table_value_decoder.rb, line 120 120: def self.decode_32bit_float(data, offset) 121: v = data.slice(offset, 4).unpack(PACK_32BIT_FLOAT).first 122: offset += 4 123: 124: [v, offset] 125: end
# File lib/amq/protocol/table_value_decoder.rb, line 128 128: def self.decode_64bit_float(data, offset) 129: v = data.slice(offset, 8).unpack(PACK_64BIT_FLOAT).first 130: offset += 8 131: 132: [v, offset] 133: end
API
# File lib/amq/protocol/table_value_decoder.rb, line 23 23: def self.decode_array(data, initial_offset) 24: array_length = data.slice(initial_offset, 4).unpack(PACK_UINT32).first 25: 26: ary = Array.new 27: offset = initial_offset + 4 28: 29: while offset <= (initial_offset + array_length) 30: type, offset = decode_value_type(data, offset) 31: 32: i = case type 33: when TYPE_STRING 34: v, offset = decode_string(data, offset) 35: v 36: when TYPE_INTEGER 37: v, offset = decode_integer(data, offset) 38: v 39: when TYPE_DECIMAL 40: v, offset = decode_big_decimal(data, offset) 41: v 42: when TYPE_TIME 43: v, offset = decode_time(data, offset) 44: v 45: when TYPE_HASH 46: v, offset = decode_hash(data, offset) 47: v 48: when TYPE_BOOLEAN 49: v, offset = decode_boolean(data, offset) 50: v 51: when TYPE_SIGNED_8BIT then raise NotImplementedError.new 52: when TYPE_SIGNED_16BIT then raise NotImplementedError.new 53: when TYPE_SIGNED_64BIT then raise NotImplementedError.new 54: when TYPE_32BIT_FLOAT then 55: v, offset = decode_32bit_float(data, offset) 56: v 57: when TYPE_64BIT_FLOAT then 58: v, offset = decode_64bit_float(data, offset) 59: v 60: when TYPE_VOID 61: nil 62: when TYPE_ARRAY 63: v, offset = TableValueDecoder.decode_array(data, offset) 64: v 65: else 66: raise ArgumentError.new("unsupported type: #{type.inspect}") 67: end 68: 69: ary << i 70: end 71: 72: 73: [ary, initial_offset + array_length + 4] 74: end
# File lib/amq/protocol/table_value_decoder.rb, line 95 95: def self.decode_big_decimal(data, offset) 96: decimals, raw = data.slice(offset, 5).unpack(PACK_UCHAR_UINT32) 97: offset += 5 98: v = BigDecimal.new(raw.to_s) * (BigDecimal.new(TEN) ** -decimals) 99: 100: [v, offset] 101: end
# File lib/amq/protocol/table_value_decoder.rb, line 113 113: def self.decode_boolean(data, offset) 114: integer = data.slice(offset, 2).unpack(PACK_CHAR).first # 0 or 1 115: offset += 1 116: [(integer == 1), offset] 117: end
# File lib/amq/protocol/table_value_decoder.rb, line 142 142: def self.decode_hash(data, offset) 143: length = data.slice(offset, 4).unpack(PACK_UINT32).first 144: v = Table.decode(data.slice(offset, length + 4)) 145: offset += 4 + length 146: 147: [v, offset] 148: end
# File lib/amq/protocol/table_value_decoder.rb, line 87 87: def self.decode_integer(data, offset) 88: v = data.slice(offset, 4).unpack(PACK_UINT32).first 89: offset += 4 90: 91: [v, offset] 92: end
# File lib/amq/protocol/table_value_decoder.rb, line 77 77: def self.decode_string(data, offset) 78: length = data.slice(offset, 4).unpack(PACK_UINT32).first 79: offset += 4 80: v = data.slice(offset, length) 81: offset += length 82: 83: [v, offset] 84: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.