Search-Namazu
view release on metacpan or search on metacpan
fsize = (int *) malloc(sizeof(int) * (flen + 1));
for (i = 0; i <= flen; i ++) {
SV **x;
x = av_fetch(fields, i, 0);
fstr[i] = SvPV_nolen(*x);
fsize[i] = SvCUR(*x);
}
hlist = nmz_search(query);
av_extend(retar, hlist.num - 1);
status = hlist.stat;
stash = gv_stashpv("Search::Namazu::ResultXS", 0);
for (i = 0; i < hlist.num; i ++) {
if (i < maxget) {
HV *hash;
SV *ref;
SV *score, *date, *rank, *docid, *idxid;
int j;
char fcont[BUFSIZE];
hash = newHV();
for (j = 0; j <= flen; j ++) {
nmz_get_field_data(hlist.data[i].idxid,
hlist.data[i].docid,
fstr[j], fcont);
hv_store(hash, fstr[j], fsize[j],
newSVpv(fcont, strlen(fcont)), 0);
}
score = newSViv(hlist.data[i].score);
date = newSViv(hlist.data[i].date);
rank = newSViv(hlist.data[i].rank);
docid = newSViv(hlist.data[i].docid);
idxid = newSViv(hlist.data[i].idxid);
hv_store(hash, SCORE, SCORE_LEN, score, 0);
hv_store(hash, DATE, DATE_LEN, date, 0);
hv_store(hash, RANK, RANK_LEN, rank, 0);
hv_store(hash, DOCID, IDXID_LEN, docid, 0);
hv_store(hash, IDXID, IDXID_LEN, idxid, 0);
ref = newRV_inc((SV*) hash);
sv_bless(ref, stash);
av_store(retar, i, ref);
} else {
av_store(retar, i, &PL_sv_undef);
}
}
nmz_free_hlist(hlist);
free(fstr);
free(fsize);
return retar;
}
MODULE = Search::Namazu PACKAGE = Search::Namazu
PROTOTYPES: DISABLE
void
call_search_main(query, maxget)
SV *query
int maxget
PPCODE:
char *qstr;
char buffer[BUFSIZE];
char cqstr[BUFSIZE * 2];
AV *retar;
int i;
qstr = SvPV(query, PL_na);
strncpy(buffer, qstr, BUFSIZE);
buffer[BUFSIZE - 1] = '\0';
nmz_codeconv_query(buffer);
strcpy(cqstr, buffer);
retar = call_search_main_c(cqstr, maxget);
#if ! defined(PERL_VERSION) || (PERL_VERSION == 6 && PERL_SUBVERSION == 0)
{ /* workaround for only one result */
SPAGAIN;
}
#endif /* PERL_VERSION */
while (av_len(retar) >= 0) {
XPUSHs(av_shift(retar));
}
nmz_free_internal();
SV*
call_search_main_ref(query, maxget)
SV *query
int maxget
CODE:
char *qstr;
char buffer[BUFSIZE];
char cqstr[BUFSIZE * 2];
AV *retar;
int i;
qstr = SvPV(query, PL_na);
strncpy(buffer, qstr, BUFSIZE);
buffer[BUFSIZE - 1] = '\0';
nmz_codeconv_query(buffer);
strcpy(cqstr, buffer);
retar = call_search_main_c(cqstr, maxget);
nmz_free_internal();
RETVAL = newRV_inc((SV*) retar);
OUTPUT:
RETVAL
SV*
call_search_main_fields(query, maxget, fieldref)
SV *query
int maxget
SV *fieldref
CODE:
char *qstr;
char buffer[BUFSIZE];
char cqstr[BUFSIZE * 2];
AV *retar;
AV *fields;
int i;
fields = (AV *) SvRV(fieldref);
( run in 0.397 second using v1.01-cache-2.11-cpan-5511b514fd6 )