aboutsummaryrefslogtreecommitdiff
path: root/lib/App/Glacier/DB/GDBM.pm
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2017-05-16 11:59:03 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2017-05-16 18:01:33 +0300
commit622f1d002d7938498ef5c37d9cbcb158bb7a5fdb (patch)
tree3a488fb6b8fd8e753a58b6946aad4e4ce48cbe22 /lib/App/Glacier/DB/GDBM.pm
downloadglacier-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.pm41
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;

Return to:

Send suggestions and report system problems to the System administrator.