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