autoboxing
[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';
6cf5bcf2 9
10## Array Interface
11
12sub pop {
13 my ($array) = @_;
14 CORE::pop @$array;
15}
16
17sub push {
18 my ($array, @rest) = @_;
19 CORE::push @$array, @rest;
20 $array;
21}
22
23sub unshift {
24 my ($array, @rest) = @_;
25 CORE::unshift @$array, @rest;
26 $array;
27}
5f654d8e 28
6cf5bcf2 29sub delete {
30 my ($array, $index) = @_;
31 CORE::delete $array->[$index];
32}
33
34sub shift {
35 my ($array) = @_;
36 CORE::shift @$array;
37}
38
39# NOTE:
40# sprintf args need to be reversed,
41# because the invocant is the array
42sub sprintf { CORE::sprintf $_[1], @{$_[0]} }
43
44## ::List interface implementation
45
46sub head { $_[0]->[0] }
47sub tail { [ @{$_[0]}[ 1 .. $#{$_[0]} ] ] }
e6bb88b0 48
5f654d8e 49sub length {
50 my ($array) = @_;
51 CORE::scalar @$array;
52}
53
54sub grep {
55 my ($array, $sub) = @_;
56 [ CORE::grep { $sub->($_) } @$array ];
57}
58
59sub map {
60 my ($array, $sub) = @_;
61 [ CORE::map { $sub->($_) } @$array ];
62}
63
64sub join {
feffe00c 65 my ($array, $sep) = @_;
66 $sep ||= '';
5f654d8e 67 CORE::join $sep, @$array;
68}
69
70sub reverse {
71 my ($array) = @_;
e6bb88b0 72 [ CORE::reverse @$array ];
5f654d8e 73}
74
75sub sort {
76 my ($array, $sub) = @_;
77 $sub ||= sub { $a cmp $b };
78 [ CORE::sort { $sub->($a, $b) } @$array ];
5dc78481 79}
80
6cf5bcf2 81# ::Value requirement
5dc78481 82
6cf5bcf2 83sub print { CORE::print @{$_[0]} }
5dc78481 84
6cf5bcf2 85## ::Indexed implementation
5dc78481 86
6cf5bcf2 87sub exists {
88 my ($array, $index) = @_;
89 CORE::exists $array->[$index];
90}
5dc78481 91
92sub keys {
93 my ($array) = @_;
94 [ 0 .. $#{$array} ];
95}
96
97sub values {
98 my ($array) = @_;
99 [ @$array ];
100}
101
102sub kv {
103 my ($array) = @_;
feffe00c 104 $array->keys->map(sub { [ $_, $array->[$_] ] });
5dc78481 105}
e6bb88b0 106
5f654d8e 1071;