Array-LIFO
view release on metacpan or search on metacpan
lib/Array/LIFO.pm view on Meta::CPAN
package Array::LIFO;
our $AUTHORITY = 'cpan:GENE';
# ABSTRACT: Last-in, First-out array
our $VERSION = '0.0202';
use Moose;
use namespace::autoclean;
has max_size => (
is => 'ro',
isa => 'Int',
default => -1,
);
has sum => (
is => 'rw',
isa => 'Int',
);
has average => (
is => 'rw',
isa => 'Num',
);
has stack => (
is => 'ro',
isa => 'ArrayRef[Item]',
traits => [ 'Array' ],
default => sub { [] },
handles => {
add => 'unshift',
remove => 'shift',
size => 'count',
},
trigger => sub {
my $self = shift;
if ( $self->{max_size} > 0 ) {
my $array = $self->{stack};
while ( @{ $array } > $self->{max_size} ) {
shift @{ $array };
}
}
my $size = $self->size;
my $sum = 0;
for my $q ( @{ $self->stack } ) {
if ( $q =~ /^-?\d+\.?\d*$/ ) {
$sum += $q;
}
}
$self->sum($sum);
if ( $sum > 0 ) {
$self->average( $sum / $size );
}
else {
$self->average(0);
}
},
);
around add => sub {
my $orig = shift;
( run in 0.759 second using v1.01-cache-2.11-cpan-39bf76dae61 )