Class: ExternObject
Direct Known Subclasses
Tgui::BackendGui, Tgui::Color, Tgui::Font, Tgui::Outline, Tgui::Signal, Tgui::Texture, Tgui::Theme, Tgui::ToolTip, Tgui::Util, Tgui::Widget, Tgui::Window
Constant Summary
collapse
- @@callback_storage =
{}
- @@global_callback_storage =
{}
- @@data_storage =
{}
Instance Attribute Summary collapse
Class Method Summary
collapse
-
.abi_attr(name, type = nil, original_name = nil) ⇒ Object
-
.abi_bit_enum(base, zero, *keywords, **indexed_keywords) ⇒ Object
-
.abi_def(name, original_name = nil, **na) ⇒ Object
-
.abi_enum(base, *keywords, **indexed_keywords) ⇒ Object
-
.abi_signal(name, signal_class = Signal, original_name = nil) ⇒ Object
-
.abi_static(name, original_name = nil) ⇒ Object
-
.callback_storage ⇒ Object
-
.callback_storage=(callback_storage) ⇒ Object
-
.data_storage=(data_storage) ⇒ Object
-
.finalizer(pointer) ⇒ Object
-
.global_callback_storage ⇒ Object
-
.global_callback_storage=(global_callback_storage) ⇒ Object
-
.self_abi_def(name, abi_name, abi_interface, *def_attr) ⇒ Object
-
.self_abi_def_setter(name, abi_name, abi_interface, *def_attr) ⇒ Object
Instance Method Summary
collapse
Methods included from Packer
abi_packer, abi_packer_method_name
Methods included from Unpacker
abi_unpacker, abi_unpacker_method_name
Methods included from BangDef
def!
Constructor Details
#initialize(pointer:, autofree: true) ⇒ ExternObject
Returns a new instance of ExternObject.
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/white_gold/abi/extern_object.rb', line 10
def initialize pointer:, autofree: true
@pointer = pointer
if autofree
cl = self.class
while !cl.respond_to?(:finalizer)
cl = cl.superclass
end
ObjectSpace.define_finalizer(self, cl.proc.finalizer(pointer))
end
end
|
Instance Attribute Details
Returns the value of attribute pointer.
25
26
27
|
# File 'lib/white_gold/abi/extern_object.rb', line 25
def pointer
@pointer
end
|
Class Method Details
.abi_attr(name, type = nil, original_name = nil) ⇒ Object
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/white_gold/abi/extern_object.rb', line 99
def abi_attr name, type = nil, original_name = nil
if original_name
if original_name.end_with? "_"
getter = "#{original_name}#{name}".delete_suffix("?").to_sym
setter = "set_#{name}".delete_suffix("?").to_sym
else
getter = "get_#{original_name}".to_sym
setter = "set_#{original_name}".to_sym
end
else
if name.end_with? "?"
getter = "is_#{name}".delete_suffix("?").to_sym
else
getter = "get_#{name}".to_sym
end
setter = "set_#{name}".delete_suffix("?").to_sym
end
type ||= Boolean if name.end_with? "?"
abi_def "#{name.to_s.delete_suffix("?")}=".to_sym, setter, type => nil
abi_def name, getter, nil => type
end
|
.abi_bit_enum(base, zero, *keywords, **indexed_keywords) ⇒ Object
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
# File 'lib/white_gold/abi/extern_object.rb', line 137
def abi_bit_enum base, zero, *keywords, **indexed_keywords
if base.is_a? Enum
enum = base
else
enum = Enum.new zero, **(keywords.each_with_index.map{[_1, 1 << _2]}.to_h), **indexed_keywords
const_set base, enum
enum.name = base
end
abi_packer enum do |*o|
enum.pack(*o)
end
abi_unpacker enum do |o|
enum.unpack(o)
end
end
|
.abi_def(name, original_name = nil, **na) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# File 'lib/white_gold/abi/extern_object.rb', line 61
def abi_def name, original_name = nil, **na
if original_name
if original_name.end_with? "_"
abi_name = "_abi_#{original_name}#{name}".delete_suffix("=").delete_suffix("?").to_sym
else
abi_name = "_abi_#{original_name}".to_sym
end
else
if name.end_with? "?"
abi_name = "_abi_is_#{name}".delete_suffix("?").to_sym
elsif name.end_with? "="
abi_name = "_abi_set_#{name}".delete_suffix("=").to_sym
else
abi_name = "_abi_#{name}".to_sym
end
end
na = {nil => nil} if na.empty?
interface = na.map{|k, v| Interface.from k, v }.first
if name.to_s.end_with? "="
self_abi_def_setter name, abi_name, interface
else
self_abi_def name, abi_name, interface
end
end
|
.abi_enum(base, *keywords, **indexed_keywords) ⇒ Object
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/white_gold/abi/extern_object.rb', line 121
def abi_enum base, *keywords, **indexed_keywords
if base.is_a? Enum
enum = base
else
enum = Enum.new *keywords, **indexed_keywords
const_set base, enum
enum.name = base
end
abi_packer enum do |o|
enum.sym_to_i(o)
end
abi_unpacker enum do |o|
enum.i_to_sym(o)
end
end
|
.abi_signal(name, signal_class = Signal, original_name = nil) ⇒ Object
153
154
155
156
157
158
159
160
161
162
163
|
# File 'lib/white_gold/abi/extern_object.rb', line 153
def abi_signal name, signal_class = Signal, original_name = nil
abi_getter = "_abi_#{original_name || name}".to_sym
define_method name do |*a, &b|
signal_pointer = send(abi_getter, *a)
signal = signal_class.new signal_pointer, self
b ? signal.connect(&b) : signal
end
define_method "#{name}=" do |a|
send(name, &a)
end
end
|
.abi_static(name, original_name = nil) ⇒ Object
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/white_gold/abi/extern_object.rb', line 165
def abi_static name, original_name = nil
if original_name
if original_name.end_with? "_"
abi_name = "_abi_#{original_name}#{name}".delete_suffix("=").delete_suffix("?").to_sym
else
abi_name = "_abi_#{original_name}".delete_suffix("=").to_sym
end
else
abi_name = "_abi_#{name}".delete_suffix("=").delete_suffix("?").to_sym
end
define_singleton_method name do |*a|
send(abi_name, *a)
end
end
|
.callback_storage ⇒ Object
45
46
47
|
# File 'lib/white_gold/abi/extern_object.rb', line 45
def callback_storage
@@callback_storage
end
|
.callback_storage=(callback_storage) ⇒ Object
41
42
43
|
# File 'lib/white_gold/abi/extern_object.rb', line 41
def callback_storage=(callback_storage)
@@callback_storage = callback_storage
end
|
.data_storage=(data_storage) ⇒ Object
57
58
59
|
# File 'lib/white_gold/abi/extern_object.rb', line 57
def data_storage=(data_storage)
@@data_storage = data_storage
end
|
.finalizer(pointer) ⇒ Object
83
84
85
|
# File 'lib/white_gold/tgui-abi.rb', line 83
def finalizer pointer
Tgui::Util.free(pointer)
end
|
.global_callback_storage ⇒ Object
53
54
55
|
# File 'lib/white_gold/abi/extern_object.rb', line 53
def global_callback_storage
@@global_callback_storage
end
|
.global_callback_storage=(global_callback_storage) ⇒ Object
49
50
51
|
# File 'lib/white_gold/abi/extern_object.rb', line 49
def global_callback_storage=(global_callback_storage)
@@global_callback_storage = global_callback_storage
end
|
.self_abi_def(name, abi_name, abi_interface, *def_attr) ⇒ Object
87
88
89
90
91
|
# File 'lib/white_gold/abi/extern_object.rb', line 87
def self_abi_def name, abi_name, abi_interface, *def_attr
define_method name do |*a|
abi_interface.call self, abi_name, *def_attr, *a
end
end
|
.self_abi_def_setter(name, abi_name, abi_interface, *def_attr) ⇒ Object
93
94
95
96
97
|
# File 'lib/white_gold/abi/extern_object.rb', line 93
def self_abi_def_setter name, abi_name, abi_interface, *def_attr
define_method name do |a = VOID|
abi_interface.call self, abi_name, *def_attr, *a
end
end
|
Instance Method Details
#abi_pack(type, *a) ⇒ Object
31
32
33
|
# File 'lib/white_gold/abi/extern_object.rb', line 31
def abi_pack type, *a
ExternObject.abi_pack self, type, *a
end
|
#abi_unpack(type, object) ⇒ Object
35
36
37
|
# File 'lib/white_gold/abi/extern_object.rb', line 35
def abi_unpack type, object
ExternObject.abi_unpack self, type, object
end
|
#initialized ⇒ Object
22
23
|
# File 'lib/white_gold/abi/extern_object.rb', line 22
def initialized
end
|