# HG changeset patch # User Dominic Cleal # Date 1228948548 0 # Node ID 2f9832b6dededcbf7fea706df35f18c90a437be6 # Parent 19cc55690fd7b6ca58dafae276dcd00728fd505a Changing IDs to be assigned incrementally instead of array indexes diff -r 19cc55690fd7 -r 2f9832b6dede timers.pl --- 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; } }