/[Sack]/trunk/lib/Sack/Digest.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

Annotation of /trunk/lib/Sack/Digest.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 33 - (hide annotations)
Wed Sep 23 20:28:21 2009 UTC (14 years, 8 months ago) by dpavlin
File size: 995 byte(s)
extract Sack::Digest into own package and test it

1 dpavlin 33 package Sack::Digest;
2    
3     # digest to convert long values into integer numbers
4    
5     use warnings;
6     use strict;
7    
8     use BerkeleyDB;
9    
10     our $port;
11    
12     sub clean {
13     foreach ( glob '/dev/shm/sack.*' ) {
14     warn "[$port] clean $_ ", -s $_, " bytes\n";
15     unlink $_ || warn "[$port] ERROR can't remove $_:$!";
16     }
17     }
18    
19     our $seq = 0;
20     our ( $btree, $array );
21     our $self;
22    
23     sub open {
24     ( $self, $port ) = @_;
25    
26     clean;
27    
28     my $path = "/dev/shm/sack.$port";
29    
30     $btree = BerkeleyDB::Btree->new(
31     -Filename => "$path.btree",
32     # -Cachesize => 700_000_000,
33     -Flags => DB_CREATE,
34     ) || die "$path.btree $!";
35    
36     $array = BerkeleyDB::Recno->new(
37     -Filename => "$path.array",
38     # -Cachesize => 700_000_000,
39     -Flags => DB_CREATE,
40     ) || die "$path.array $!";
41    
42    
43     warn "[$port] BDB open $path\n";
44     }
45    
46     sub digest {
47     my $nr;
48    
49     $btree->db_get( $_[0] => $nr ) == 0 && return $nr;
50    
51     $btree->db_put( $_[0] => ++$seq ) == 0 || die "$_[0] [$seq] $!";
52     $array->db_put( $seq => $_[0] ) == 0 || die "[$seq] $_[0] $!";
53     return $seq;
54     }
55    
56     1;

  ViewVC Help
Powered by ViewVC 1.1.26