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
trueif 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 1445
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 1374
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 1306
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);
RB_OBJ_WRITTEN(selv, Qundef, rpv);
return selv;
}
#clear ⇒ self
Removes all ractors from self. Raises self.
# File 'ractor_sync.c', line 1360
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 1334
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 1439
static VALUE
ractor_selector_wait(VALUE selector)
{
return ractor_selector__wait(GET_EC(), selector);
}