File Coverage

lib/Rex/Shared/Var/Hash.pm
Criterion Covered Total %
statement 45 51 88.2
branch n/a
condition n/a
subroutine 15 17 88.2
pod n/a
total 60 68 88.2


line stmt bran cond sub pod time code
1             #
2             # (c) Jan Gehring
3             #
4              
5             package Rex::Shared::Var::Hash;
6              
7 20     20   265 use v5.12.5;
  20         78  
8 20     20   471 use warnings;
  20         60  
  20         806  
9              
10 20     20   184 use Rex::Shared::Var::Common qw/__lock __store __retrieve/;
  20         53  
  20         13061  
11              
12             our $VERSION = '1.14.3'; # VERSION
13              
14             sub TIEHASH {
15 43     43   129 my $self = { varname => $_[1], };
16 43         148 bless $self, $_[0];
17             }
18              
19             sub STORE {
20 45     45   152 my $self = shift;
21 45         103 my $key = shift;
22 45         95 my $value = shift;
23              
24             return __lock sub {
25 45     45   155 my $ref = __retrieve;
26 45         4843 my $ret = $ref->{ $self->{varname} }->{$key} = $value;
27 45         183 __store $ref;
28              
29 45         57942 return $ret;
30 45         485 };
31             }
32              
33             sub FETCH {
34 164     164   9437 my $self = shift;
35 164         331 my $key = shift;
36              
37             return __lock sub {
38 164     164   522 my $ref = __retrieve;
39 164         19144 return $ref->{ $self->{varname} }->{$key};
40 164         1042 };
41             }
42              
43             sub DELETE {
44 0     0   0 my $self = shift;
45 0         0 my $key = shift;
46              
47             __lock sub {
48 0     0   0 my $ref = __retrieve;
49 0         0 delete $ref->{ $self->{varname} }->{$key};
50 0         0 __store $ref;
51 0         0 };
52             }
53              
54             sub CLEAR {
55 16     16   66 my $self = shift;
56              
57             __lock sub {
58 16     16   175 my $ref = __retrieve;
59 16         2552 $ref->{ $self->{varname} } = {};
60 16         168 __store $ref;
61 16         443 };
62             }
63              
64             sub EXISTS {
65 129     129   3530 my $self = shift;
66 129         344 my $key = shift;
67              
68             return __lock sub {
69 129     129   630 my $ref = __retrieve;
70 129         15623 return exists $ref->{ $self->{varname} }->{$key};
71 129         906 };
72             }
73              
74             sub FIRSTKEY {
75 48     48   31139 my $self = shift;
76              
77             return __lock sub {
78 48     48   302 my $ref = __retrieve;
79 48         9188 $self->{__iter__} = $ref->{ $self->{varname} };
80              
81 48         218 my $temp = keys %{ $self->{__iter__} };
  48         308  
82 48         173 return scalar each %{ $self->{__iter__} };
  48         536  
83 48         761 };
84             }
85              
86             sub NEXTKEY {
87 258     258   491 my $self = shift;
88 258         460 my $prevkey = shift;
89              
90 258         493 return scalar each %{ $self->{__iter__} };
  258         1067  
91             }
92              
93             1;