--- lib/Search/TokyoDystopia.pm 2008/08/18 18:28:05 18 +++ lib/Search/TokyoDystopia.pm 2008/09/09 13:17:16 34 @@ -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); @@ -34,6 +34,7 @@ tcidbout tcidbget tcidbsearch +tcidbsearch2 IDBSSUBSTR IDBSPREFIX IDBSSUFFIX @@ -41,15 +42,84 @@ IDBSTOKEN IDBSTOKPRE IDBSTOKSUF +tcidbiterinit +tcidbiternext +tcidbsync +tcidboptimize +tcidbvanish +tcidbcopy +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 +tcqdbtnum +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 @@ -120,7 +190,7 @@ =head2 tcidbsearch - my @ids = tcidbsearch( $idb, $word, IDBSSUBSTR ) + my $ids = tcidbsearch( $idb, $word, IDBSSUBSTR ); =cut @@ -134,6 +204,159 @@ IDBSTOKSUF => 6, # token suffix matching }; +=head2 tcidbsearch2 + + my $ids = tcidbsearch2( $idb, $expr ); + +=head2 tcidbiterinit + + my $success = tcidbiterinit( $idb ); + +=head2 tcidbiternext + + my $id = tcidbiternext( $idb ); + +=head2 tcidbsync + + my $success = tcidbsync( $idb ); + +=head2 tcidboptimize + + my $success = tcidboptimize( $idb ); + +=head2 tcidbvanish + + my $success = tcidbvanish( $idb ); + +=head2 tcidbcopy + + my $success = tcidbcopy( $idb, '/path/of/copy' ); + +=head2 tcidbpath + + my $path = tcidbpath( $idb ); + +=head2 tcidbrnum + + my $number_of_records = tcidbrnum( $idb ); + +=head2 tcidbfsiz + + my $file_size = tcidbfsiz( $idb ); + +=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