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
- #getter_def ⇒ Object
-
#initialize(field_info, container_class) ⇒ FieldBuilder
constructor
A new instance of FieldBuilder.
-
#setter_def ⇒ Object
TODO: Use MethodTemplate.
- #setup_getter ⇒ Object
- #setup_setter ⇒ Object
Constructor Details
#initialize(field_info, container_class) ⇒ FieldBuilder
Returns a new instance of FieldBuilder.
234 235 236 237 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 234 def initialize(field_info, container_class) @info = field_info @container_class = container_class end |
Instance Attribute Details
#info ⇒ Object (readonly)
Returns the value of attribute info.
232 233 234 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 232 def info @info end |
Instance Method Details
#build ⇒ Object
239 240 241 242 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 239 def build setup_getter setup_setter end |
#getter_def ⇒ Object
264 265 266 267 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 264 def getter_def getter_builder = GetterBuilder.new(info) getter_builder.method_definition end |
#setter_def ⇒ Object
TODO: Use MethodTemplate
270 271 272 273 274 275 276 277 278 279 280 281 282 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 270 def setter_def builder = setter_builder field_ptr = builder.new_variable <<~CODE def #{info.name}= #{builder.method_argument_name} #{field_ptr} = @struct.to_ptr #{builder.pre_conversion.join("\n ")} #{value_storage(field_ptr, builder)} end CODE end |
#setup_getter ⇒ Object
244 245 246 247 248 249 250 251 252 253 254 255 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 244 def setup_getter # The typelib does not pass along information on whether a field is # readble or private. This means that in practice, info.readable? is # always true, even for private fields. # # We include this check here in case this practice changes. return unless info.readable? return if field_type.hidden_struct_type? return if container_info.find_instance_method(info.name) container_class.class_eval getter_def, __FILE__, __LINE__ end |
#setup_setter ⇒ Object
257 258 259 260 261 262 |
# File 'lib/gir_ffi/builders/field_builder.rb', line 257 def setup_setter return unless info.writable? return if field_type.hidden_struct_type? container_class.class_eval setter_def, __FILE__, __LINE__ end |