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 )