Parent

Included Modules

Class Index [+]

Quicksearch

AMQ::Protocol::Table

Public Class Methods

decode(data) click to toggle source
     # File lib/amq/protocol/table.rb, line 57
 57:       def self.decode(data)
 58:         table        = Hash.new
 59:         table_length = data.unpack(PACK_UINT32).first
 60: 
 61:         return table if table_length.zero?
 62: 
 63:         offset       = 4
 64:         while offset <= table_length
 65:           key, offset  = decode_table_key(data, offset)
 66:           type, offset = TableValueDecoder.decode_value_type(data, offset)
 67: 
 68:           table[key] = case type
 69:                        when TYPE_STRING
 70:                          v, offset = TableValueDecoder.decode_string(data, offset)
 71:                          v
 72:                        when TYPE_INTEGER
 73:                          v, offset = TableValueDecoder.decode_integer(data, offset)
 74:                          v
 75:                        when TYPE_DECIMAL
 76:                          v, offset = TableValueDecoder.decode_big_decimal(data, offset)
 77:                          v
 78:                        when TYPE_TIME
 79:                          v, offset = TableValueDecoder.decode_time(data, offset)
 80:                          v
 81:                        when TYPE_HASH
 82:                          v, offset = TableValueDecoder.decode_hash(data, offset)
 83:                          v
 84:                        when TYPE_BOOLEAN
 85:                          v, offset = TableValueDecoder.decode_boolean(data, offset)
 86:                          v
 87:                        when TYPE_SIGNED_8BIT  then raise NotImplementedError.new
 88:                        when TYPE_SIGNED_16BIT then raise NotImplementedError.new
 89:                        when TYPE_SIGNED_64BIT then raise NotImplementedError.new
 90:                        when TYPE_32BIT_FLOAT then
 91:                          v, offset = TableValueDecoder.decode_32bit_float(data, offset)
 92:                          v
 93:                        when TYPE_64BIT_FLOAT then
 94:                          v, offset = TableValueDecoder.decode_64bit_float(data, offset)
 95:                          v
 96:                        when TYPE_VOID
 97:                          nil
 98:                        when TYPE_ARRAY
 99:                          v, offset = TableValueDecoder.decode_array(data, offset)
100:                          v
101:                        else
102:                          raise ArgumentError, "Not a valid type: #{type.inspect}\nData: #{data.inspect}\nUnprocessed data: #{data[offset..-1].inspect}\nOffset: #{offset}\nTotal size: #{table_length}\nProcessed data: #{table.inspect}"
103:                        end
104:         end
105: 
106:         table
107:       end
decode_table_key(data, offset) click to toggle source
     # File lib/amq/protocol/table.rb, line 126
126:       def self.decode_table_key(data, offset)
127:         key_length = data.slice(offset, 1).unpack(PACK_CHAR).first
128:         offset += 1
129:         key = data.slice(offset, key_length)
130:         offset += key_length
131: 
132:         [key, offset]
133:       end
encode(table) click to toggle source
    # File lib/amq/protocol/table.rb, line 33
33:       def self.encode(table)
34:         buffer = String.new
35: 
36:         table ||= {}
37: 
38:         table.each do |key, value|
39:           key = key.to_s # it can be a symbol as well
40:           buffer << key.bytesize.chr + key
41: 
42:           case value
43:           when Hash then
44:             buffer << TYPE_HASH
45:             buffer << self.encode(value)
46:           else
47:             buffer << TableValueEncoder.encode(value)
48:           end
49:         end
50: 
51:         [buffer.bytesize].pack(PACK_UINT32) + buffer
52:       end
hash_size(value) click to toggle source
     # File lib/amq/protocol/table.rb, line 115
115:       def self.hash_size(value)
116:         acc = 0
117:         value.each do |k, v|
118:           acc += (1 + k.to_s.bytesize)
119:           acc += TableValueEncoder.field_value_size(v)
120:         end
121: 
122:         acc
123:       end
length(data) click to toggle source
     # File lib/amq/protocol/table.rb, line 110
110:       def self.length(data)
111:         data.unpack(PACK_UINT32).first
112:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.