Danga-Socket
view release on metacpan or search on metacpan
lib/Danga/Socket.pm view on Meta::CPAN
my $fire_time = Time::HiRes::time() + $secs;
my $timer = bless [$fire_time, $coderef], "Danga::Socket::Timer";
if (!@Timers || $fire_time >= $Timers[-1][0]) {
push @Timers, $timer;
return $timer;
}
# Now, where do we insert? (NOTE: this appears slow, algorithm-wise,
# but it was compared against calendar queues, heaps, naive push/sort,
# and a bunch of other versions, and found to be fastest with a large
# variety of datasets.)
for (my $i = 0; $i < @Timers; $i++) {
if ($Timers[$i][0] > $fire_time) {
splice(@Timers, $i, 0, $timer);
return $timer;
}
}
die "Shouldn't get here.";
( run in 2.120 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )