diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-05-16 11:59:03 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-05-16 18:01:33 +0300 |
commit | 622f1d002d7938498ef5c37d9cbcb158bb7a5fdb (patch) | |
tree | 3a488fb6b8fd8e753a58b6946aad4e4ce48cbe22 /lib/App/Glacier/DB/GDBM.pm | |
download | glacier-622f1d002d7938498ef5c37d9cbcb158bb7a5fdb.tar.gz glacier-622f1d002d7938498ef5c37d9cbcb158bb7a5fdb.tar.bz2 |
Initial commit
Diffstat (limited to 'lib/App/Glacier/DB/GDBM.pm')
-rw-r--r-- | lib/App/Glacier/DB/GDBM.pm | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/App/Glacier/DB/GDBM.pm b/lib/App/Glacier/DB/GDBM.pm new file mode 100644 index 0000000..44d7823 --- /dev/null +++ b/lib/App/Glacier/DB/GDBM.pm @@ -0,0 +1,41 @@ +package App::Glacier::DB::GDBM; +require App::Glacier::DB; +use strict; +use warnings; +use parent qw(App::Glacier::DB); +use GDBM_File; + +sub new { + my $class = shift; + my $filename = shift; + local %_ = @_; + my %map; + my $mode = delete $_{mode} || 0644; + tie %map, 'GDBM_FILE', $filename, GDBM_WRCREAT, $mode; + my $self = $class->SUPER::new($filename, %_); + $self->{_map} = \%map; + return $self; +} + +sub has { + my ($self, $key) = @_; + return exists($self->{_map}{$key}); +} + +sub retrieve { + my ($self, $key) = @_; + return undef unless $self->has($key); + return $self->decode($self->{_map}{$key}); +} + +sub store { + my ($self, $key, $val) = @_; + $self->{_map}{$key} = $self->encode($val); +} + +sub delete { + my ($self, $key) = @_; + delete $self->{_map}{$key}; +} + +1; |