Class: FFI::Struct
- Inherits:
-
Object
- Object
- FFI::Struct
- Defined in:
- lib/ffi-compiler/fake_ffi/ffi.rb
Constant Summary collapse
- TypeMap =
{}
Class Method Summary collapse
- .by_ref(flags = :inout) ⇒ Object
- .by_value ⇒ Object
- .callback(params, ret) ⇒ Object
- .find_type(type) ⇒ Object
- .in ⇒ Object
- .layout(*args) ⇒ Object
- .out ⇒ Object
- .ptr(flags = :inout) ⇒ Object
- .val ⇒ Object
Instance Method Summary collapse
- #[](name) ⇒ Object
- #[]=(name, value) ⇒ Object
-
#initialize ⇒ Struct
constructor
A new instance of Struct.
Constructor Details
#initialize ⇒ Struct
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_value ⇒ Object
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 |
.in ⇒ Object
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 |
.out ⇒ Object
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 |
.val ⇒ Object
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 |