Class: RabbitMQ::FFI::Table Private

Inherits:
FFI::Struct
  • Object
show all
Includes:
Enumerable
Defined in:
lib/rabbitmq/ffi.rb,
lib/rabbitmq/ffi/ext/table.rb

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.from(params) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rabbitmq/ffi/ext/table.rb', line 34

def self.from(params)
  size      = params.size
  entry_ptr = Util.mem_ptr(size * FFI::TableEntry.size, release: false)
  params.each_with_index do |param, idx|
    entry = FFI::TableEntry.new(entry_ptr + idx * FFI::TableEntry.size)
    entry[:key]   = FFI::Bytes.from_s(param.first.to_s)
    entry[:value] = FFI::FieldValue.from(param.last)
  end
  
  obj = new
  obj[:num_entries] = size
  obj[:entries]     = entry_ptr
  obj
end

Instance Method Details

#each(*a, &b) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



8
9
10
11
12
13
14
# File 'lib/rabbitmq/ffi/ext/table.rb', line 8

def each(*a, &b)
  entry_ptr = self[:entries]
  entries   = self[:num_entries].times.map do |i|
    FFI::TableEntry.new(entry_ptr + i * FFI::TableEntry.size)
  end
  entries.each(*a, &b)
end

#free!Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



25
26
27
28
29
30
31
32
# File 'lib/rabbitmq/ffi/ext/table.rb', line 25

def free!
  self.each do |entry|
    entry[:key].free!
    entry[:value].free!
  end
  FFI.free(self[:entries])
  clear
end

#to_h(free = false) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



16
17
18
19
20
21
22
23
# File 'lib/rabbitmq/ffi/ext/table.rb', line 16

def to_h(free=false)
  result = self.map do |entry|
    [entry[:key].to_s(free), entry[:value].to_value(free)]
  end.to_h
  
  clear if free
  result
end