X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FAutobox%2FArray.pm;h=ab28fbf7876ccce63704e2eb4f132964bbe61d0f;hb=0e4809110e25a83f84e51bd913ae9e233fb3ce63;hp=ecc41276027319e6b2a4e908b0e270fa3b40bde4;hpb=3ab2f54a21bb1ebab2c29f3129926ccab72712a0;p=gitmo%2FMoose-Autobox.git diff --git a/lib/Moose/Autobox/Array.pm b/lib/Moose/Autobox/Array.pm index ecc4127..ab28fbf 100644 --- a/lib/Moose/Autobox/Array.pm +++ b/lib/Moose/Autobox/Array.pm @@ -3,7 +3,7 @@ use Moose::Role 'with'; use Perl6::Junction; use Moose::Autobox; -our $VERSION = '0.03'; +our $VERSION = '0.10'; with 'Moose::Autobox::Ref', 'Moose::Autobox::List', @@ -117,30 +117,78 @@ sub kv { $array->keys->map(sub { [ $_, $array->[$_] ] }); } +sub each { + my ($array, $sub) = @_; + for my $i (0 .. $#$array) { + $sub->($i, $array->[ $i ]); + } +} + +sub each_key { + my ($array, $sub) = @_; + $sub->($_) for (0 .. $#$array); +} + +sub each_value { + my ($array, $sub) = @_; + $sub->($_) for @$array; +} + +sub each_n { + my ($array, $n, $sub) = @_; + my $it = List::MoreUtils::natatime($n, @$array); + + while (my @vals = $it->()) { + $sub->(@vals); + } + + return; +} + +# end indexed + sub flatten { @{$_[0]} } +sub _flatten_deep { + my @array = @_; + my $depth = CORE::pop @array; + --$depth if (defined($depth)); + + CORE::map { + (ref eq 'ARRAY') + ? (defined($depth) && $depth == -1) ? $_ : _flatten_deep( @$_, $depth ) + : $_ + } @array; + +} + +sub flatten_deep { + my ($array, $depth) = @_; + [ _flatten_deep(@$array, $depth) ]; +} + ## Junctions sub all { my ($array) = @_; - return Perl6::Junction::All->new(@$array); + return Perl6::Junction::all(@$array); } sub any { my ($array) = @_; - return Perl6::Junction::Any->new(@$array); + return Perl6::Junction::any(@$array); } sub none { my ($array) = @_; - return Perl6::Junction::None->new(@$array); + return Perl6::Junction::none(@$array); } sub one { my ($array) = @_; - return Perl6::Junction::One->new(@$array); + return Perl6::Junction::one(@$array); } ## Print @@ -196,6 +244,10 @@ This is a role to describe operations on the Array type. =item B +=item B + +=item B + =back =head2 Indexed implementation @@ -214,6 +266,12 @@ This is a role to describe operations on the Array type. =item B +=item B + +=item B + +=item B + =back =head2 List implementation @@ -232,6 +290,24 @@ This is a role to describe operations on the Array type. =item B +Note that, in both the above, $_ is in scope within the code block, as well as +being passed as $_[0]. As per CORE::map and CORE::grep, $_ is an alias to +the list value, so can be used to to modify the list, viz: + + use Moose::Autobox; + + my $foo = [1, 2, 3]; + $foo->map( sub {$_++} ); + print $foo->dump; + +yields + + $VAR1 = [ + 2, + 3, + 4 + ]; + =item B =item B