Class: FFI::Struct

Inherits:
Object
  • Object
show all
Defined in:
lib/ffi-compiler/fake_ffi/ffi.rb

Constant Summary collapse

TypeMap =
{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeStruct

Returns a new instance of Struct.



229
230
231
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 229

def initialize
  @data = {}
end

Class Method Details

.by_ref(flags = :inout) ⇒ Object



277
278
279
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 277

def self.by_ref(flags = :inout)
  self.ptr(flags)
end

.by_valueObject



273
274
275
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 273

def self.by_value
  self.val
end

.callback(params, ret) ⇒ Object



241
242
243
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 241

def self.callback(params, ret)
  FFI::CallbackInfo.new(find_type(ret), params.map { |e| find_type(e) })
end

.find_type(type) ⇒ Object



246
247
248
249
250
251
252
253
254
255
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 246

def self.find_type(type)
  t = TypeMap[type]
  return t unless t.nil?

  if type.is_a?(Class) && type < Struct
    return TypeMap[type] = StructByValue.new(type)
  end

  TypeMap[type] = FFI.find_type(type)
end

.inObject



257
258
259
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 257

def self.in
  ptr(:in)
end

.layout(*args) ⇒ Object



207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 207

def self.layout(*args)
  return if args.size.zero?
  fields = []
  if args.first.kind_of?(Hash)
    args.first.each do |name, type|
      fields << { :name => name, :type => find_type(type), :offset => nil }
    end
  else
    i = 0
    while i < args.size
      name, type, offset = args[i], args[i+1], nil
      i += 2
      if args[i].kind_of?(Integer)
        offset = args[i]
        i += 1
      end
      fields << { :name => name, :type => find_type(type), :offset => offset }
    end
  end
  FFI.exporter.struct(self.to_s, fields)
end

.outObject



261
262
263
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 261

def self.out
  ptr(:out)
end

.ptr(flags = :inout) ⇒ Object



265
266
267
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 265

def self.ptr(flags = :inout)
  StructByReference.new(self)
end

.valObject



269
270
271
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 269

def self.val
  StructByValue.new(self)
end

Instance Method Details

#[](name) ⇒ Object



233
234
235
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 233

def [](name)
  @data[name]
end

#[]=(name, value) ⇒ Object



237
238
239
# File 'lib/ffi-compiler/fake_ffi/ffi.rb', line 237

def []=(name, value)
  @data[name] = value
end