Class: Hakuban::TagExposeContract
Instance Attribute Summary
Attributes inherited from Contract
#descriptor
Instance Method Summary
collapse
Methods included from Stream
#each
Methods inherited from Contract
#inspect
Methods inherited from FFIObject
#do_and_drop, #do_and_drop_or_return, #drop, #drop_lock, #drop_release, #dropped?, generate_finalizer, #initialize_copy, #inspect, #with_pointer, with_pointers
Constructor Details
#initialize(local_exchange, descriptor) ⇒ TagExposeContract
Returns a new instance of TagExposeContract.
149
150
151
152
153
154
155
156
|
# File 'lib/hakuban/contract.rb', line 149
def initialize(local_exchange, descriptor)
@local_exchange, @descriptor = local_exchange, descriptor
@local_exchange.with_pointer { |local_exchange_pointer|
@descriptor.with_pointer { |descriptor_pointer|
initialize_pointer(FFI::hakuban_tag_expose_contract_new(local_exchange_pointer, descriptor_pointer),:hakuban_tag_expose_contract_drop,nil)
}
}
end
|
Instance Method Details
#ready(&block) ⇒ Object
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
# File 'lib/hakuban/contract.rb', line 168
def ready(&block)
object_state_sinks_array = with_pointer { |pointer| FFI::hakuban_tag_expose_contract_ready(pointer) }
object_state_sinks = object_state_sinks_array[:pointer].read_array_of_pointer(object_state_sinks_array[:length]).map { |object_state_sinks_pointer|
ObjectStateSink.send(:new, object_state_sinks_pointer)
}
FFI::hakuban_array_drop(object_state_sinks_array)
if block
Thread.handle_interrupt(Object => :never) {
begin
Thread.handle_interrupt(Object => :immediate) {
block.call(object_state_sinks)
}
ensure
object_state_sinks.each(&:drop)
end
}
else
object_state_sinks
end
rescue FFIObject::PointerAlreadyDropped
end
|
#terminate ⇒ Object
190
191
192
193
|
# File 'lib/hakuban/contract.rb', line 190
def terminate
with_pointer { |pointer| FFI::hakuban_tag_expose_contract_terminate(pointer) }
rescue FFIObject::PointerAlreadyDropped
end
|