/[Sack]/trunk/lib/Sack/Digest/BerkeleyDB.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/Sack/Digest/BerkeleyDB.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 33 by dpavlin, Wed Sep 23 20:28:21 2009 UTC revision 34 by dpavlin, Wed Sep 23 21:47:32 2009 UTC
# Line 7  use strict; Line 7  use strict;
7    
8  use BerkeleyDB;  use BerkeleyDB;
9    
10  our $port;  our $debug = 0;
11    our $port = '?';
12    
13  sub clean {  sub clean {
14          foreach ( glob '/dev/shm/sack.*' ) {          foreach ( glob '/dev/shm/sack.*' ) {
15                  warn "[$port] clean $_ ", -s $_, " bytes\n";                  warn "[$port] clean $_ ", -s $_, " bytes\n";
16                  unlink $_ || warn "[$port] ERROR can't remove $_:$!";                  unlink $_ || warn "[$port] ERROR can't remove $_:$!";
17          }          }
18            1;
19  }  }
20    
 our $seq = 0;  
21  our ( $btree, $array );  our ( $btree, $array );
22    our ( %btree, @array );
23  our $self;  our $self;
24    
25  sub open {  sub open {
26          ( $self, $port ) = @_;          ( $self, $port ) = @_;
27    
         clean;  
   
28          my $path = "/dev/shm/sack.$port";          my $path = "/dev/shm/sack.$port";
29    
30          $btree = BerkeleyDB::Btree->new(          $btree ||= tie %btree, 'BerkeleyDB::Btree',
31                  -Filename  => "$path.btree",                  -Filename  => "$path.btree",
32  #               -Cachesize => 700_000_000,  #               -Cachesize => 700_000_000,
33                  -Flags     => DB_CREATE,                  -Flags     => DB_CREATE
34          ) || die "$path.btree $!";          || die "$path.btree $!";
35    
36          $array = BerkeleyDB::Recno->new(          $array ||= tie @array, 'BerkeleyDB::Recno',
37                  -Filename  => "$path.array",                  -Filename  => "$path.array",
38  #               -Cachesize => 700_000_000,  #               -Cachesize => 700_000_000,
39                  -Flags     => DB_CREATE,                  -Flags     => DB_CREATE,
40          ) || die "$path.array $!";          || die "$path.array $!";
41                    
   
42          warn "[$port] BDB open $path\n";          warn "[$port] BDB open $path\n";
43    
44    }
45    
46    sub close {
47            my $error = 0;
48            $error += $btree->db_close;
49            undef $btree;
50            $error += $array->db_close;
51            undef $array;
52            not $error;
53  }  }
54    
55  sub digest {  our $seq = 0;
56    
57    sub to_int {
58            my ( $self, $full ) = @_;
59          my $nr;          my $nr;
60    
         $btree->db_get( $_[0] => $nr    ) == 0 && return $nr;  
61    
62          $btree->db_put( $_[0] => ++$seq ) == 0 || die "$_[0] [$seq] $!";          if ( my $nr = $btree{ $full } ) {
63          $array->db_put(  $seq => $_[0]  ) == 0 || die "[$seq] $_[0] $!";                  return $nr;
64          return $seq;          } else {
65                    $seq++;
66                    $btree{ $full } = $seq;
67                    $array[ $seq ]  = $full;
68                    return $seq;
69            }
70    }
71    
72    
73    sub from_int {
74            my ( $self, $d ) = @_;
75            my $v = $array[ $d ];
76            defined $v ? $v : $d;
77  }  }
78    
79  1;  1;

Legend:
Removed from v.33  
changed lines
  Added in v.34

  ViewVC Help
Powered by ViewVC 1.1.26