2
|
1 package IMPL::Object::List;
|
|
2 use strict;
|
|
3 use warnings;
|
|
4
|
|
5 use base qw(IMPL::Object::ArrayObject);
|
3
|
6 use IMPL::Exception;
|
2
|
7
|
|
8 sub as_list {
|
|
9 return $_[0];
|
|
10 }
|
|
11
|
3
|
12 sub CTOR {
|
|
13 my ($this,$data) = @_;
|
|
14
|
|
15 if ($data) {
|
|
16 die new IMPL::InvalidArgumentException("The parameter should be a reference to an array") unless UNIVERSAL::isa($data,"ARRAY");
|
|
17 @$this = @$data;
|
|
18 }
|
|
19 }
|
|
20
|
2
|
21 sub Append {
|
|
22 push @{$_[0]}, @_{1 .. @$_-1};
|
|
23 }
|
|
24
|
|
25 sub RemoveLast {
|
|
26 return pop @{$_[0]};
|
|
27 }
|
|
28
|
|
29 sub AddFirst {
|
|
30 return unshift @{$_[0]}, $_[1];
|
|
31 }
|
|
32
|
|
33 sub RemoveFirst {
|
|
34 return shift @{$_[0]};
|
|
35 }
|
|
36
|
|
37 sub Count {
|
|
38 return scalar @{$_[0]};
|
|
39 }
|
|
40
|
|
41 sub InsertAt {
|
|
42 my ($this,$index,@val) = @_;
|
|
43
|
|
44 splice @$this,$index,0,@val;
|
|
45 }
|
|
46
|
|
47 sub RemoveAt {
|
|
48 my ($this,$index,$count) = @_;
|
|
49
|
|
50 $count ||= 1;
|
|
51
|
|
52 return splice @$this,$index,$count;
|
|
53 }
|
|
54
|
|
55 1;
|