package Data::MultiValued::Ranges;
use Moose;
use namespace::autoclean;
use MooseX::Params::Validate;
use Moose::Util::TypeConstraints;
use MooseX::Types::Moose qw(Num Str Undef Any);
use Data::MultiValued::Exceptions;
use Data::MultiValued::RangeContainer;
has _storage => (
is => 'rw',
isa => class_type('Data::MultiValued::RangeContainer'),
init_arg => undef,
lazy_build => 1,
);
sub _build__storage {
Data::MultiValued::RangeContainer->new();
}
sub set {
my ($self,%args) = validated_hash(
\@_,
from => { isa => Num|Undef, optional => 1, },
to => { isa => Num|Undef, optional => 1, },
value => { isa => Any, },
);
$self->_storage->get_or_create(\%args)
->{value} = $args{value};
}
sub get {
my ($self,%args) = validated_hash(
\@_,
at => { isa => Num|Undef, optional => 1, },
);
$self->_storage->get(\%args)
->{value};
}
sub clear {
my ($self,%args) = validated_hash(
\@_,
from => { isa => Num|Undef, optional => 1, },
to => { isa => Num|Undef, optional => 1, },
);
$self->_storage->clear(\%args);
}
sub _rebless_storage {
my ($self) = @_;
bless $self->{_storage},'Data::MultiValued::RangeContainer';
}
sub _as_hash {
my ($self) = @_;
my %ret = %{$self->_storage};
return {_storage=>\%ret};
}
__PACKAGE__->meta->make_immutable();
1;