Log-Saftpresse
view release on metacpan or search on metacpan
lib/Log/Saftpresse/Counters.pm view on Meta::CPAN
package Log::Saftpresse::Counters;
use Moose;
# ABSTRACT: objects to hold and manipulate counters
our $VERSION = '1.6'; # VERSION
use Carp;
has 'counters' => (
is => 'ro', isa => 'HashRef', lazy => 1,
default => sub { {} },
);
sub incr_one {
my $self = shift;
return $self->incr(@_, 1);
}
sub incr {
my $self = shift;
my $incr = pop;
my $key = pop;
my $cur_level = $self->counters;
while( my $cur_key = shift ) {
if( ! defined $cur_level->{ $cur_key }) {
$cur_level->{ $cur_key } = {};
} elsif( ref($cur_level->{$cur_key}) ne 'HASH' ) {
confess('counter sub element is not a hash!');
}
$cur_level = $cur_level->{ $cur_key };
}
if( ! defined $cur_level->{$key} ) {
$cur_level->{$key} = $incr;
} else {
$cur_level->{$key} += $incr;
}
return( $cur_level->{$key} );
}
sub incr_max {
my $self = shift;
my $max = pop;
my $key = pop;
my $cur_level = $self->counters;
while( my $cur_key = shift ) {
if( ! defined $cur_level->{ $cur_key }) {
$cur_level->{ $cur_key } = {};
} elsif( ref($cur_level->{$cur_key}) ne 'HASH' ) {
die('counter sub element is not a hash!');
}
$cur_level = $cur_level->{ $cur_key };
}
if( ! defined $cur_level->{$key} ) {
$cur_level->{$key} = $max;
} elsif( $max > $cur_level->{$key} ) {
$cur_level->{$key} = $max;
}
return( $cur_level->{$key} );
}
sub get_value {
my $self = shift;
my $value = $self->get_node( @_ );
# if the element is a reference and not a value
if( ref($value) ) {
return;
}
return( $value );
}
*get = \&get_value;
( run in 0.479 second using v1.01-cache-2.11-cpan-d7f47b0818f )