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=6bfda4ae3328f36879a5ac95319d794eae36ecc9;hpb=260cc81f7ab424f417900ab1c44b734b339f9d9e;p=gitmo%2FMoose-Autobox.git
diff --git a/lib/Moose/Autobox/Array.pm b/lib/Moose/Autobox/Array.pm
index 6bfda4a..ab28fbf 100644
--- a/lib/Moose/Autobox/Array.pm
+++ b/lib/Moose/Autobox/Array.pm
@@ -1,8 +1,9 @@
package Moose::Autobox::Array;
use Moose::Role 'with';
-use autobox;
+use Perl6::Junction;
+use Moose::Autobox;
-our $VERSION = '0.01';
+our $VERSION = '0.10';
with 'Moose::Autobox::Ref',
'Moose::Autobox::List',
@@ -35,7 +36,12 @@ sub delete {
sub shift {
my ($array) = @_;
CORE::shift @$array;
-}
+}
+
+sub slice {
+ my ($array, $indicies) = @_;
+ [ @{$array}[ @{$indicies} ] ];
+}
# NOTE:
# sprintf args need to be reversed,
@@ -111,6 +117,85 @@ 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(@$array);
+}
+
+sub any {
+ my ($array) = @_;
+ return Perl6::Junction::any(@$array);
+}
+
+sub none {
+ my ($array) = @_;
+ return Perl6::Junction::none(@$array);
+}
+
+sub one {
+ my ($array) = @_;
+ return Perl6::Junction::one(@$array);
+}
+
+## Print
+
+sub print { CORE::print @{$_[0]} }
+sub say { CORE::print @{$_[0]}, "\n" }
+
1;
__END__
@@ -124,51 +209,72 @@ Moose::Autobox::Array - the Array role
=head1 SYNOPOSIS
use Moose::Autobox;
- use autobox;
+
+ [ 1..5 ]->isa('ARRAY'); # true
+ [ a..z ]->does('Moose::Autobox::Array'); # true
+ [ 0..2 ]->does('Moose::Autobox::List'); # true
print "Squares: " . [ 1 .. 10 ]->map(sub { $_ * $_ })->join(', ');
+
+ print [ 1, 'number' ]->sprintf('%d is the loneliest %s');
+
+ print ([ 1 .. 5 ]->any == 3) ? 'true' : 'false'; # prints 'true'
=head1 DESCRIPTION
+This is a role to describe operations on the Array type.
+
=head1 METHODS
=over 4
-=item B
-
=item B
-=item B
+=item B
=item B
-=item B
+=item B
+
+=item B
+
+=item B
-=item B
+=item B
-=item B
+=item B
+
+=item B
+
+=item B
=back
-=head2 Indexed
+=head2 Indexed implementation
=over 4
-=item B
+=item B
-=item B
+=item B
-=item B
+=item B
=item B
+=item B
+
=item B
-=item B
+=item B
+
+=item B
+
+=item B
=back
-=head2 List
+=head2 List implementation
=over 4
@@ -176,17 +282,59 @@ Moose::Autobox::Array - the Array role
=item B
-=item B
+=item B
=item B
-=item B