--- lib/Search/TokyoDystopia.pm 2008/09/02 15:28:58 31 +++ lib/Search/TokyoDystopia.pm 2008/09/02 16:13:06 32 @@ -6,7 +6,7 @@ require Exporter; require XSLoader; use base qw(Exporter); -our $VERSION = '0.00'; +our $VERSION = '0.01'; our $debug = 0; XSLoader::load('Search::TokyoDystopia', $VERSION); @@ -51,15 +51,75 @@ tcidbpath tcidbrnum tcidbfsiz + +tdversion +tcqdberrmsg +tcqdbnew +tcqdbdel +tcqdbnew +tcqdbecode +tcqdbtune +QDBTLARGE +QDBTDEFLATE +QDBTTCBS +tcqdbsetcache +tcqdbsetfwmmax +tcqdbopen +QDBOREADER +QDBOWRITER +QDBOCREAT +QDBOTRUNC +QDBONOLCK +QDBOLCKNB +tcqdbclose +tcqdbput +tcqdbout +tcqdbget +tcqdbsearch +tcqdbsearch2 +QDBSSUBSTR +QDBSPREFIX +QDBSSUFFIX +QDBSFULL +QDBSTOKEN +QDBSTOKPRE +QDBSTOKSUF +tcqdbiterinit +tcqdbiternext +tcqdbsync +tcqdboptimize +tcqdbvanish +tcqdbcopy +tcqdbpath +tcqdbrnum +tcqdbfsiz + ); =head1 NAME Search::TokyoDystopia - XS bindings for Tokyo Dystopia -=head1 EXPORTS +=head1 Core API If you don't prevent it, it will export all kind of stuff into your namespace to cut down on typing. +void +tcqdbget(qdb, id) + void * qdb + int id +PREINIT: + char *vbuf; +PPCODE: + vbuf = tcqdbget(qdb, id); + if(vbuf){ + XPUSHs(sv_2mortal(newSVpvn(vbuf, strlen(vbuf)))); + tcfree(vbuf); + } else { + XPUSHs((SV *)&PL_sv_undef); + } + XSRETURN(1); + + =head2 tcidberrmsg @@ -186,6 +246,117 @@ =cut +=head1 Q-gram API + +=head2 tcqdberrmsg + + my $message = tcqdberrmsg( $ecode ); + +=head2 tcqdbnew + + my $qdb = tcqdbnew; + +=head2 tcqdbdel + + tcqdbdel( $qdb ); + +=head2 tcqdbecode + + my $ecode = tcqdbecode( $qdb ); + +=head2 tcqdbtune + + my $success = tcqdbtune( $qdb, $etnum, QDBTLARGE | QDBTDEFLATE ); + +=cut + +use constant { + QDBTLARGE => 1 << 0, + QDBTDEFLATE => 1 << 1, + QDBTTCBS => 1 << 2, +}; + +=head2 tcqdbsetcache + + my $success = tcqdbsetcache( $qdb, $icsiz, $lcnum ); + +=head2 tcqdbsetfwmmax + + my $success = tcqdbsetfwmmax( $qdb, $fwnum ); + +=head2 tcqdbopen + + my $success = tcqdbopen( $qdb, 'casket', QDBOWRITER | QDBOCREAT ); + +=cut + +use constant { + QDBOREADER => 1 << 0, + QDBOWRITER => 1 << 1, + QDBOCREAT => 1 << 2, + QDBOTRUNC => 1 << 3, + QDBONOLCK => 1 << 4, + QDBOLCKNB => 1 << 5, +}; + +=head2 tcqdbclose + + my $success = tcqdbclose( $qdb ); + +=head2 tcqdbput + + my $success = tcqdbput( $qdb, $id, $text ); + +=head2 tcqdbout + + my $success = tcqdbout( $qdb, $id ); + +=head2 tcqdbsearch + + my $ids = tcqdbsearch( $qdb, $word, QDBSSUBSTR ); + +=cut + +use constant { + QDBSSUBSTR => 0, # substring matching + QDBSPREFIX => 1, # prefix matching + QDBSUFFIX => 2, # suffix matching + QDBFULL => 3, # full matching + QDBTOKEN => 4, # token matching + QDBTOKPRE => 5, # token prefix matching + QDBTOKSUF => 6, # token suffix matching +}; + +=head2 tcqdbsync + + my $success = tcqdbsync( $qdb ); + +=head2 tcqdboptimize + + my $success = tcqdboptimize( $qdb ); + +=head2 tcqdbvanish + + my $success = tcqdbvanish( $qdb ); + +=head2 tcqdbcopy + + my $success = tcqdbcopy( $qdb, '/path/of/copy' ); + +=head2 tcqdbpath + + my $path = tcqdbpath( $qdb ); + +=head2 tcqdbtnum + + my $number_of_records = tcqdbtnum( $qdb ); + +=head2 tcqdbfsiz + + my $file_size = tcqdbtsiz( $qdb ); + +=cut + =head1 KNOWN BUGS Low-level functions often just die when called on invalid (or deleted) database