Class: GirFFI::Builders::FieldBuilder
- Inherits:
-
Object
- Object
- GirFFI::Builders::FieldBuilder
- Defined in:
- lib/gir_ffi/builders/field_builder.rb
Overview
Creates field getter and setter code for a given IFieldInfo.
Defined Under Namespace
Classes: GetterArgumentBuilder, GetterArgumentInfo, GetterBuilder
Instance Attribute Summary collapse
-
#info ⇒ Object
readonly
Returns the value of attribute info.
Instance Method Summary collapse
- #build ⇒ Object
- #container_defines_getter_method? ⇒ Boolean
- #getter_def ⇒ Object
-
#initialize(field_info) ⇒ FieldBuilder
constructor
A new instance of FieldBuilder.
-
#setter_def ⇒ Object
TODO: Use MethodTemplate.
- #setup_getter ⇒ Object
- #setup_setter ⇒ Object
Constructor Details
#initialize(field_info) ⇒ FieldBuilder
Returns a new instance of FieldBuilder.
226 227 228 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 226 def initialize(field_info) @info = field_info end |
Instance Attribute Details
#info ⇒ Object (readonly)
Returns the value of attribute info.
224 225 226 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 224 def info @info end |
Instance Method Details
#build ⇒ Object
230 231 232 233 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 230 def build setup_getter setup_setter end |
#container_defines_getter_method? ⇒ Boolean
239 240 241 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 239 def container_defines_getter_method? container_info.find_instance_method info.name end |
#getter_def ⇒ Object
247 248 249 250 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 247 def getter_def getter_builder = GetterBuilder.new(info) getter_builder.method_definition end |
#setter_def ⇒ Object
TODO: Use MethodTemplate
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 253 def setter_def builder = setter_builder field_ptr = builder.new_variable typed_ptr = builder.new_variable " def \#{info.name}= \#{builder.method_argument_name}\n \#{field_ptr} = @struct.to_ptr + \#{info.offset}\n \#{typed_ptr} = GirFFI::InOutPointer.new(\#{field_type_tag}, \#{field_ptr})\n \#{builder.pre_conversion.join(\"\\n \")}\n \#{typed_ptr}.set_value \#{builder.call_argument_name}\n end\n CODE\nend\n".reset_indentation |
#setup_getter ⇒ Object
235 236 237 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 235 def setup_getter container_class.class_eval getter_def unless container_defines_getter_method? end |
#setup_setter ⇒ Object
243 244 245 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 243 def setup_setter container_class.class_eval setter_def if info.writable? end |