# File lib/amq/protocol/table_value_decoder.rb, line 23
      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