1# 2# (c) Jan Gehring <jan.gehring@gmail.com> 3# 4# vim: set ts=2 sw=2 tw=0: 5# vim: set expandtab: 6 7package Rex::Shared::Var::Hash; 8 9use 5.010001; 10use strict; 11use warnings; 12 13use Rex::Shared::Var::Common qw/__lock __store __retrieve/; 14 15our $VERSION = '1.13.4'; # VERSION 16 17sub TIEHASH { 18 my $self = { varname => $_[1], }; 19 bless $self, $_[0]; 20} 21 22sub STORE { 23 my $self = shift; 24 my $key = shift; 25 my $value = shift; 26 27 return __lock sub { 28 my $ref = __retrieve; 29 my $ret = $ref->{ $self->{varname} }->{$key} = $value; 30 __store $ref; 31 32 return $ret; 33 }; 34} 35 36sub FETCH { 37 my $self = shift; 38 my $key = shift; 39 40 return __lock sub { 41 my $ref = __retrieve; 42 return $ref->{ $self->{varname} }->{$key}; 43 }; 44} 45 46sub DELETE { 47 my $self = shift; 48 my $key = shift; 49 50 __lock sub { 51 my $ref = __retrieve; 52 delete $ref->{ $self->{varname} }->{$key}; 53 __store $ref; 54 }; 55} 56 57sub CLEAR { 58 my $self = shift; 59 60 __lock sub { 61 my $ref = __retrieve; 62 $ref->{ $self->{varname} } = {}; 63 __store $ref; 64 }; 65} 66 67sub EXISTS { 68 my $self = shift; 69 my $key = shift; 70 71 return __lock sub { 72 my $ref = __retrieve; 73 return exists $ref->{ $self->{varname} }->{$key}; 74 }; 75} 76 77sub FIRSTKEY { 78 my $self = shift; 79 80 return __lock sub { 81 my $ref = __retrieve; 82 $self->{__iter__} = $ref->{ $self->{varname} }; 83 84 my $temp = keys %{ $self->{__iter__} }; 85 return scalar each %{ $self->{__iter__} }; 86 }; 87} 88 89sub NEXTKEY { 90 my $self = shift; 91 my $prevkey = shift; 92 93 return scalar each %{ $self->{__iter__} }; 94} 95 961; 97