Changeset 213

Show
Ignore:
Timestamp:
03/27/06 11:16:21 (6 years ago)
Author:
knok
Message:

Splitted common code from call_search_main.

Location:
Search-Namazu/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • Search-Namazu/trunk/ChangeLog

    r212 r213  
    22 
    33        * Namazu.xs: Fixed prototype. 
     4          Splitted common code from call_search_main. 
    45 
    562006-03-24  NOKUBI Takatsugu  <knok@daionet.gr.jp> 
  • Search-Namazu/trunk/Namazu.xs

    r212 r213  
    5959static int status = 0; 
    6060 
     61AV * call_search_main_c(char *query) 
     62{ 
     63        AV *retar; 
     64        NmzResult hlist; 
     65        char result[SEARCH_NAMAZU_FIELDS][BUFSIZE]; 
     66        int i; 
     67        status = 0; 
     68        retar = newAV(); 
     69        hlist = nmz_search(query); 
     70        status = hlist.stat; 
     71        for (i = 0; i < hlist.num; i ++) { 
     72                SV *ohlist = perl_eval_pv("new Search::Namazu::Result", TRUE); 
     73                dSP; 
     74                nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "uri", result[0]); 
     75                nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "summary", result[1]); 
     76                nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "title", result[2]); 
     77                nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "author", result[3]); 
     78                nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "size", result[4]); 
     79                ENTER; 
     80                SAVETMPS; 
     81                PUSHMARK(SP); 
     82                PUSHs(ohlist); 
     83                PUSHs(sv_2mortal(newSViv(hlist.data[i].score))); 
     84                PUSHs(sv_2mortal(newSVpv(result[0], strlen(result[0])))); 
     85                PUSHs(sv_2mortal(newSViv(hlist.data[i].date))); 
     86                PUSHs(sv_2mortal(newSViv(hlist.data[i].rank))); 
     87                PUSHs(sv_2mortal(newSVpv(result[1], strlen(result[1])))); 
     88                PUSHs(sv_2mortal(newSVpv(result[2], strlen(result[2])))); 
     89                PUSHs(sv_2mortal(newSVpv(result[3], strlen(result[3])))); 
     90                PUSHs(sv_2mortal(newSVpv(result[4], strlen(result[4])))); 
     91                PUTBACK; 
     92                perl_call_method("set", G_DISCARD); 
     93                av_push(retar, ohlist); 
     94                FREETMPS; 
     95                LEAVE; 
     96        } 
     97        nmz_free_hlist(hlist); 
     98        return retar; 
     99} 
     100 
    61101MODULE = Search::Namazu         PACKAGE = Search::Namazu 
    62102 
     
    70110                char *qstr; 
    71111                char cqstr[BUFSIZE * 2]; 
     112                AV *retar; 
    72113                int i; 
    73                 AV *retar; 
    74                 NmzResult hlist; 
    75                 char result[SEARCH_NAMAZU_FIELDS][BUFSIZE]; 
    76114 
    77                 status = 0; 
    78115                qstr = SvPV(query, PL_na); 
    79116                nmz_codeconv_query(qstr); 
    80117                strcpy(cqstr, qstr); 
    81                 retar = newAV(); 
    82                 hlist = nmz_search(cqstr); 
    83                 status = hlist.stat; 
    84                 for (i = 0; i < hlist.num; i ++) { 
    85                         SV *ohlist = perl_eval_pv("new Search::Namazu::Result", TRUE); 
    86                         dSP; 
    87                         nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "uri", result[0]); 
    88                         nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "summary", result[1]); 
    89                         nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "title", result[2]); 
    90                         nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "author", result[3]); 
    91                         nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid, "size", result[4]); 
    92                         ENTER; 
    93                         SAVETMPS; 
    94                         PUSHMARK(SP); 
    95                         PUSHs(ohlist); 
    96                         PUSHs(sv_2mortal(newSViv(hlist.data[i].score))); 
    97                         PUSHs(sv_2mortal(newSVpv(result[0], strlen(result[0])))); 
    98                         PUSHs(sv_2mortal(newSViv(hlist.data[i].date))); 
    99                         PUSHs(sv_2mortal(newSViv(hlist.data[i].rank))); 
    100                         PUSHs(sv_2mortal(newSVpv(result[1], strlen(result[1])))); 
    101                         PUSHs(sv_2mortal(newSVpv(result[2], strlen(result[2])))); 
    102                         PUSHs(sv_2mortal(newSVpv(result[3], strlen(result[3])))); 
    103                         PUSHs(sv_2mortal(newSVpv(result[4], strlen(result[4])))); 
    104                         PUTBACK; 
    105                         perl_call_method("set", G_DISCARD); 
    106                         av_push(retar, ohlist); 
    107                         FREETMPS; 
    108                         LEAVE; 
    109                 } 
    110                 nmz_free_hlist(hlist); 
     118                retar = call_search_main_c(cqstr); 
    111119#if ! defined(PERL_VERSION) 
    112120                { /* workaround for only one result */ 
     
    115123                } 
    116124#endif /* PERL_VERSION */ 
    117                 for (i = 0; i < hlist.num; i ++) { 
     125                for (i = 0; i <= av_len(retar); i ++) { 
    118126                        XPUSHs(av_pop(retar)); 
    119127                }