Class: Babeltrace2::BTValue::Array

Inherits:
Babeltrace2::BTValue show all
Defined in:
lib/babeltrace2/value.rb

Constant Summary collapse

AppendElementStatus =
BTValueArrayAppendElementStatus
SetElementByIndexStatus =
BTValueArraySetElementByIndexStatus

Constants inherited from Babeltrace2::BTValue

ArrayAppendElementStatus, ArraySetElementByIndexStatus, IntegerSigned, IntegerUnsigned, MapExtendStatus, MapForeachEntryConstFuncStatus, MapForeachEntryConstStatus, MapForeachEntryFuncStatus, MapForeachEntryStatus, StringSetStatus, TYPE_MAP

Instance Attribute Summary

Attributes inherited from Babeltrace2::BTObject

#handle

Instance Method Summary collapse

Methods inherited from Babeltrace2::BTValue

#copy, from_handle, from_value, #get_type, #is_equal, #to_s

Methods inherited from Babeltrace2::BTSharedObject

inherited

Methods inherited from Babeltrace2::BTObject

#==, #to_ptr

Constructor Details

#initialize(handle = nil, retain: true, auto_release: true) ⇒ Array

Returns a new instance of Array.



494
495
496
497
498
499
500
501
502
# 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

Instance Method Details

#[]=(index, value) ⇒ Object



559
560
561
562
# File 'lib/babeltrace2/value.rb', line 559

def []=(index, value)
  set_element_by_index(index, value)
  value
end

#append_element(value) ⇒ Object Also known as: push



504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
# 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

#eachObject



583
584
585
586
587
588
589
590
591
# 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?Boolean

Returns:

  • (Boolean)


579
580
581
# File 'lib/babeltrace2/value.rb', line 579

def empty?
  length == 0
end

#get_element_by_index(index) ⇒ Object Also known as: []

Raises:

  • (IndexError)


564
565
566
567
568
569
570
# 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

#get_lengthObject Also known as: length



573
574
575
# File 'lib/babeltrace2/value.rb', line 573

def get_length
  Babeltrace2.bt_value_array_get_length(@handle)
end

#set_element_by_index(index, value) ⇒ Object

Raises:

  • (IndexError)


548
549
550
551
552
553
554
555
556
557
# 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

#valueObject Also known as: to_a



593
594
595
# File 'lib/babeltrace2/value.rb', line 593

def value
  each.collect(&:value)
end