Object
# File lib/ffi/struct.rb, line 122 def self.alignment @layout.alignment end
# File lib/ffi/struct.rb, line 176 def self.auto_ptr @managed_type ||= Type::Mapped.new(ManagedStructConverter.new(self)) end
# File lib/ffi/struct.rb, line 158 def self.by_ref(flags = :inout) self.ptr(flags) end
# File lib/ffi/struct.rb, line 184 def layout(*spec) # raise RuntimeError, "struct layout already defined for #{self.inspect}" if defined?(@layout) return @layout if spec.size == 0 builder = StructLayoutBuilder.new builder.union = self < Union builder.packed = @packed if defined?(@packed) builder.alignment = @min_alignment if defined?(@min_alignment) if spec[0].kind_of?(Hash) hash_layout(builder, spec) else array_layout(builder, spec) end builder.size = @size if defined?(@size) && @size > builder.size cspec = builder.build @layout = cspec unless self == Struct @size = cspec.size return cspec end
# File lib/ffi/struct.rb, line 126 def self.members @layout.members end
# File lib/ffi/struct.rb, line 134 def self.offset_of(name) @layout.offset_of(name) end
# File lib/ffi/struct.rb, line 130 def self.offsets @layout.offsets end
# File lib/ffi/struct.rb, line 146 def self.ptr(flags = :inout) @ref_data_type ||= Type::Mapped.new(StructByReference.new(self)) end
# File lib/ffi/struct.rb, line 113 def self.size defined?(@layout) ? @layout.size : defined?(@size) ? @size : 0 end
# File lib/ffi/struct.rb, line 218 def aligned(alignment = 1) @min_alignment = alignment end
# File lib/ffi/struct.rb, line 208 def callback(params, ret) mod = enclosing_module FFI::CallbackInfo.new(find_type(ret, mod), params.map { |e| find_type(e, mod) }) end
# File lib/ffi/struct.rb, line 223 def enclosing_module begin mod = self.name.split("::")[0..-2].inject(Object) { |obj, c| obj.const_get(c) } mod.respond_to?(:find_type) ? mod : nil rescue Exception nil end end
# File lib/ffi/struct.rb, line 233 def find_field_type(type, mod = enclosing_module) if type.kind_of?(Class) && type < Struct FFI::Type::Struct.new(type) elsif type.kind_of?(Class) && type < FFI::StructLayout::Field type elsif type.kind_of?(::Array) FFI::Type::Array.new(find_field_type(type[0]), type[1]) else find_type(type, mod) end end
# File lib/ffi/struct.rb, line 248 def find_type(type, mod = enclosing_module) if mod mod.find_type(type) end || FFI.find_type(type) end
# File lib/ffi/struct.rb, line 213 def packed(packed = 1) @packed = packed end
# File lib/ffi/struct.rb, line 83 def alignment self.class.alignment end
# File lib/ffi/struct.rb, line 92 def members self.class.members end
# File lib/ffi/struct.rb, line 88 def offset_of(name) self.class.offset_of(name) end
Generated with the Darkfish Rdoc Generator 2.