Class: Babeltrace2Gen::BTFieldClass::Structure

Inherits:
Babeltrace2Gen::BTFieldClass show all
Extended by:
Babeltrace2Gen::BTFromH
Includes:
Babeltrace2Gen::BTMatchMembers
Defined in:
lib/metababel/bt2_trace_class_generator.rb

Constant Summary collapse

BT_MATCH_ATTRS =
[:members]

Constants included from Babeltrace2Gen::BTPrinter

Babeltrace2Gen::BTPrinter::INDENT_INCREMENT

Instance Attribute Summary collapse

Attributes inherited from Babeltrace2Gen::BTFieldClass

#cast_type, #cast_type_is_struct, #type

Attributes included from Babeltrace2Gen::BTLocator

#parent, #variable

Instance Method Summary collapse

Methods included from Babeltrace2Gen::BTFromH

from_h

Methods included from Babeltrace2Gen::BTMatchMembers

#match?

Methods inherited from Babeltrace2Gen::BTFieldClass

#bt_get_variable, from_h

Methods included from Babeltrace2Gen::BTMatch

#match?

Methods included from Babeltrace2Gen::BTPrinter

context, #name_sanitized, pr, #scope

Methods included from Babeltrace2Gen::BTLocator

#rec_event_class, #rec_member_class, #rec_stream_class, #rec_trace_class, #resolve_path

Constructor Details

#initialize(parent:, members: []) ⇒ Structure

Returns a new instance of Structure.



818
819
820
821
# File 'lib/metababel/bt2_trace_class_generator.rb', line 818

def initialize(parent:, members: [])
  @parent = parent
  @members = members.collect { |m| BTMemberClass.new(parent: self, **m) }
end

Instance Attribute Details

#membersObject (readonly)

Returns the value of attribute members.



814
815
816
# File 'lib/metababel/bt2_trace_class_generator.rb', line 814

def members
  @members
end

Instance Method Details

#[](index) ⇒ Object



823
824
825
826
827
828
829
830
831
832
# File 'lib/metababel/bt2_trace_class_generator.rb', line 823

def [](index)
  case index
  when ::Integer
    @members[index]
  when ::String
    @members.find { |m| m.name == index }
  else
    raise("Unknow Type (#{index.class}) for index: #{index}")
  end
end

#get_declarator(trace_class:, variable:) ⇒ Object



834
835
836
837
838
839
840
841
842
843
844
845
846
# File 'lib/metababel/bt2_trace_class_generator.rb', line 834

def get_declarator(trace_class:, variable:)
  @variable = variable
  pr "#{variable} = bt_field_class_structure_create(#{trace_class});"
  @members.each_with_index do |m, i|
    var_name = "#{variable}_m_#{i}"
    scope do
      pr "bt_field_class *#{var_name};"
      m.field_class.get_declarator(trace_class: trace_class, variable: var_name)
      pr "bt_field_class_structure_append_member(#{variable}, \"#{m.name}\", #{var_name});"
      pr "bt_field_class_put_ref(#{var_name});"
    end
  end
end

#get_getter(variable:, arg_variables:) ⇒ Object



858
859
860
861
862
863
864
865
866
# File 'lib/metababel/bt2_trace_class_generator.rb', line 858

def get_getter(variable:, arg_variables:)
  @members.each_with_index do |m, i|
    field = "#{variable}_m_#{i}"
    scope do
      pr "const bt_field *#{field} = bt_field_structure_borrow_member_field_by_index_const(#{variable}, #{i});"
      m.field_class.get_getter(field: field, arg_variables: arg_variables)
    end
  end
end

#get_setter(variable:, arg_variables:) ⇒ Object



848
849
850
851
852
853
854
855
856
# File 'lib/metababel/bt2_trace_class_generator.rb', line 848

def get_setter(variable:, arg_variables:)
  @members.each_with_index do |m, i|
    field = "#{variable}_m_#{i}"
    scope do
      pr "bt_field *#{field} = bt_field_structure_borrow_member_field_by_index(#{variable}, #{i});"
      m.field_class.get_setter(field: field, arg_variables: arg_variables)
    end
  end
end