Class: Babeltrace2::BTFieldClass::Structure

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

Defined Under Namespace

Classes: Member

Constant Summary

Constants inherited from Babeltrace2::BTFieldClass

IntegerSigned, IntegerUnsigned, RealDoublePrecision, RealSinglePrecision, TYPE_MAP

Instance Attribute Summary

Attributes inherited from Babeltrace2::BTObject

#handle

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Babeltrace2::BTFieldClass

#from_h, from_handle, #get_type, #get_user_attributes, #set_user_attributes, #type_is, #user_attributes=

Methods inherited from Babeltrace2::BTSharedObject

inherited

Methods inherited from Babeltrace2::BTObject

#==, #to_ptr

Constructor Details

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

Returns a new instance of Structure.



1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1042

def initialize(handle = nil, retain: true, auto_release: true,
               trace_class: nil)
  if handle
    super(handle, retain: retain, auto_release: auto_release)
  else
    handle = Babeltrace2.bt_field_class_structure_create(trace_class)
    raise Babeltrace2.process_error if handle.null?
    super(handle, retain: false)
  end
end

Class Method Details

.from_h(trace_class, h, stream_class_h = nil) ⇒ Object



1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1100

def self.from_h(trace_class, h, stream_class_h = nil)
  o = self.new(trace_class: trace_class).from_h(h)
  h[:members].each_with_index { |v, i|
    o.append_member(v[:name],
      BTFieldClass.from_h(trace_class, v[:field_class], stream_class_h))
    o.get_member_by_index(i).from_h(v)
  }
  h[:bt_field_class] = o
  o
end

Instance Method Details

#append_member(name, member_field_class) ⇒ Object Also known as: append



1053
1054
1055
1056
1057
1058
1059
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1053

def append_member(name, member_field_class)
  name = name.inspect if name.kind_of?(Symbol)
  res = Babeltrace2.bt_field_class_structure_append_member(
          @handle, name, member_field_class)
  raise Babeltrace2.process_error(res) if res != :BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK
  self
end

#get_member(member) ⇒ Object Also known as: []



1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1082

def get_member(member)
  case member
  when ::String, ::Symbol
    get_member_by_name(member)
  when ::Integer
    get_member_by_index(member)
  else
    raise TypeError, "wrong type for member query"
  end
end

#get_member_by_index(index) ⇒ Object



1067
1068
1069
1070
1071
1072
1073
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1067

def get_member_by_index(index)
  count = get_member_count
  index += count if index < 0
  return nil if index >= count || index < 0
  BTFieldClassStructureMember.new(
    Babeltrace2.bt_field_class_structure_borrow_member_by_index(@handle, index))
end

#get_member_by_name(name) ⇒ Object



1075
1076
1077
1078
1079
1080
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1075

def get_member_by_name(name)
  name = name.inspect if name.kind_of?(Symbol)
  handle = Babeltrace2.bt_field_class_structure_borrow_member_by_name(@handle, name)
  return nil if handle.null?
  BTFieldClassStructureMember.new(handle)
end

#get_member_countObject Also known as: member_count



1062
1063
1064
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1062

def get_member_count
  Babeltrace2.bt_field_class_structure_get_member_count(@handle)
end

#to_hObject



1094
1095
1096
1097
1098
# File 'lib/babeltrace2/trace-ir/field-class.rb', line 1094

def to_h
  res = super
  res[:members] = member_count.times.collect { |i| get_member_by_index(i).to_h }
  res
end