Mercurial > hg > skillbot
changeset 41:2f9832b6dede
Changing IDs to be assigned incrementally instead of array indexes
author | Dominic Cleal <dominic@computerkb.co.uk> |
---|---|
date | Wed, 10 Dec 2008 22:35:48 +0000 |
parents | 19cc55690fd7 |
children | bf685f1a545f |
files | timers.pl |
diffstat | 1 files changed, 16 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/timers.pl Sun Dec 07 14:50:27 2008 +0000 +++ b/timers.pl Wed Dec 10 22:35:48 2008 +0000 @@ -15,6 +15,7 @@ use warnings; use strict; +my $genid = 0; my @timers_once; my @timers_repeat; @@ -23,17 +24,19 @@ my $one_shot = {}; + $one_shot->{id} = $genid++; $one_shot->{stamp} = time(); $one_shot->{offset} = $offset; $one_shot->{coderef} = $coderef; - return push(@timers_once, $one_shot) - 1; + push(@timers_once, $one_shot); + return $one_shot->{id}; } sub del_one_shot_timer { my ($timer_id) = shift; - splice(@timers_once, $timer_id, 1); + @timers_once = grep { $_->{id} ne $timer_id } @timers_once; } @@ -42,28 +45,31 @@ my $repeat = {}; + $repeat->{id} = $genid++; $repeat->{last} = time(); $repeat->{every} = $every; $repeat->{coderef} = $coderef; - return push(@timers_repeat, $repeat) - 1; + push(@timers_repeat, $repeat); + return $repeat->{id}; } sub del_repeat_timer { my ($timer_id) = shift; - splice(@timers_repeat, $timer_id, 1); + @timers_repeat = grep { $_->{id} ne $timer_id } @timers_repeat; } sub get_one_shot_timer { my ($id) = shift; - return $timers_once[$id]; + + return grep { $_->{id} eq $id } @timers_once; } sub get_repeat_timer { my ($id) = shift; - return $timers_repeat[$id]; + return grep { $_->{id} eq $id } @timers_repeat; } sub do_timers_once { @@ -78,8 +84,9 @@ $timer = $timers_once[$timer_id]; if ($now >= $timer->{stamp} + $timer->{offset}) { - &{ $timer->{coderef} }($timer_id, $self); - del_one_shot_timer($timer_id); + &{ $timer->{coderef} }($timer->{id}, $self); + splice(@timers_once, $timer_id, 1); + $timer_id--; } } } @@ -97,7 +104,7 @@ $timer = $timers_repeat[$timer_id]; if ($now >= $timer->{last} + $timer->{every}) { - &{ $timer->{coderef} }($timer_id, $self); + &{ $timer->{coderef} }($timer->{id}, $self); $timer->{last} = $now; } }