Integrate Memoize 0.64. Few tweaks were required in
[p5sagit/p5-mst-13.2.git] / lib / Memoize / Storable.pm
1
2 package Memoize::Storable;
3 use Storable ();
4 $Verbose = 0;
5
6 sub TIEHASH {
7   require Carp if $Verbose;
8   my $package = shift;
9   my $filename = shift;
10   my $truehash = (-e $filename) ? Storable::retrieve($filename) : {};
11   my %options;
12   print STDERR "Memoize::Storable::TIEHASH($filename, @_)\n" if $Verbose;
13   @options{@_} = ();
14   my $self = 
15     {FILENAME => $filename, 
16      H => $truehash, 
17      OPTIONS => \%options
18     };
19   bless $self => $package;
20 }
21
22 sub STORE {
23   require Carp if $Verbose;
24   my $self = shift;
25   print STDERR "Memoize::Storable::STORE(@_)\n" if $Verbose;
26   $self->{H}{$_[0]} = $_[1];
27 }
28
29 sub FETCH {
30   require Carp if $Verbose;
31   my $self = shift;
32   print STDERR "Memoize::Storable::FETCH(@_)\n" if $Verbose;
33   $self->{H}{$_[0]};
34 }
35
36 sub EXISTS {
37   require Carp if $Verbose;
38   my $self = shift;
39   print STDERR "Memoize::Storable::EXISTS(@_)\n" if $Verbose;
40   exists $self->{H}{$_[0]};
41 }
42
43 sub DESTROY {
44   require Carp if $Verbose;
45   my $self= shift;
46   print STDERR "Memoize::Storable::DESTROY(@_)\n" if $Verbose;
47   if ($self->{OPTIONS}{'nstore'}) {
48     Storable::nstore($self->{H}, $self->{FILENAME});
49   } else {
50     Storable::store($self->{H}, $self->{FILENAME});
51   }
52 }
53
54 sub FIRSTKEY {
55   'Fake hash from Memoize::Storable';
56 }
57
58 sub NEXTKEY {
59   undef;
60 }
61 1;