class Babeltrace2::BTValue::Map

Constants

ExtendStatus
ForeachEntryConstFuncStatus
ForeachEntryConstStatus
ForeachEntryFuncStatus
ForeachEntryStatus

Public Class Methods

new(handle = nil, retain: true, auto_release: true) click to toggle source
Calls superclass method Babeltrace2::BTSharedObject::new
# File lib/babeltrace2/value.rb, line 743
def initialize(handle = nil, retain: true, auto_release: true)
  if handle
    super(handle, retain: retain, auto_release: auto_release)
  else
    handle = Babeltrace2.bt_value_map_create()
    raise Babeltrace2.process_error if handle.null?
    super(handle)
  end
end

Public Instance Methods

[](key)
Alias for: get_entry_value
[]=(key, value) click to toggle source
# File lib/babeltrace2/value.rb, line 797
def []=(key, value)
  insert_entry(key, value)
  value
end
each(&block) click to toggle source
# File lib/babeltrace2/value.rb, line 825
def each(&block)
  if block_given?
    block_wrapper = lambda { |key, handle, ptr|
      begin
        val = BTValue.from_handle(handle)
        key = key[1..-1].to_sym if key[0] == ':'
        block.call(key, val)
        :BT_VALUE_MAP_FOREACH_ENTRY_FUNC_STATUS_OK
      rescue Exception => e
        Babeltrace2.stack_ruby_error(e, source: nil)
        :BT_VALUE_MAP_FOREACH_ENTRY_FUNC_STATUS_ERROR
      end
    }
    Babeltrace2.bt_value_map_foreach_entry(@handle, block_wrapper, nil)
  else
    to_enum(:each)
  end
end
empty?() click to toggle source
# File lib/babeltrace2/value.rb, line 807
def empty?
  size == 0
end
extend(other) click to toggle source
# File lib/babeltrace2/value.rb, line 857
def extend(other)
  hsh = self.class.new
  hsh.extend!(self)
  hsh.extend!(other)
end
extend!(other) click to toggle source
# File lib/babeltrace2/value.rb, line 851
def extend!(other)
  res = Babeltrace2.bt_value_map_extend(@handle, other)
  raise Babeltrace2.process_error(res) if res != :BT_VALUE_COPY_STATUS_OK
  self
end
get_entry_value(key) click to toggle source
# File lib/babeltrace2/value.rb, line 817
def get_entry_value(key)
  key = key.inspect if key.kind_of?(Symbol)
  handle = Babeltrace2.bt_value_map_borrow_entry_value(@handle, key)
  return nil if handle.null?
  BTValue.from_handle(handle)
end
Also aliased as: []
get_size() click to toggle source
# File lib/babeltrace2/value.rb, line 802
def get_size
  Babeltrace2.bt_value_map_get_size(@handle)
end
Also aliased as: size
has_entry(key) click to toggle source
# File lib/babeltrace2/value.rb, line 811
def has_entry(key)
  key = key.inspect if key.kind_of?(Symbol)
  Babeltrace2.bt_value_map_has_entry(@handle, key) != BT_FALSE
end
Also aliased as: include?
include?(key)
Alias for: has_entry
insert_entry(key, value) click to toggle source
# File lib/babeltrace2/value.rb, line 753
def insert_entry(key, value)
  key = key.inspect if key.kind_of?(Symbol)
  res = case value
    when BTValue
      Babeltrace2.bt_value_map_insert_entry(@handle, key, value)
    when nil
      Babeltrace2.bt_value_map_insert_entry(@handle, key, Babeltrace2.bt_value_null)
    when true
      Babeltrace2.bt_value_map_insert_bool_entry(@handle, key, BT_TRUE)
    when false
      Babeltrace2.bt_value_map_insert_bool_entry(@handle, key, BT_FALSE)
    when ::Integer
      if value > (1<<63) - 1
        Babeltrace2.bt_value_map_insert_unsigned_integer_entry(@handle, key, value)
      else
        Babeltrace2.bt_value_map_insert_signed_integer_entry(@handle, key, value)
      end
    when ::Float
      Babeltrace2.bt_value_map_insert_real_entry(@handle, key, value)
    when ::String
      Babeltrace2.bt_value_map_insert_string_entry(@handle, key, value)
    when ::Array
      ptr = FFI::MemoryPointer.new(:pointer)
      res = Babeltrace2.bt_value_map_insert_empty_array_entry(@handle, key, ptr)
      raise Babeltrace2.process_error(res) if res != :BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK
      arr = BTValueArray.new(BTValueArrayHandle.new(ptr.read_pointer),
                             retain: false, auto_release: false)
      value.each { |v| arr.append_element(v) }
      :BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK
    when ::Hash
      ptr = FFI::MemoryPointer.new(:pointer)
      res = Babeltrace2.bt_value_map_insert_empty_map_entry(@handle, key, ptr)
      raise Babeltrace2.process_error(res) if res != :BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK
      map = BTValueMap.new(BTValueMapHandle.new(ptr.read_pointer),
                           retain: false, auto_release: false)
      value.each { |k, v| map.insert_entry(k, v) }
      :BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK
    else
      raise TypeError, "unsupported value type"
    end
  raise Babeltrace2.process_error(res) if res != :BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK
  self
end
size()
Alias for: get_size
to_h()
Alias for: value
value() click to toggle source
# File lib/babeltrace2/value.rb, line 844
def value
  val = {}
  each { |k, v| val[k] = v.value }
  val
end
Also aliased as: to_h