diff options
Diffstat (limited to 'Queue.pm')
-rw-r--r-- | Queue.pm | 76 |
1 files changed, 0 insertions, 76 deletions
diff --git a/Queue.pm b/Queue.pm deleted file mode 100644 index cd978e5..0000000 --- a/Queue.pm +++ /dev/null @@ -1,76 +0,0 @@ -package Glib::Thread::Queue; -use Moose; -use Glib; -use Thread::Queue; -use Carp; - -has queue => ( - is => 'ro', - isa => 'Thread::Queue', - init_arg => undef, - builder => '_build_queue', - handles => [qw( - enqueue - dequeue - dequeue_nb - pending - peek - insert - extract - )], -); - -has pipes => ( - isa => 'ArrayRef', - is => 'ro', - builder => '_build_pipes', -); - -sub _build_pipes { - my ($main,$thread);pipe($main,$thread); - - return [$main,$thread]; -} - -sub _build_queue { - return Thread::Queue->new(); -} - -sub _pipe_write { - return syswrite $_[0]->pipes->[1],'0'; -} - -sub _pipe_read { - my $foo;sysread $_[0]->pipes->[0],$foo,1; - return $foo; -} - -sub event_fh { - return $_[0]->pipes->[0]; -} - -sub event_fileno { - return fileno($_[0]->event_fh); -} - -after enqueue => \&_pipe_write; - -before dequeue => \&_pipe_read; - -sub add_watch { - my ($self,$sub)=@_; - - Glib::IO->add_watch($self->event_fileno,'in',$sub); -} - -sub signal { - my ($self)=@_; - - croak "Not signaling on an empty queue, would block" - unless $self->pending; - - $self->_pipe_write(); -} - -no Moose; -1; |