Class: Ractor::Selector
Do not use. This class is for internal use only.
Relationships & Source Files | |
Inherits: | Object |
Defined in: | ractor_sync.c, ractor_sync.c |
Overview
currently
Selects multiple Ractors to be activated.
Class Method Summary
- .new(*ractors, klass) constructor
Instance Attribute Summary
-
#empty? ⇒ Boolean
readonly
Returns
true
if no ractor is added.
Instance Method Summary
-
#add(ractor) ⇒ ractor
Adds ractor to
self
. -
#clear ⇒ self
Removes all ractors from
self
. -
#remove(ractor) ⇒ ractor
Removes ractor from
self
. -
#wait(receive: false, yield_value: undef, move: false) ⇒ Array, value
Waits until any ractor in selector can be active.
Constructor Details
.new(*ractors, klass)
[ GitHub ]# File 'ractor_sync.c', line 1442
static VALUE ractor_selector_new(int argc, VALUE *ractors, VALUE klass) { VALUE selector = ractor_selector_create(klass); for (int i=0; i<argc; i++) { ractor_selector_add(selector, ractors[i]); } return selector; }
Instance Attribute Details
#empty? ⇒ Boolean
(readonly)
Returns true
if no ractor is added.
# File 'ractor_sync.c', line 1371
static VALUE ractor_selector_empty_p(VALUE selv) { struct ractor_selector *s = RACTOR_SELECTOR_PTR(selv); return s->ports->num_entries == 0 ? Qtrue : Qfalse; }
Instance Method Details
#add(ractor) ⇒ ractor
Adds ractor to self
. Raises an exception if ractor is already added. Returns ractor.
# File 'ractor_sync.c', line 1305
static VALUE ractor_selector_add(VALUE selv, VALUE rpv) { if (!ractor_port_p(rpv)) { rb_raise(rb_eArgError, "Not a Ractor::Port object"); } struct ractor_selector *s = RACTOR_SELECTOR_PTR(selv); const struct ractor_port *rp = RACTOR_PORT_PTR(rpv); if (st_lookup(s->ports, (st_data_t)rpv, NULL)) { rb_raise(rb_eArgError, "already added"); } st_insert(s->ports, (st_data_t)rpv, (st_data_t)rp); return selv; }
#clear ⇒ self
Removes all ractors from self
. Raises self
.
# File 'ractor_sync.c', line 1357
static VALUE ractor_selector_clear(VALUE selv) { struct ractor_selector *s = RACTOR_SELECTOR_PTR(selv); st_clear(s->ports); return selv; }
#remove(ractor) ⇒ ractor
Removes ractor from self
. Raises an exception if ractor is not added. Returns the removed ractor.
# File 'ractor_sync.c', line 1331
static VALUE ractor_selector_remove(VALUE selv, VALUE rpv) { if (!ractor_port_p(rpv)) { rb_raise(rb_eArgError, "Not a Ractor::Port object"); } struct ractor_selector *s = RACTOR_SELECTOR_PTR(selv); if (!st_lookup(s->ports, (st_data_t)rpv, NULL)) { rb_raise(rb_eArgError, "not added yet"); } st_delete(s->ports, (st_data_t *)&rpv, NULL); return selv; }
#wait(receive: false, yield_value: undef, move: false) ⇒ Array, value
Waits until any ractor in selector can be active.
# File 'ractor_sync.c', line 1436
static VALUE ractor_selector_wait(VALUE selector) { return ractor_selector__wait(GET_EC(), selector); }