AnyEvent-Tools
view release on metacpan or search on metacpan
lib/AnyEvent/Tools/Buffer.pm view on Meta::CPAN
use utf8;
use strict;
use warnings;
package AnyEvent::Tools::Buffer;
use AnyEvent::AggressiveIdle qw(aggressive_idle stop_aggressive_idle);
use AnyEvent::Util;
use Carp;
sub new
{
my $class = shift;
croak "usage: buffer(on_flush => sub { ... }, ...)" if @_ % 2;
my (%opts) = @_;
my $self = bless {
queue => [],
exists => {},
timer => undef,
lock => 0,
do_flush => 0,
unique_cb => undef,
} => ref($class) || $class;
$self->on_flush($opts{on_flush});
$self->size($opts{size} || 0);
$self->interval($opts{interval} || 0);
$self->unique_cb($opts{unique_cb});
return $self;
}
sub interval
{
my ($self, $ival) = @_;
return $self->{interval} if @_ == 1;
undef $self->{timer} unless $ival;
return $self->{interval} = $ival;
}
sub on_flush
{
my ($self, $cb) = @_;
croak "callback must be CODEREF" if $cb and 'CODE' ne ref $cb;
return $self->{on_flush} = $cb;
}
sub unique_cb
{
my ($self, $cb) = @_;
# disable unique checking
unless($cb) {
$self->{exists} = {};
return $self->{unique_cb} = $cb;
}
croak "unique_cb must be CODEREF" unless 'CODE' eq ref $cb;
$self->flush;
( run in 0.939 second using v1.01-cache-2.11-cpan-5511b514fd6 )