| Current Path : /proc/self/root/proc/self/root/proc/self/root/usr/share/perl/5.10/Memoize/ | 
| Current File : //proc/self/root/proc/self/root/proc/self/root/usr/share/perl/5.10/Memoize/NDBM_File.pm | 
package Memoize::NDBM_File;
=head1 NAME
Memoize::NDBM_File - glue to provide EXISTS for NDBM_File for Storable use
=head1 DESCRIPTION
See L<Memoize>.
=cut
use NDBM_File;
@ISA = qw(NDBM_File);
$VERSION = 0.65;
$Verbose = 0;
sub AUTOLOAD {
  warn "Nonexistent function $AUTOLOAD invoked in Memoize::NDBM_File\n";
}
sub import {
  warn "Importing Memoize::NDBM_File\n" if $Verbose;
}
my %keylist;
# This is so ridiculous...
sub _backhash {
  my $self = shift;
  my %fakehash;
  my $k; 
  for ($k = $self->FIRSTKEY(); defined $k; $k = $self->NEXTKEY($k)) {
    $fakehash{$k} = undef;
  }
  $keylist{$self} = \%fakehash;
}
sub EXISTS {
  warn "Memoize::NDBM_File EXISTS (@_)\n" if $Verbose;
  my $self = shift;
  _backhash($self)  unless exists $keylist{$self};
  my $r = exists $keylist{$self}{$_[0]};
  warn "Memoize::NDBM_File EXISTS (@_) ==> $r\n" if $Verbose;
  $r;
}
sub DEFINED {
  warn "Memoize::NDBM_File DEFINED (@_)\n" if $Verbose;
  my $self = shift;
  _backhash($self)  unless exists $keylist{$self};
  defined $keylist{$self}{$_[0]};
}
sub DESTROY {
  warn "Memoize::NDBM_File DESTROY (@_)\n" if $Verbose;
  my $self = shift;
  delete $keylist{$self};   # So much for reference counting...
  $self->SUPER::DESTROY(@_);
}
# Maybe establish the keylist at TIEHASH time instead?
sub STORE {
  warn "Memoize::NDBM_File STORE (@_)\n" if $VERBOSE;
  my $self = shift;
  $keylist{$self}{$_[0]} = undef;
  $self->SUPER::STORE(@_);
}
# Inherit FETCH and TIEHASH
1;