### Home Classes Methods

### In Files

- lib/ffi/struct.rb

### Parent

Object

### Namespace

- CLASS FFI::Struct::ManagedStructConverter

### Methods

- ::align
- ::aligned
- ::alignment
- ::auto_ptr
- ::by_ref
- ::by_value
- ::callback
- ::enclosing_module
- ::find_field_type
- ::find_type
- ::in
- ::layout
- ::members
- ::offset_of
- ::offsets
- ::out
- ::pack
- ::packed
- ::ptr
- ::size
- ::size=
- ::val
- #align
- #alignment
- #clear
- #members
- #offset_of
- #offsets
- #size
- #to_ptr
- #values

### Files

- History.txt
- README.rdoc

### Class/Module Index

Quicksearch

- FFI
- FFI::AutoPointer
- FFI::AutoPointer::CallableReleaser
- FFI::AutoPointer::DefaultReleaser
- FFI::AutoPointer::Releaser
- FFI::ConstGenerator
- FFI::ConstGenerator::Constant
- FFI::Enum
- FFI::Enums
- FFI::Generator
- FFI::Generator::Task
- FFI::IO
- FFI::Library
- FFI::ManagedStruct
- FFI::NotFoundError
- FFI::Platform
- FFI::PlatformError
- FFI::Pointer
- FFI::StrPtrConverter
- FFI::Struct
- FFI::Struct::ManagedStructConverter
- FFI::StructGenerator
- FFI::StructGenerator::Field
- FFI::StructLayout
- FFI::StructLayout::Enum
- FFI::StructLayout::InnerStruct
- FFI::StructLayout::Mapped
- FFI::StructLayoutBuilder
- FFI::TypesGenerator
- FFI::Union
- FFI::VariadicInvoker

No matching classes.

# FFI::Struct

### Public Class Methods

alignment() click to toggle source

    # File lib/ffi/struct.rb, line 122
    def self.alignment
      @layout.alignment
    end

auto_ptr() click to toggle source

    # File lib/ffi/struct.rb, line 176
    def self.auto_ptr
      @managed_type ||= Type::Mapped.new(ManagedStructConverter.new(self))
    end

by_ref(flags = :inout) click to toggle source

    # File lib/ffi/struct.rb, line 158
    def self.by_ref(flags = :inout)
      self.ptr(flags)
    end

by_value() click to toggle source

    # File lib/ffi/struct.rb, line 154
    def self.by_value
      self.val
    end

in() click to toggle source

    # File lib/ffi/struct.rb, line 138
    def self.in
      ptr(:in)
    end

layout(*spec) click to toggle source

    # 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

members() click to toggle source

    # File lib/ffi/struct.rb, line 126
    def self.members
      @layout.members
    end

offset_of(name) click to toggle source

    # File lib/ffi/struct.rb, line 134
    def self.offset_of(name)
      @layout.offset_of(name)
    end

offsets() click to toggle source

    # File lib/ffi/struct.rb, line 130
    def self.offsets
      @layout.offsets
    end

out() click to toggle source

    # File lib/ffi/struct.rb, line 142
    def self.out
      ptr(:out)
    end

ptr(flags = :inout) click to toggle source

    # File lib/ffi/struct.rb, line 146
    def self.ptr(flags = :inout)
      @ref_data_type ||= Type::Mapped.new(StructByReference.new(self))
    end

size() click to toggle source

    # File lib/ffi/struct.rb, line 113
    def self.size
      defined?(@layout) ? @layout.size : defined?(@size) ? @size : 0
    end

size=(size) click to toggle source

    # File lib/ffi/struct.rb, line 117
    def self.size=(size)
      raise ArgumentError, "Size already set" if defined?(@size) || defined?(@layout)
      @size = size
    end

val() click to toggle source

    # File lib/ffi/struct.rb, line 150
    def self.val
      @val_data_type ||= StructByValue.new(self)
    end

### Protected Class Methods

align(alignment = 1) click to toggle source
Alias for: aligned
aligned(alignment = 1) click to toggle source

    # File lib/ffi/struct.rb, line 218
    def aligned(alignment = 1)
      @min_alignment = alignment
    end

Also aliased as: align
callback(params, ret) click to toggle source

    # 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

enclosing_module() click to toggle source

    # 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

find_field_type(type, mod = enclosing_module) click to toggle source

    # 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

find_type(type, mod = enclosing_module) click to toggle source

    # 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

pack(packed = 1) click to toggle source
Alias for: packed
packed(packed = 1) click to toggle source

    # File lib/ffi/struct.rb, line 213
    def packed(packed = 1)
      @packed = packed
    end

Also aliased as: pack

### Public Instance Methods

align() click to toggle source
Alias for: alignment
alignment() click to toggle source

    # File lib/ffi/struct.rb, line 83
    def alignment
      self.class.alignment
    end

Also aliased as: align
clear() click to toggle source

    # File lib/ffi/struct.rb, line 104
    def clear
      pointer.clear
      self
    end

members() click to toggle source

    # File lib/ffi/struct.rb, line 92
    def members
      self.class.members
    end

offset_of(name) click to toggle source

    # File lib/ffi/struct.rb, line 88
    def offset_of(name)
      self.class.offset_of(name)
    end

offsets() click to toggle source

    # File lib/ffi/struct.rb, line 100
    def offsets
      self.class.offsets
    end

size() click to toggle source

    # File lib/ffi/struct.rb, line 79
    def size
      self.class.size
    end

to_ptr() click to toggle source

    # File lib/ffi/struct.rb, line 109
    def to_ptr
      pointer
    end

values() click to toggle source

    # File lib/ffi/struct.rb, line 96
    def values
      members.map { |m| self[m] }
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.