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   852 use v5.12.5;
  63         243  
8 63     63   351 use warnings;
  63         139  
  63         2462  
9              
10 63     63   660 use Rex::Shared::Var::Common qw/__lock __store __retrieve/;
  63         186  
  63         65879  
11              
12             our $VERSION = '1.14.2.2'; # TRIAL VERSION
13              
14             sub TIEARRAY {
15 64     64   256 my $self = { varname => $_[1], };
16 64         280 bless $self, $_[0];
17             }
18              
19             sub STORE {
20 35     35   63 my $self = shift;
21 35         63 my $index = shift;
22 35         63 my $value = shift;
23              
24             return __lock sub {
25 35     35   105 my $ref = __retrieve;
26 35         3080 my $ret = $ref->{ $self->{varname} }->{data}->[$index] = $value;
27 35         119 __store $ref;
28              
29 35         31528 return $ret;
30 35         245 };
31             }
32              
33             sub FETCH {
34 241     241   3681 my $self = shift;
35 241         583 my $index = shift;
36              
37             return __lock sub {
38 241     241   942 my $ref = __retrieve;
39 241         26250 my $ret = $ref->{ $self->{varname} }->{data}->[$index];
40              
41 241         1207 return $ret;
42 241         2639 };
43             }
44              
45             sub CLEAR {
46 20     20   342 my $self = shift;
47              
48             __lock sub {
49 20     20   164 my $ref = __retrieve;
50 20         2146 $ref->{ $self->{varname} } = { data => [] };
51 20         135 __store $ref;
52 20         341 };
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   624746 my $self = shift;
78 49         551 my @data = @_;
79              
80             __lock sub {
81 49     49   492 my $ref = __retrieve;
82              
83 49 50       9654 if ( !ref( $ref->{ $self->{varname} }->{data} ) eq "ARRAY" ) {
84 0         0 $ref->{ $self->{varname} }->{data} = [];
85             }
86              
87 49         183 push( @{ $ref->{ $self->{varname} }->{data} }, @data );
  49         432  
88              
89 49         377 __store $ref;
90 49         2337 };
91             }
92              
93             sub UNSHIFT {
94 14     14   49 my $self = shift;
95 14         49 my @data = @_;
96              
97             __lock sub {
98 14     14   42 my $ref = __retrieve;
99              
100 14 50       1463 if ( !ref( $ref->{ $self->{varname} }->{data} ) eq "ARRAY" ) {
101 0         0 $ref->{ $self->{varname} }->{data} = [];
102             }
103              
104 14         21 unshift( @{ $ref->{ $self->{varname} }->{data} }, @data );
  14         84  
105              
106 14         35 __store $ref;
107 14         91 };
108             }
109              
110             sub SHIFT {
111 14     14   9205 my $self = shift;
112 14         35 my @data = @_;
113 14         21 my $result;
114              
115             __lock sub {
116 14     14   49 my $ref = __retrieve;
117              
118 14         1204 $result = shift( @{ $ref->{ $self->{varname} }->{data} } );
  14         168  
119              
120 14         56 __store $ref;
121 14         119 };
122              
123 14         161 return $result;
124             }
125              
126             sub POP {
127 14     14   42 my $self = shift;
128 14         42 my @data = @_;
129 14         28 my $result;
130              
131             __lock sub {
132 14     14   42 my $ref = __retrieve;
133              
134 14         1204 $result = pop( @{ $ref->{ $self->{varname} }->{data} } );
  14         126  
135              
136 14         56 __store $ref;
137 14         119 };
138              
139 14         182 return $result;
140             }
141              
142             sub EXTEND {
143 14     14   56 my $self = shift;
144 14         140 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   1947555 my $self = shift;
154              
155             return __lock sub {
156 143     143   1204 my $ref = __retrieve;
157 143 50       27328 if ( !exists $ref->{ $self->{varname} } ) {
158 0         0 return 0;
159             }
160 143         376 return scalar( @{ $ref->{ $self->{varname} }->{data} } );
  143         1187  
161 143         3077 };
162             }
163              
164             1;