File Coverage

lib/Rex/Shared/Var/Array.pm
Criterion Covered Total %
statement 71 87 81.6
branch 3 6 50.0
condition n/a
subroutine 21 26 80.7
pod n/a
total 95 119 79.8


line stmt bran cond sub pod time code
1             #
2             # (c) Jan Gehring
3             #
4              
5             package Rex::Shared::Var::Array;
6              
7 63     63   843 use v5.12.5;
  63         251  
8 63     63   345 use warnings;
  63         246  
  63         2102  
9              
10 63     63   618 use Rex::Shared::Var::Common qw/__lock __store __retrieve/;
  63         182  
  63         65929  
11              
12             our $VERSION = '1.14.2.3'; # TRIAL VERSION
13              
14             sub TIEARRAY {
15 64     64   241 my $self = { varname => $_[1], };
16 64         316 bless $self, $_[0];
17             }
18              
19             sub STORE {
20 35     35   77 my $self = shift;
21 35         63 my $index = shift;
22 35         56 my $value = shift;
23              
24             return __lock sub {
25 35     35   91 my $ref = __retrieve;
26 35         3164 my $ret = $ref->{ $self->{varname} }->{data}->[$index] = $value;
27 35         119 __store $ref;
28              
29 35         117649 return $ret;
30 35         231 };
31             }
32              
33             sub FETCH {
34 241     241   3659 my $self = shift;
35 241         453 my $index = shift;
36              
37             return __lock sub {
38 241     241   745 my $ref = __retrieve;
39 241         23963 my $ret = $ref->{ $self->{varname} }->{data}->[$index];
40              
41 241         1163 return $ret;
42 241         1940 };
43             }
44              
45             sub CLEAR {
46 20     20   353 my $self = shift;
47              
48             __lock sub {
49 20     20   165 my $ref = __retrieve;
50 20         2044 $ref->{ $self->{varname} } = { data => [] };
51 20         151 __store $ref;
52 20         314 };
53             }
54              
55             sub DELETE {
56 0     0   0 my $self = shift;
57 0         0 my $index = shift;
58              
59             __lock sub {
60 0     0   0 my $ref = __retrieve;
61 0         0 delete $ref->{ $self->{varname} }->{data}->[$index];
62 0         0 __store $ref;
63 0         0 };
64             }
65              
66             sub EXISTS {
67 0     0   0 my $self = shift;
68 0         0 my $index = shift;
69              
70             return __lock sub {
71 0     0   0 my $ref = __retrieve;
72 0         0 return exists $ref->{ $self->{varname} }->{data}->[$index];
73 0         0 };
74             }
75              
76             sub PUSH {
77 49     49   623216 my $self = shift;
78 49         455 my @data = @_;
79              
80             __lock sub {
81 49     49   457 my $ref = __retrieve;
82              
83 49 50       8694 if ( !ref( $ref->{ $self->{varname} }->{data} ) eq "ARRAY" ) {
84 0         0 $ref->{ $self->{varname} }->{data} = [];
85             }
86              
87 49         141 push( @{ $ref->{ $self->{varname} }->{data} }, @data );
  49         333  
88              
89 49         335 __store $ref;
90 49         2073 };
91             }
92              
93             sub UNSHIFT {
94 14     14   35 my $self = shift;
95 14         35 my @data = @_;
96              
97             __lock sub {
98 14     14   49 my $ref = __retrieve;
99              
100 14 50       1155 if ( !ref( $ref->{ $self->{varname} }->{data} ) eq "ARRAY" ) {
101 0         0 $ref->{ $self->{varname} }->{data} = [];
102             }
103              
104 14         35 unshift( @{ $ref->{ $self->{varname} }->{data} }, @data );
  14         63  
105              
106 14         56 __store $ref;
107 14         98 };
108             }
109              
110             sub SHIFT {
111 14     14   5600 my $self = shift;
112 14         49 my @data = @_;
113 14         35 my $result;
114              
115             __lock sub {
116 14     14   42 my $ref = __retrieve;
117              
118 14         1190 $result = shift( @{ $ref->{ $self->{varname} }->{data} } );
  14         105  
119              
120 14         49 __store $ref;
121 14         91 };
122              
123 14         140 return $result;
124             }
125              
126             sub POP {
127 14     14   35 my $self = shift;
128 14         35 my @data = @_;
129 14         28 my $result;
130              
131             __lock sub {
132 14     14   56 my $ref = __retrieve;
133              
134 14         1120 $result = pop( @{ $ref->{ $self->{varname} }->{data} } );
  14         70  
135              
136 14         49 __store $ref;
137 14         105 };
138              
139 14         154 return $result;
140             }
141              
142             sub EXTEND {
143 14     14   63 my $self = shift;
144 14         77 my $count = shift;
145             }
146              
147             sub STORESIZE {
148 0     0   0 my $self = shift;
149 0         0 my $newsize = shift;
150             }
151              
152             sub FETCHSIZE {
153 143     143   1960085 my $self = shift;
154              
155             return __lock sub {
156 143     143   1169 my $ref = __retrieve;
157 143 50       25073 if ( !exists $ref->{ $self->{varname} } ) {
158 0         0 return 0;
159             }
160 143         339 return scalar( @{ $ref->{ $self->{varname} }->{data} } );
  143         906  
161 143         2718 };
162             }
163              
164             1;