Class: SDL2::Struct

Inherits:
FFI::Struct
  • Object
show all
Defined in:
lib/sdl2.rb

Overview

FFI::Struct class with some useful additions.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args, &block) ⇒ Struct

Allows creation and use within block, automatically freeing pointer after block.



16
17
18
19
20
21
22
23
# File 'lib/sdl2.rb', line 16

def initialize(*args, &block)
  super(*args)
  if block_given?
    throw 'Release must be defined to use block' unless self.class.respond_to?(:release)
    yield self
    self.class.release(self.pointer)
  end
end

Class Method Details

.member_readers(*members_to_define) ⇒ Object

Define a set of member readers Ex1: ‘member_readers [:one, :two, :three]` Ex2: `member_readers *members`



33
34
35
36
37
38
39
40
41
# File 'lib/sdl2.rb', line 33

def self.member_readers(*members_to_define)
  #self.class_eval do
  members_to_define.each do |member|
    define_method member do
      [member]
    end
  end
  #end
end

.member_writers(*members_to_define) ⇒ Object

Ex1: ‘member_writers [:one, :two, :three]` Ex2: `member_writers *members`



46
47
48
49
50
51
52
# File 'lib/sdl2.rb', line 46

def self.member_writers(*members_to_define)
  members_to_define.each do |member|
    define_method "#{member}=".to_sym do |value|
      self[member]= value
    end
  end
end

.release(pointer) ⇒ Object

A default release scheme is defined, but should be redefined where appropriate.



26
27
28
# File 'lib/sdl2.rb', line 26

def self.release(pointer)
  pointer.free
end

Instance Method Details

#==(other) ⇒ Object

Compare two structures by class and values.



69
70
71
72
73
74
75
# File 'lib/sdl2.rb', line 69

def ==(other)
  return false unless self.class == other.class
  self.class.members.each do |field|
    return false unless self[field] == other[field]
  end
  true # return true if we get this far.
end

#inspectObject

A human-readable representation of the struct and it’s values.



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/sdl2.rb', line 55

def inspect
  return 'nil' if self.null?

  #binding.pry
  #return self.to_s

  report = "struct #{self.class.to_s}{"
  report += self.class.members.collect do |field|
    "#{field}->#{self[field].inspect}"
  end.join(' ')
  report += "}"
end