X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FAutobox%2FArray.pm;h=4fabd46d60915b7c2a7374aa41232830f988583c;hb=2197a7c093124739caaae6be7b9ae213daefb598;hp=6d4c1e8bd3eaba25ef8f48271df4552d7d45d9d9;hpb=31d40d7362f4154746428525561af751208b0805;p=gitmo%2FMoose-Autobox.git diff --git a/lib/Moose/Autobox/Array.pm b/lib/Moose/Autobox/Array.pm index 6d4c1e8..4fabd46 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.03'; 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, @@ -47,16 +53,6 @@ sub sprintf { CORE::sprintf $_[1], @{$_[0]} } sub head { $_[0]->[0] } sub tail { [ @{$_[0]}[ 1 .. $#{$_[0]} ] ] } -sub at { - my ($array, $index) = @_; - $array->[$index]; -} - -sub put { - my ($array, $index, $value) = @_; - $array->[$index] = $value; -} - sub length { my ($array) = @_; CORE::scalar @$array; @@ -89,11 +85,17 @@ sub sort { [ CORE::sort { $sub->($a, $b) } @$array ]; } -# ::Value requirement +## ::Indexed implementation -sub print { CORE::print @{$_[0]} } +sub at { + my ($array, $index) = @_; + $array->[$index]; +} -## ::Indexed implementation +sub put { + my ($array, $index, $value) = @_; + $array->[$index] = $value; +} sub exists { my ($array, $index) = @_; @@ -115,6 +117,37 @@ sub kv { $array->keys->map(sub { [ $_, $array->[$_] ] }); } +sub flatten { + @{$_[0]} +} + +## Junctions + +sub all { + my ($array) = @_; + return Perl6::Junction::All->all(@$array); +} + +sub any { + my ($array) = @_; + return Perl6::Junction::Any->any(@$array); +} + +sub none { + my ($array) = @_; + return Perl6::Junction::None->none(@$array); +} + +sub one { + my ($array) = @_; + return Perl6::Junction::One->one(@$array); +} + +## Print + +sub print { CORE::print @{$_[0]} } +sub say { CORE::print @{$_[0]}, "\n" } + 1; __END__ @@ -128,12 +161,107 @@ 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 + +=back + +=head2 Indexed implementation + +=over 4 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=back + +=head2 List implementation + +=over 4 + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=item B + +=back + +=head2 Junctions + +=over 4 + +=item B + +=item B + +=item B + +=item B + +=back + +=over 4 + +=item B + +=item B + +=item B + +=back + =head1 BUGS All complex software has bugs lurking in it, and this module is no @@ -146,11 +274,11 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2006 by Infinity Interactive, Inc. +Copyright 2006-2008 by Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. -=cut \ No newline at end of file +=cut