class Babeltrace2::BTValue::Array

Constants

AppendElementStatus
SetElementByIndexStatus

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 494
def initialize(handle = nil, retain: true, auto_release: true)
  if handle
    super(handle, retain: retain, auto_release: auto_release)
  else
    handle = Babeltrace2.bt_value_array_create()
    raise Babeltrace2.process_error if handle.null?
    super(handle)
  end
end

Public Instance Methods

[](index)
[]=(index, value) click to toggle source
# File lib/babeltrace2/value.rb, line 559
def []=(index, value)
  set_element_by_index(index, value)
  value
end
append_element(value) click to toggle source
# File lib/babeltrace2/value.rb, line 504
def append_element(value)
  res = case value
    when BTValue
      Babeltrace2.bt_value_array_append_element(@handle, value)
    when nil
      Babeltrace2.bt_value_array_append_element(@handle, Babeltrace2.bt_value_null)
    when true
      Babeltrace2.bt_value_array_append_bool_element(@handle, BT_TRUE)
    when false
      Babeltrace2.bt_value_array_append_bool_element(@handle, BT_FALSE)
    when ::Integer
      if value > (1<<63) - 1
        Babeltrace2.bt_value_array_append_unsigned_integer_element(@handle, value)
      else
        Babeltrace2.bt_value_array_append_signed_integer_element(@handle, value)
      end
    when ::Float
      Babeltrace2.bt_value_array_append_real_element(@handle, value)
    when ::String
      Babeltrace2.bt_value_array_append_string_element(@handle, value)
    when ::Array
      ptr = FFI::MemoryPointer.new(:pointer)
      res = Babeltrace2.bt_value_array_append_empty_array_element(@handle, ptr)
      raise Babeltrace2.process_error(res) if res != :BT_VALUE_ARRAY_APPEND_ELEMENT_STATUS_OK
      arr = BTValueArray.new(BTValueArrayHandle.new(ptr.read_pointer),
                             retain: false, auto_release: false)
      value.each { |v| arr.append_element(v) }
      :BT_VALUE_ARRAY_APPEND_ELEMENT_STATUS_OK
    when ::Hash
      ptr = FFI::MemoryPointer.new(:pointer)
      res = Babeltrace2.bt_value_array_append_empty_map_element(@handle, ptr)
      raise Babeltrace2.process_error(res) if res != :BT_VALUE_ARRAY_APPEND_ELEMENT_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_ARRAY_APPEND_ELEMENT_STATUS_OK
    else
      raise TypeError, "unsupported value type"
    end
  raise Babeltrace2.process_error(res) if res != :BT_VALUE_ARRAY_APPEND_ELEMENT_STATUS_OK
  self
end
Also aliased as: push
each() { |get_element_by_index(i)| ... } click to toggle source
# File lib/babeltrace2/value.rb, line 583
def each
  if block_given?
    length.times { |i|
       yield get_element_by_index(i)
    }
  else
    to_enum(:each)
  end
end
empty?() click to toggle source
# File lib/babeltrace2/value.rb, line 579
def empty?
  length == 0
end
get_element_by_index(index) click to toggle source
# File lib/babeltrace2/value.rb, line 564
def get_element_by_index(index)
  l = length
  index += l if index < 0
  raise IndexError, "invalid index" if index < 0 || index >= l
  handle = Babeltrace2.bt_value_array_borrow_element_by_index(@handle, index)
  BTValue.from_handle(handle)
end
Also aliased as: []
get_length() click to toggle source
# File lib/babeltrace2/value.rb, line 573
def get_length
  Babeltrace2.bt_value_array_get_length(@handle)
end
Also aliased as: length
length()
Also aliased as: size
Alias for: get_length
push(value)
Alias for: append_element
set_element_by_index(index, value) click to toggle source
# File lib/babeltrace2/value.rb, line 548
def set_element_by_index(index, value)
  l = length
  index += l if index < 0
  raise IndexError, "invalid index" if index < 0 || index >= l
  val = value
  val = BTValue.from_value(val) unless val.kind_of?(BTValue)
  res = Babeltrace2.bt_value_array_set_element_by_index(@handle, index, val)
  raise Babeltrace2.process_error(res) if res != :BT_VALUE_ARRAY_SET_ELEMENT_BY_INDEX_STATUS_OK
  self
end
size()
Alias for: length
to_a()
Alias for: value
value() click to toggle source
# File lib/babeltrace2/value.rb, line 593
def value
  each.collect(&:value)
end
Also aliased as: to_a