Cache-Ref

 view release on metacpan or  search on metacpan

lib/Cache/Ref/CLOCK/Base.pm  view on Meta::CPAN

package Cache::Ref::CLOCK::Base;
BEGIN {
  $Cache::Ref::CLOCK::Base::AUTHORITY = 'cpan:NUFFIN';
}
BEGIN {
  $Cache::Ref::CLOCK::Base::VERSION = '0.04';
}
use Moose::Role;

use namespace::autoclean;

with qw(
    Cache::Ref::Role::API
    Cache::Ref::Role::Index
);

requires qw(_hit);

has size => (
    isa => "Int",
    is  => "ro",
    required => 1,
);

has _hand => (
    isa => "ScalarRef",
    is  => "ro",
    default => sub { my $x = -1; return \$x },
);

has _buffer => (
    isa => "ArrayRef",
    is  => "ro",
    lazy => 1,
    default => sub {
        my ( $self, $p ) = @_;
        return [ map { [] } 1 .. $self->size ],
    },
);

sub hit {
    my ( $self, @keys ) = @_;

    $self->_hit( [ grep { defined } $self->_index_get(@keys) ] );

    return;
}

sub get {
    my ( $self, @keys ) = @_;

    my @ret;

    my @entries = $self->_index_get(@keys);

    $self->_hit( [ grep { defined } @entries ] );

    return ( @keys == 1 ? ($entries[0] && $entries[0][2]) : map { $_ && $_->[2] } @entries );
}

sub clear {
    my $self = shift;
    $self->_index_clear;
    @$_ = () for @{ $self->_buffer };
}

sub remove {
    my ( $self, @keys ) = @_;
    @$_ = () for $self->_index_delete(@keys);
}



( run in 0.985 second using v1.01-cache-2.11-cpan-39bf76dae61 )