channel api cleanup
parent
94d72b693e
commit
d35e8b6341
|
@ -12,10 +12,9 @@ int main() {
|
|||
c.put(foldl(half, 0));
|
||||
};
|
||||
spawn(sched, f, c, arr.slice(0, arr.size() / 2));
|
||||
spawn(sched, f, c, arr.slice(arr.size() / 2, arr.size()));
|
||||
spawn(sched, f, c, arr + (arr.size() / 2));
|
||||
|
||||
int a, b;
|
||||
c.get(a), c.get(b);
|
||||
int a = c.get(), b = c.get();
|
||||
writefln("%s + %s = %s", a, b, a + b);
|
||||
};
|
||||
|
||||
|
|
|
@ -46,8 +46,11 @@ struct channel {
|
|||
p_state->put(std::move(val));
|
||||
}
|
||||
|
||||
bool get(T &val) {
|
||||
return p_state->get(val, true);
|
||||
T get() {
|
||||
T ret;
|
||||
/* guaranteed to return true if at all */
|
||||
p_state->get(ret, true);
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool try_get(T &val) {
|
||||
|
@ -87,9 +90,12 @@ private:
|
|||
}
|
||||
}
|
||||
if (p_messages.empty()) {
|
||||
if (p_closed) {
|
||||
throw channel_error{"get from a closed channel"};
|
||||
}
|
||||
return false;
|
||||
}
|
||||
val = p_messages.front();
|
||||
val = std::move(p_messages.front());
|
||||
p_messages.pop_front();
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue