Yoshihiro Oyama
yos-o****@smile*****
2007年 1月 23日 (火) 02:06:47 JST
はじめまして。
sen_queryからクエリ式に含まれる単語の一覧を取得したいです。
こんな感じのAPIがあるといいなと思うんですが
いかがでしょうか?
--------------------------
senna.h に追加
typedef int(*query_term_callback)(const char*,size_t,void*);
void sen_query_term(sen_query *q,query_term_callback func,void* func_arg );
--------------------------
query.c に追加
static int query_term_rec( sen_query* q,cons* c,query_term_callback func,void* func_arg ){
cons *token;
if( c->type == cons_token ){
return func(c->u.token.start,c->u.token.len,func_arg);
}
for( token = c->u.expr.car; token; token = token->cdr ){
if(!query_term_rec(q,token,func,func_arg)){
return 0; /* abort */
}
}
return 1; /* continue */
}
void sen_query_term(sen_query *q,query_term_callback func,void* func_arg ){
query_term_rec( q,q->expr,func,func_arg);
}
--------------------------
使用例
int my_query_term_callback(const char* term,size_t len,void* func_arg){
int& n = *(int*)func_arg;
printf("term[%d]=%.*s\n",n++,len,term);
return 1;
/* if return 0,abort enum */
}
int n=0;
sen_query_term(sq,&my_query_term_callback,&n);
--------------------------
Yoshihiro Oyama yos-o****@smile*****