1 package DBM::Deep::Hash;
8 eval { tied( %{$_[0]} ) } || $_[0]
13 # Tied hash constructor method, called by Perl's tie() function.
17 if (scalar(@_) > 1) { $args = {@_}; }
18 #XXX This use of ref() is bad and is a bug
19 elsif (ref($_[0])) { $args = $_[0]; }
20 else { $args = { file => shift }; }
22 $args->{type} = $class->TYPE_HASH;
24 return $class->_init($args);
29 # Locate and return first key (in no particular order)
31 my $self = $_[0]->_get_self;
34 # Make sure file is open
36 if (!defined($self->fh)) { $self->_open(); }
39 # Request shared lock for reading
41 $self->lock( $self->LOCK_SH );
43 my $result = $self->_get_next_key();
47 return ($result && $self->root->{filter_fetch_key})
48 ? $self->root->{filter_fetch_key}->($result)
54 # Return next key (in no particular order), given previous one
56 my $self = $_[0]->_get_self;
58 my $prev_key = ($self->root->{filter_store_key})
59 ? $self->root->{filter_store_key}->($_[1])
62 my $prev_md5 = $DBM::Deep::DIGEST_FUNC->($prev_key);
65 # Make sure file is open
67 if (!defined($self->fh)) { $self->_open(); }
70 # Request shared lock for reading
72 $self->lock( $self->LOCK_SH );
74 my $result = $self->_get_next_key( $prev_md5 );
78 return ($result && $self->root->{filter_fetch_key})
79 ? $self->root->{filter_fetch_key}->($result)
84 # Public method aliases
86 *first_key = *FIRSTKEY;