diff options
author | Gianni Ceccarelli <dakkar@thenautilus.net> | 2011-11-14 14:34:38 +0000 |
---|---|---|
committer | Gianni Ceccarelli <dakkar@thenautilus.net> | 2011-11-14 14:34:38 +0000 |
commit | a2e02258ce328688622979bc1047922f4e04f70b (patch) | |
tree | fd0a719e2b8561adefaf723dac8ba21e436c3f89 /lib/Data/MultiValued/Ranges.pm | |
parent | Build results of dd15e2e (on master) (diff) | |
parent | fix inserting range w/o overlap (diff) | |
download | data-multivalued-a2e02258ce328688622979bc1047922f4e04f70b.tar.gz data-multivalued-a2e02258ce328688622979bc1047922f4e04f70b.tar.bz2 data-multivalued-a2e02258ce328688622979bc1047922f4e04f70b.zip |
Build results of dd15e2e (on master)
Diffstat (limited to 'lib/Data/MultiValued/Ranges.pm')
-rw-r--r-- | lib/Data/MultiValued/Ranges.pm | 85 |
1 files changed, 82 insertions, 3 deletions
diff --git a/lib/Data/MultiValued/Ranges.pm b/lib/Data/MultiValued/Ranges.pm index 57bda5d..ef55b4c 100644 --- a/lib/Data/MultiValued/Ranges.pm +++ b/lib/Data/MultiValued/Ranges.pm @@ -12,7 +12,8 @@ use MooseX::Types::Moose qw(Num Str Undef Any); use Data::MultiValued::Exceptions; use Data::MultiValued::RangeContainer; -# ABSTRACT: Handle values with tags and validity ranges +# ABSTRACT: Handle values with validity ranges + has _storage => ( is => 'rw', @@ -38,6 +39,7 @@ sub _as_hash { return {_storage=>\%ret}; } + sub set { my ($self,%args) = validated_hash( \@_, @@ -50,6 +52,7 @@ sub set { ->{value} = $args{value}; } + sub get { my ($self,%args) = validated_hash( \@_, @@ -60,6 +63,7 @@ sub get { ->{value}; } + sub clear { my ($self,%args) = validated_hash( \@_, @@ -70,7 +74,6 @@ sub clear { $self->_storage->clear(\%args); } - 1; __END__ @@ -78,12 +81,88 @@ __END__ =head1 NAME -Data::MultiValued::Ranges - Handle values with tags and validity ranges +Data::MultiValued::Ranges - Handle values with validity ranges =head1 VERSION version 0.0.1 +=head1 SYNOPSIS + + use Data::MultiValued::Ranges; + + my $obj = Data::MultiValued::Ranges->new(); + $obj->set({ + from => 10, + to => 20, + value => 'foo', + }); + say $obj->get({at => 15}); # prints 'foo' + say $obj->get({at => 35}); # dies + +=head1 METHODS + +=head2 C<set> + + $obj->set({ from => $min, to => $max, value => $the_value }); + +Stores the given value for the given range. Does not throw exceptions. + +The range is defined as C<< Num $x : $min <= $x < $max >>. + +If the given range intersects existing ranges, these are spliced to +avoid overlaps. In other words: + + $obj->set({ + from => 10, + to => 20, + value => 'foo', + }); + $obj->set({ + from => 15, + to => 25, + value => 'bar', + }); + say $obj->get({at => 12}); # prints 'foo' + say $obj->get({at => 15}); # prints 'bar' + say $obj->get({at => 25}); # dies + +No cloning is done: if you pass in a reference, the reference is +just stored. + +=head2 C<get> + + my $value = $obj->get({ at => $point }); + +Retrieves the value for the given point. Throws a +L<Data::MultiValued::Exceptions::RangeNotFound> exception if no ranges +exist in this object that include the point (remember that a range +does not include its C<to> point). + +No cloning is done: if a reference was stored, you get it back +untouched. + +=head2 C<clear> + + $obj->clear({ from => $min, to => $max }); + +Deletes all values for the given range. Does not throw exceptions. + +If the given range intersects existing ranges, these are spliced. In +other words: + + $obj->set({ + from => 10, + to => 20, + value => 'foo', + }); + $obj->clear({ + from => 15, + to => 25, + }); + say $obj->get({at => 12}); # prints 'foo' + say $obj->get({at => 15}); # dies + =head1 AUTHOR Gianni Ceccarelli <dakkar@thenautilus.net> |