--- TokyoDystopia.xs 2008/08/17 22:54:54 8 +++ TokyoDystopia.xs 2008/09/02 16:13:06 32 @@ -10,8 +10,17 @@ MODULE = Search::TokyoDystopia PACKAGE = Search::TokyoDystopia PROTOTYPES: DISABLE + +const char * +tdversion() +CODE: + RETVAL = tdversion; +OUTPUT: + RETVAL + + const char * -errmsg(ecode) +tcidberrmsg(ecode) int ecode CODE: RETVAL = tcidberrmsg(ecode); @@ -20,51 +29,475 @@ void * -new() +tcidbnew() PREINIT: - TCIDB *db; + TCIDB *idb; CODE: - db = tcidbnew(); - RETVAL = db; + idb = tcidbnew(); + RETVAL = idb; OUTPUT: RETVAL void -del(db) - void * db +tcidbdel(idb) + void * idb CODE: - tcidbdel(db); + tcidbdel(idb); int -ecode(db) - void * db +tcidbecode(idb) + void * idb CODE: - RETVAL = tcidbecode(db); + RETVAL = tcidbecode(idb); OUTPUT: RETVAL int -tune(db, ernum, etnum, iusiz, opts) - void * db +tcidbtune(idb, ernum, etnum, iusiz, opts) + void * idb int ernum int etnum int iusiz int opts CODE: - RETVAL = tcidbtune(db, ernum, etnum, iusiz, opts); + RETVAL = tcidbtune(idb, ernum, etnum, iusiz, opts); +OUTPUT: + RETVAL + + +int +tcidbsetcache(idb, icsiz, lcnum) + void * idb + int icsiz + int lcnum +CODE: + RETVAL = tcidbsetcache(idb, icsiz, lcnum); +OUTPUT: + RETVAL + + +int +tcidbsetfwmmax(idb, fwmax) + void * idb + int fwmax +CODE: + RETVAL = tcidbsetfwmmax(idb, fwmax); +OUTPUT: + RETVAL + + +int +tcidbopen(idb, path, omode) + void * idb + char * path + int omode +CODE: + RETVAL = tcidbopen(idb, path, omode); +OUTPUT: + RETVAL + + +int +tcidbclose(idb) + void * idb +CODE: + RETVAL = tcidbclose(idb); +OUTPUT: + RETVAL + + +int +tcidbput(idb, id, val) + void * idb + int id + SV * val +PREINIT: + STRLEN vsiz; + const char *vbuf; +CODE: + vbuf = SvPV(val, vsiz); + RETVAL = tcidbput(idb, id, vbuf); +OUTPUT: + RETVAL + + +int +tcidbout(idb, id) + void * idb + int id +CODE: + RETVAL = tcidbout(idb, id); +OUTPUT: + RETVAL + + +void +tcidbget(idb, id) + void * idb + int id +PREINIT: + char *vbuf; +PPCODE: + vbuf = tcidbget(idb, id); + if(vbuf){ + XPUSHs(sv_2mortal(newSVpvn(vbuf, strlen(vbuf)))); + tcfree(vbuf); + } else { + XPUSHs((SV *)&PL_sv_undef); + } + XSRETURN(1); + + +void +tcidbsearch(idb, word, smode) + void * idb + SV * word + int smode +PREINIT: + AV *av; + STRLEN wsize; + uint64_t *results; + const char *wbuf; + int i, rnum; +PPCODE: + wbuf = SvPV(word, wsize); + results = tcidbsearch(idb, wbuf, smode, &rnum); + if ( rnum > 0 ) { + av = newAV(); + for(i = 0; i < rnum; i++){ + av_push(av, newSViv( (int)results[i] )); + } + XPUSHs(sv_2mortal(newRV_noinc((SV *)av))); + } else { + XPUSHs((SV *)&PL_sv_undef); + } + XSRETURN(1); + + +void +tcidbsearch2(idb, expr) + void * idb + SV * expr +PREINIT: + AV *av; + STRLEN wsize; + uint64_t *results; + const char *wbuf; + int i, rnum; +PPCODE: + wbuf = SvPV(expr, wsize); + results = tcidbsearch2(idb, wbuf, &rnum); + if ( rnum > 0 ) { + av = newAV(); + for(i = 0; i < rnum; i++){ + av_push(av, newSViv( (int)results[i] )); // FIXME convert to double? + } + XPUSHs(sv_2mortal(newRV_noinc((SV *)av))); + } else { + XPUSHs((SV *)&PL_sv_undef); + } + XSRETURN(1); + + +int +tcidbiterinit(idb) + void * idb +CODE: + RETVAL = tcidbiterinit(idb); +OUTPUT: + RETVAL + + +double +tcidbiternext(idb) + void * idb +CODE: + RETVAL = tcidbiternext(idb); +OUTPUT: + RETVAL + + +int +tcidbsync(idb) + void * idb +CODE: + RETVAL = tcidbsync(idb); +OUTPUT: + RETVAL + + +int +tcidboptimize(idb) + void * idb +CODE: + RETVAL = tcidboptimize(idb); +OUTPUT: + RETVAL + + +int +tcidbvanish(idb) + void * idb +CODE: + RETVAL = tcidbvanish(idb); +OUTPUT: + RETVAL + + +int +tcidbcopy(idb, path) + void * idb + char * path +CODE: + RETVAL = tcidbcopy(idb, path); +OUTPUT: + RETVAL + + +void +tcidbpath(idb) + void * idb +PREINIT: + const char *path; +PPCODE: + path = tcidbpath(idb); + if(path){ + XPUSHs(sv_2mortal(newSVpv(path, 0))); + } else { + XPUSHs((SV *)&PL_sv_undef); + } + XSRETURN(1); + + +double +tcidbrnum(idb) + void * idb +CODE: + RETVAL = tcidbrnum(idb); +OUTPUT: + RETVAL + + +double +tcidbfsiz(idb) + void * idb +CODE: + RETVAL = tcidbfsiz(idb); +OUTPUT: + RETVAL + + +#include + +const char * +tcqdberrmsg(ecode) + int ecode +CODE: + RETVAL = tcqdberrmsg(ecode); +OUTPUT: + RETVAL + + +void * +tcqdbnew() +PREINIT: + TCQDB *qdb; +CODE: + qdb = tcqdbnew(); + RETVAL = qdb; +OUTPUT: + RETVAL + + +void +tcqdbdel(qdb) + void * qdb +CODE: + tcqdbdel(qdb); + + +int +tcqdbecode(qdb) + void * qdb +CODE: + RETVAL = tcqdbecode(qdb); +OUTPUT: + RETVAL + + +int +tcqdbtune(qdb, etnum, opts) + void * qdb + int etnum + int opts +CODE: + RETVAL = tcqdbtune(qdb, etnum, opts); OUTPUT: RETVAL int -setcache(db, icsiz, lcnum) - void * db +tcqdbsetcache(qdb, icsiz, lcnum) + void * qdb int icsiz int lcnum CODE: - RETVAL = tcidbsetcache(db, icsiz, lcnum); + RETVAL = tcqdbsetcache(qdb, icsiz, lcnum); +OUTPUT: + RETVAL + + +int +tcqdbsetfwmmax(qdb, fwmax) + void * qdb + int fwmax +CODE: + RETVAL = tcqdbsetfwmmax(qdb, fwmax); OUTPUT: RETVAL + + +int +tcqdbopen(qdb, path, omode) + void * qdb + char * path + int omode +CODE: + RETVAL = tcqdbopen(qdb, path, omode); +OUTPUT: + RETVAL + + +int +tcqdbclose(qdb) + void * qdb +CODE: + RETVAL = tcqdbclose(qdb); +OUTPUT: + RETVAL + + +int +tcqdbput(qdb, id, val) + void * qdb + int id + SV * val +PREINIT: + STRLEN vsiz; + const char *vbuf; +CODE: + vbuf = SvPV(val, vsiz); + RETVAL = tcqdbput(qdb, id, vbuf); +OUTPUT: + RETVAL + + +int +tcqdbout(qdb, id) + void * qdb + int id + const char *text; /* FIXME return old value */ +CODE: + RETVAL = tcqdbout(qdb, id, text); +OUTPUT: + RETVAL + + +void +tcqdbsearch(qdb, word, smode) + void * qdb + SV * word + int smode +PREINIT: + AV *av; + STRLEN wsize; + uint64_t *results; + const char *wbuf; + int i, rnum; +PPCODE: + wbuf = SvPV(word, wsize); + results = tcqdbsearch(qdb, wbuf, smode, &rnum); + if ( rnum > 0 ) { + av = newAV(); + for(i = 0; i < rnum; i++){ + av_push(av, newSViv( (int)results[i] )); + } + XPUSHs(sv_2mortal(newRV_noinc((SV *)av))); + } else { + XPUSHs((SV *)&PL_sv_undef); + } + XSRETURN(1); + + +int +tcqdbsync(qdb) + void * qdb +CODE: + RETVAL = tcqdbsync(qdb); +OUTPUT: + RETVAL + + +int +tcqdboptimize(qdb) + void * qdb +CODE: + RETVAL = tcqdboptimize(qdb); +OUTPUT: + RETVAL + + +int +tcqdbvanish(qdb) + void * qdb +CODE: + RETVAL = tcqdbvanish(qdb); +OUTPUT: + RETVAL + + +int +tcqdbcopy(qdb, path) + void * qdb + char * path +CODE: + RETVAL = tcqdbcopy(qdb, path); +OUTPUT: + RETVAL + + +void +tcqdbpath(qdb) + void * qdb +PREINIT: + const char *path; +PPCODE: + path = tcqdbpath(qdb); + if(path){ + XPUSHs(sv_2mortal(newSVpv(path, 0))); + } else { + XPUSHs((SV *)&PL_sv_undef); + } + XSRETURN(1); + + +double +tcqdbtnum(qdb) + void * qdb +CODE: + RETVAL = tcqdbtnum(qdb); +OUTPUT: + RETVAL + + +double +tcqdbfsiz(qdb) + void * qdb +CODE: + RETVAL = tcqdbfsiz(qdb); +OUTPUT: + RETVAL +