X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBM%2FDeep%2FHash.pm;h=8ab84f28cb6fb398560f479f57171fb12992591e;hb=a21f2d90935286a81dbaa6299707e140060e52d3;hp=1f954385f5df470ded62e4f68048fb23ca33576f;hpb=0ca7ea98550b6f782b4b68be8b261218ff097f74;p=dbsrgits%2FDBM-Deep.git diff --git a/lib/DBM/Deep/Hash.pm b/lib/DBM/Deep/Hash.pm index 1f95438..8ab84f2 100644 --- a/lib/DBM/Deep/Hash.pm +++ b/lib/DBM/Deep/Hash.pm @@ -5,7 +5,7 @@ use strict; use base 'DBM::Deep'; sub _get_self { - eval { tied( %{$_[0]} ) } || $_[0] + eval { local $SIG{'__DIE__'}; tied( %{$_[0]} ) } || $_[0] } sub TIEHASH { @@ -22,8 +22,8 @@ sub TIEHASH { sub FETCH { my $self = shift->_get_self; - my $key = ($self->root->{filter_store_key}) - ? $self->root->{filter_store_key}->($_[0]) + my $key = ($self->_root->{filter_store_key}) + ? $self->_root->{filter_store_key}->($_[0]) : $_[0]; return $self->SUPER::FETCH( $key ); @@ -31,8 +31,8 @@ sub FETCH { sub STORE { my $self = shift->_get_self; - my $key = ($self->root->{filter_store_key}) - ? $self->root->{filter_store_key}->($_[0]) + my $key = ($self->_root->{filter_store_key}) + ? $self->_root->{filter_store_key}->($_[0]) : $_[0]; my $value = $_[1]; @@ -41,8 +41,8 @@ sub STORE { sub EXISTS { my $self = shift->_get_self; - my $key = ($self->root->{filter_store_key}) - ? $self->root->{filter_store_key}->($_[0]) + my $key = ($self->_root->{filter_store_key}) + ? $self->_root->{filter_store_key}->($_[0]) : $_[0]; return $self->SUPER::EXISTS( $key ); @@ -50,8 +50,8 @@ sub EXISTS { sub DELETE { my $self = shift->_get_self; - my $key = ($self->root->{filter_store_key}) - ? $self->root->{filter_store_key}->($_[0]) + my $key = ($self->_root->{filter_store_key}) + ? $self->_root->{filter_store_key}->($_[0]) : $_[0]; return $self->SUPER::DELETE( $key ); @@ -64,21 +64,16 @@ sub FIRSTKEY { my $self = $_[0]->_get_self; ## - # Make sure file is open - ## - if (!defined($self->fh)) { $self->_open(); } - - ## # Request shared lock for reading ## $self->lock( $self->LOCK_SH ); - my $result = $self->_get_next_key(); + my $result = $self->{engine}->get_next_key($self); $self->unlock(); - return ($result && $self->root->{filter_fetch_key}) - ? $self->root->{filter_fetch_key}->($result) + return ($result && $self->_root->{filter_fetch_key}) + ? $self->_root->{filter_fetch_key}->($result) : $result; } @@ -88,28 +83,23 @@ sub NEXTKEY { ## my $self = $_[0]->_get_self; - my $prev_key = ($self->root->{filter_store_key}) - ? $self->root->{filter_store_key}->($_[1]) + my $prev_key = ($self->_root->{filter_store_key}) + ? $self->_root->{filter_store_key}->($_[1]) : $_[1]; - my $prev_md5 = $DBM::Deep::DIGEST_FUNC->($prev_key); + my $prev_md5 = $self->{engine}{digest}->($prev_key); ## - # Make sure file is open - ## - if (!defined($self->fh)) { $self->_open(); } - - ## # Request shared lock for reading ## $self->lock( $self->LOCK_SH ); - my $result = $self->_get_next_key( $prev_md5 ); + my $result = $self->{engine}->get_next_key( $self, $prev_md5 ); $self->unlock(); - return ($result && $self->root->{filter_fetch_key}) - ? $self->root->{filter_fetch_key}->($result) + return ($result && $self->_root->{filter_fetch_key}) + ? $self->_root->{filter_fetch_key}->($result) : $result; }