package Algorithm::FloodControl::Backend::Cache::Memcached;

use utf8;
use strict;
use warnings;

use Params::Validate qw/:all/;
use base 'Algorithm::FloodControl::Backend';

=head2 increment

=cut

sub increment {
    my ( $self )       = @_;
    my $is_added   = $self->storage->add( $self->_tail_name, 0 );    # If it does not exists
    my $last_value = 0;
    if ( ! $is_added ) {
        $last_value = $self->storage->incr( $self->_tail_name );
    }
    $self->storage->set( $self->_item_name($last_value) => time + $self->expires, $self->expires );
    return $last_value;
}

=head2 clear

=cut

sub clear {
    my ($self) = @_;
    return $self->storage->delete( $self->_tail_name );
}

=head2 get_item

=cut

sub get_item {
    my $self = shift;
    my $item = shift;
    return $self->storage->get( $self->_item_name($item) );
}

sub _last_number {
    my $self = shift;
    return $self->storage->get( $self->_tail_name );
}

sub _tail_name {
    my $self = shift;
    return $self->prefix . "_end";
}

sub _item_name {
    my $self = shift;
    my $item = shift;
    return $self->prefix . "_$item";
}

1;


__END__

=head1 NAME

=head1 DESCRIPTION



=head1 BUGS

=head1 NOTES

=head1 AUTHOR

Andrey Kostenko (), <andrey@kostenko.name>

=head1 COMPANY

Rambler Internet Holding

=head1 CREATED

01.11.2008 14:49:11 MSK

=cut