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   812 use v5.12.5;
  63         483  
8 63     63   343 use warnings;
  63         268  
  63         1894  
9              
10 63     63   578 use Rex::Shared::Var::Common qw/__lock __store __retrieve/;
  63         160  
  63         63267  
11              
12             our $VERSION = '1.14.3'; # VERSION
13              
14             sub TIEARRAY {
15 64     64   243 my $self = { varname => $_[1], };
16 64         240 bless $self, $_[0];
17             }
18              
19             sub STORE {
20 35     35   84 my $self = shift;
21 35         56 my $index = shift;
22 35         77 my $value = shift;
23              
24             return __lock sub {
25 35     35   98 my $ref = __retrieve;
26 35         2989 my $ret = $ref->{ $self->{varname} }->{data}->[$index] = $value;
27 35         126 __store $ref;
28              
29 35         30716 return $ret;
30 35         217 };
31             }
32              
33             sub FETCH {
34 241     241   3366 my $self = shift;
35 241         512 my $index = shift;
36              
37             return __lock sub {
38 241     241   622 my $ref = __retrieve;
39 241         21053 my $ret = $ref->{ $self->{varname} }->{data}->[$index];
40              
41 241         931 return $ret;
42 241         1728 };
43             }
44              
45             sub CLEAR {
46 20     20   380 my $self = shift;
47              
48             __lock sub {
49 20     20   182 my $ref = __retrieve;
50 20         2222 $ref->{ $self->{varname} } = { data => [] };
51 20         100 __store $ref;
52 20         339 };
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   623185 my $self = shift;
78 49         526 my @data = @_;
79              
80             __lock sub {
81 49     49   503 my $ref = __retrieve;
82              
83 49 50       8624 if ( !ref( $ref->{ $self->{varname} }->{data} ) eq "ARRAY" ) {
84 0         0 $ref->{ $self->{varname} }->{data} = [];
85             }
86              
87 49         157 push( @{ $ref->{ $self->{varname} }->{data} }, @data );
  49         350  
88              
89 49         310 __store $ref;
90 49         2168 };
91             }
92              
93             sub UNSHIFT {
94 14     14   42 my $self = shift;
95 14         42 my @data = @_;
96              
97             __lock sub {
98 14     14   49 my $ref = __retrieve;
99              
100 14 50       1162 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         70  
105              
106 14         49 __store $ref;
107 14         70 };
108             }
109              
110             sub SHIFT {
111 14     14   5299 my $self = shift;
112 14         28 my @data = @_;
113 14         35 my $result;
114              
115             __lock sub {
116 14     14   42 my $ref = __retrieve;
117              
118 14         1113 $result = shift( @{ $ref->{ $self->{varname} }->{data} } );
  14         91  
119              
120 14         49 __store $ref;
121 14         105 };
122              
123 14         133 return $result;
124             }
125              
126             sub POP {
127 14     14   35 my $self = shift;
128 14         35 my @data = @_;
129 14         21 my $result;
130              
131             __lock sub {
132 14     14   49 my $ref = __retrieve;
133              
134 14         1141 $result = pop( @{ $ref->{ $self->{varname} }->{data} } );
  14         63  
135              
136 14         49 __store $ref;
137 14         98 };
138              
139 14         147 return $result;
140             }
141              
142             sub EXTEND {
143 14     14   35 my $self = shift;
144 14         70 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   1912441 my $self = shift;
154              
155             return __lock sub {
156 143     143   1109 my $ref = __retrieve;
157 143 50       20867 if ( !exists $ref->{ $self->{varname} } ) {
158 0         0 return 0;
159             }
160 143         363 return scalar( @{ $ref->{ $self->{varname} }->{data} } );
  143         990  
161 143         1998 };
162             }
163              
164             1;