Skip to content

Commit

Permalink
Streamline Supply.elems
Browse files Browse the repository at this point in the history
Into 2 separate multi methods, one for the timed version, and one for
the version that doesn't use time.  Also use nqp::op for time keeping
to reduce timing overhead.
  • Loading branch information
lizmat committed Dec 31, 2019
1 parent 6bd0dd5 commit cfb655b
Showing 1 changed file with 21 additions and 16 deletions.
37 changes: 21 additions & 16 deletions src/core.c/Supply.pm6
Expand Up @@ -1121,24 +1121,29 @@ my class Supply does Awaitable {
}
}

method elems(Supply:D: $seconds? ) {
multi method elems(Supply:D:) {
supply {
my int $elems = 0;
if $seconds {
my $last_time = time div $seconds;
my int $last_elems = $elems;
whenever self -> \val {
$last_elems = $elems = $elems + 1;
my $this_time = time div $seconds;
if $this_time != $last_time {
emit $elems;
$last_time = $this_time;
}
LAST emit($elems) if $elems != $last_elems;
my int $elems;
whenever self { emit ++$elems }
}
}
multi method elems(Supply:D: $seconds ) {
supply {
my $last-time := nqp::time_i() div $seconds;
my $this-time;

my int $elems;
my int $last-elems;

whenever self {
$last-elems = ++$elems;
$this-time := nqp::time_i() div $seconds;

if $this-time != $last-time {
emit $elems;
$last-time := $this-time;
}
}
else {
whenever self -> \val { emit $elems = $elems + 1 }
LAST emit $elems if $elems != $last-elems;
}
}
}
Expand Down

0 comments on commit cfb655b

Please sign in to comment.