Class: Babeltrace2Gen::BTFieldClass::String

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

Constant Summary

Constants inherited from Babeltrace2Gen::BTFieldClass

BT_MATCH_ATTRS

Constants included from Babeltrace2Gen::BTPrinter

Babeltrace2Gen::BTPrinter::INDENT_INCREMENT

Instance Attribute Summary

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::BTUtils

#bt_set_conditionally

Methods inherited from Babeltrace2Gen::BTFieldClass

#bt_get_variable, from_h, #initialize

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

This class inherits a constructor from Babeltrace2Gen::BTFieldClass

Instance Method Details

#get_declarator(trace_class:, variable:) ⇒ Object



627
628
629
# File 'lib/metababel/bt2_trace_class_generator.rb', line 627

def get_declarator(trace_class:, variable:)
  pr "#{variable} = bt_field_class_string_create(#{trace_class});"
end

#get_getter(field:, arg_variables:) ⇒ Object



631
632
633
634
635
636
637
638
639
# File 'lib/metababel/bt2_trace_class_generator.rb', line 631

def get_getter(field:, arg_variables:)
  return super(field: field, arg_variables: arg_variables) unless @cast_type_is_struct

  bt_func_get = self.class.instance_variable_get(:@bt_func) % 'get'
  variable = bt_get_variable(arg_variables).name

  pr '// Dump string data to the struct.'
  pr "memcpy(&#{variable}, #{bt_func_get}(#{field}), sizeof(#{variable}));"
end

#get_setter(field:, arg_variables:) ⇒ Object



641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
# File 'lib/metababel/bt2_trace_class_generator.rb', line 641

def get_setter(field:, arg_variables:)
  return super(field: field, arg_variables: arg_variables) unless @cast_type_is_struct

  variable = bt_get_variable(arg_variables).name

  pr '// Dump data to a temporal string.'
  pr "char *#{field}_temp = (char *)malloc(sizeof(#{variable}));"
  pr "assert(#{field}_temp != NULL && \"Out of memory\");"
  pr "memcpy(#{field}_temp, &#{variable}, sizeof(#{variable}));"
  pr ''
  pr '// Set string field with dumped data.'
  pr "bt_field_string_clear(#{field});"
  pr "bt_field_string_append_status #{field}_status = bt_field_string_append_with_length(#{field}, #{field}_temp, sizeof(#{variable}));"
  pr "assert(#{field}_status == BT_FIELD_STRING_APPEND_STATUS_OK && \"Out of memory\");"
  pr "free(#{field}_temp);"
end