diff options
| author | 2015-09-24 01:32:11 +0000 | |
|---|---|---|
| committer | 2015-09-24 01:32:11 +0000 | |
| commit | 9b472795d26cd93d1bb58488ef60a062f5237295 (patch) | |
| tree | 8572778595d145176e720a1b7168c73adbd64ed4 /lib/Net/IRC/EventQueue.pm | |
| parent | b93c3a24f14e0f64bc46b4945a65ae1bba62dc12 (diff) | |
Rework module paths
Diffstat (limited to 'lib/Net/IRC/EventQueue.pm')
| -rw-r--r-- | lib/Net/IRC/EventQueue.pm | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/lib/Net/IRC/EventQueue.pm b/lib/Net/IRC/EventQueue.pm new file mode 100644 index 0000000..fdb7b44 --- /dev/null +++ b/lib/Net/IRC/EventQueue.pm @@ -0,0 +1,73 @@ +package Net::IRC::EventQueue; + +use Net::IRC::EventQueue::Entry; + +use strict; + +sub new { + my $class = shift; + + my $self = { + 'queue' => {}, + }; + + bless $self, $class; +} + +sub queue { + my $self = shift; + return $self->{'queue'}; +} + +sub enqueue { + my $self = shift; + my $time = shift; + my $content = shift; + + my $entry = new Net::IRC::EventQueue::Entry($time, $content); + $self->queue->{$entry->id} = $entry; + return $entry->id; +} + +sub dequeue { + my $self = shift; + my $event = shift; + my $result; + + if(!$event) { # we got passed nothing, so return the first event + $event = $self->head(); + delete $self->queue->{$event->id}; + $result = $event; + } elsif(!ref($event)) { # we got passed an id + $result = $self->queue->{$event}; + delete $self->queue->{$event}; + } else { # we got passed an actual event object + ref($event) eq 'Net::IRC::EventQueue::Entry' + or die "Cannot delete event type of " . ref($event) . "!"; + + $result = $self->queue->{$event->id}; + delete $self->queue->{$event->id}; + } + + return $result; +} + +sub head { + my $self = shift; + + return undef if $self->is_empty; + + no warnings; # because we want to numerically sort strings... + my $headkey = (sort {$a <=> $b} (keys(%{$self->queue})))[0]; + use warnings; + + return $self->queue->{$headkey}; +} + +sub is_empty { + my $self = shift; + + return keys(%{$self->queue}) ? 0 : 1; +} + +1; |
