X-Git-Url: http://git.bytex64.net/?a=blobdiff_plain;f=lib%2Fperl%2FBlerg-Database%2Flib%2FBlerg%2FDatabase.pm;h=b05c7f91da823af7f5b33d673a2c988a69451fbe;hb=9777ec792051ef0e7c3e9eec300a15233077e1a8;hp=74481d2517218dec3ce1499d5572d7120c75bd4a;hpb=3d76b7537d7b50ca8ccf83d4ed8e2dc93a871ddb;p=blerg.git diff --git a/lib/perl/Blerg-Database/lib/Blerg/Database.pm b/lib/perl/Blerg-Database/lib/Blerg/Database.pm index 74481d2..b05c7f9 100644 --- a/lib/perl/Blerg-Database/lib/Blerg/Database.pm +++ b/lib/perl/Blerg-Database/lib/Blerg/Database.pm @@ -57,6 +57,115 @@ XSLoader::load('Blerg::Database', $VERSION); # Preloaded methods go here. +sub open { + my ($class, $name) = @_; + my $ptr = Blerg::Database::_open($name); + my $obj = { + ptr => $ptr, + name => $name, + }; + return bless $obj, $class; +} + +sub open_existing { + my ($class, $name) = @_; + + if (Blerg::Database::exists($name)) { + return Blerg::Database->open($name); + } + return undef; +} + +sub _ensure_pointer { + my ($obj) = @_; + if (!defined $obj->{ptr}) { + croak "Attempted to use closed Blerg::Database"; + } +} + +sub close { + my ($obj) = @_; + if (!(defined $obj && defined $obj->{ptr})) { + # Welp, nothing to do here! + return; + } + Blerg::Database::_close($obj->{ptr}); + delete $obj->{ptr}; +} + +DESTROY { + my ($obj) = @_; + $obj->close; +} + +sub record_count { + my ($obj) = @_; + $obj->_ensure_pointer; + return Blerg::Database::_get_record_count($obj->{ptr}); +} + +sub set_subscription_mark { + my ($obj) = @_; + $obj->_ensure_pointer; + return Blerg::Database::_set_subscription_mark($obj->{ptr}); +} + +sub get_subscription_mark { + my ($obj) = @_; + $obj->_ensure_pointer; + return Blerg::Database::_get_subscription_mark($obj->{ptr}); +} + +sub subscription_list { + my ($obj) = @_; + $obj->_ensure_pointer; + return Blerg::Database::_subscription_list($obj->{name}, 0, 1); +} + +sub mute { + my ($obj, $v) = @_; + $obj->_ensure_pointer; + if (defined $v) { + return Blerg::Database::_set_mute($obj->{ptr}, $v); + } else { + return Blerg::Database::_get_mute($obj->{ptr}); + } +} + +sub refs { + my ($obj) = @_; + return Blerg::Database::tag_list('@' . $obj->{name}, 50, -1); +} + +sub store { + my ($obj, $data) = @_; + $obj->_ensure_pointer; + return Blerg::Database::_store($obj->{ptr}, $data); +} + +sub fetch { + my ($obj, $record) = @_; + $obj->_ensure_pointer; + return Blerg::Database::_fetch($obj->{ptr}, $record); +} + +sub timestamp { + my ($obj, $record) = @_; + $obj->_ensure_pointer; + return Blerg::Database::_get_timestamp($obj->{ptr}, $record); +} + +# Convenience shortcuts +sub hash_tag_list { + my ($name, $str_offset, $direction) = @_; + return Blerg::Database::tag_list("#$name", $str_offset, $direction); +} + +sub ref_tag_list { + my ($name, $str_offset, $direction) = @_; + return Blerg::Database::tag_list("@$name", $str_offset, $direction); +} + # Autoload methods go after =cut, and are processed by the autosplit program. 1; @@ -118,7 +227,7 @@ If you have a web site set up for your module, mention it here. =head1 AUTHOR -Chip Black, Echip@slackware.lanE +Chip Black, Ebytex64@bytex64.netE =head1 COPYRIGHT AND LICENSE