foo
[gitmo/Moose-Autobox.git] / lib / Moose / Autobox / Array.pm
CommitLineData
5f654d8e 1package Moose::Autobox::Array;
2use Moose::Role 'with';
252ab1a2 3use autobox;
5f654d8e 4
5our $VERSION = '0.01';
6
e6bb88b0 7with 'Moose::Autobox::Ref',
8 'Moose::Autobox::List';
5f654d8e 9
e6bb88b0 10## List interface
11
5f654d8e 12sub length {
13 my ($array) = @_;
14 CORE::scalar @$array;
15}
16
17sub grep {
18 my ($array, $sub) = @_;
19 [ CORE::grep { $sub->($_) } @$array ];
20}
21
22sub map {
23 my ($array, $sub) = @_;
24 [ CORE::map { $sub->($_) } @$array ];
25}
26
27sub join {
28 my ($array, $sep) = @_;
29 CORE::join $sep, @$array;
30}
31
32sub reverse {
33 my ($array) = @_;
e6bb88b0 34 [ CORE::reverse @$array ];
5f654d8e 35}
36
37sub sort {
38 my ($array, $sub) = @_;
39 $sub ||= sub { $a cmp $b };
40 [ CORE::sort { $sub->($a, $b) } @$array ];
5dc78481 41}
42
43# ...
44
45sub reduce {
46 my ($array, $func) = @_;
252ab1a2 47 my $a = $array->values;
48 my $acc = $a->shift;
49 $a->map(sub { $acc = $func->($acc, $_) });
5dc78481 50 return $acc;
51}
52
53sub zip {
54 my ($array, $other) = @_;
252ab1a2 55 ($array->length < $other->length
56 ? $other
57 : $array)
58 ->keys
59 ->map(sub {
60 [ $array->[$_], $other->[$_] ]
61 });
62}
5dc78481 63
64##
65
66sub keys {
67 my ($array) = @_;
68 [ 0 .. $#{$array} ];
69}
70
71sub values {
72 my ($array) = @_;
73 [ @$array ];
74}
75
76sub kv {
77 my ($array) = @_;
78 [ CORE::map { [ $_, $array->[$_] ] } (0 .. $#{$array}) ];
79}
e6bb88b0 80
81## Array Interface
5f654d8e 82
83sub pop {
84 my ($array) = @_;
e6bb88b0 85 CORE::pop @$array;
5f654d8e 86}
87
88sub push {
89 my ($array, @rest) = @_;
90 CORE::push @$array, @rest;
91 $array;
92}
93
94sub unshift {
95 my ($array, @rest) = @_;
e6bb88b0 96 CORE::unshift @$array, @rest;
5f654d8e 97 $array;
98}
99sub exists {
100 my ($array, $index) = @_;
101 CORE::exists $array->[$index];
102}
103
104sub delete {
105 my ($array, $index) = @_;
106 CORE::delete $array->[$index];
107}
108
109sub shift {
110 my ($array) = @_;
111 CORE::shift @$array;
112}
113
1141;