Class: Babeltrace2::BTField::Structure

Inherits:
Babeltrace2::BTField show all
Defined in:
lib/babeltrace2/trace-ir/field.rb

Constant Summary

Constants inherited from Babeltrace2::BTField

TYPE_MAP

Instance Attribute Summary

Attributes inherited from Babeltrace2::BTObject

#handle

Instance Method Summary collapse

Methods inherited from Babeltrace2::BTField

from_handle, #get_class, #get_class_type

Methods inherited from Babeltrace2::BTObject

#==, #initialize, #to_ptr

Constructor Details

This class inherits a constructor from Babeltrace2::BTObject

Instance Method Details

#[]=(member_field, value) ⇒ Object



652
653
654
655
# File 'lib/babeltrace2/trace-ir/field.rb', line 652

def []=(member_field, value)
  get_member_field(member_field).set_value(value)
  value
end

#eachObject



657
658
659
660
661
662
663
664
665
# File 'lib/babeltrace2/trace-ir/field.rb', line 657

def each
  if block_given?
    get_member_count.times { |i|
      yield get_member_field_by_index(i)
    }
  else
    to_enum(:each)
  end
end

#field_namesObject



676
677
678
679
# File 'lib/babeltrace2/trace-ir/field.rb', line 676

def field_names
  klass = get_class
  get_member_count.times.collect { |i| klass.get_member_by_index(i).name }
end

#get_member_countObject Also known as: member_count



620
621
622
# File 'lib/babeltrace2/trace-ir/field.rb', line 620

def get_member_count
  @member_count ||= get_class.get_member_count
end

#get_member_field(member_field) ⇒ Object Also known as: []



640
641
642
643
644
645
646
647
648
649
# File 'lib/babeltrace2/trace-ir/field.rb', line 640

def get_member_field(member_field)
  case member_field
  when ::String, Symbol
    get_member_field_by_name(member_field)
  when ::Integer
    get_member_field_by_index(member_field)
  else
    raise TypeError, "wrong type for member field query"
  end
end

#get_member_field_by_index(index) ⇒ Object



625
626
627
628
629
630
631
# File 'lib/babeltrace2/trace-ir/field.rb', line 625

def get_member_field_by_index(index)
  count = get_member_count
  index += count if index < 0
  return nil if index >= count || index < 0
  BTField.from_handle(
    Babeltrace2.bt_field_structure_borrow_member_field_by_index(@handle, index))
end

#get_member_field_by_name(name) ⇒ Object



633
634
635
636
637
638
# File 'lib/babeltrace2/trace-ir/field.rb', line 633

def get_member_field_by_name(name)
  name = name.inspect if name.kind_of?(Symbol)
  handle = Babeltrace2.bt_field_structure_borrow_member_field_by_name(@handle, name)
  return nil if handle.null?
  BTField.from_handle(handle)
end

#to_sObject



681
682
683
684
685
686
687
688
689
690
# File 'lib/babeltrace2/trace-ir/field.rb', line 681

def to_s
  s = "{"
  klass = get_class
  s << get_member_count.times.collect { |i|
    name = klass.get_member_by_index(i).name
    name = name.inspect if name.kind_of?(Symbol)
    "#{name}: #{get_member_field_by_index(i)}"
  }.join(", ")
  s << "}"
end

#valueObject



667
668
669
670
671
672
673
674
# File 'lib/babeltrace2/trace-ir/field.rb', line 667

def value
  v = {}
  klass = get_class
  get_member_count.times { |i|
    v[klass.get_member_by_index(i).name] = get_member_field_by_index(i).value
  }
  v
end