Changeset 0a55ed69e9335dedb34800a9364559814f7b38ee

Show
Ignore:
Timestamp:
04/24/08 21:02:02 (9 months ago)
Author:
dave <dave@…>
Parents:
ad7faee95a07fccb5ea03fcc0e0875729617ab0c
Children:
8eb44963185f8afa008b1abfe3f6fad0839b2efd
git-committer:
dave <dave@06fd6eb0-0002-0410-a719-e5602cce40bc> / 2008-04-24T11:02:02Z+0000
Message:

Updated the ruby bindings to use the new Symbols

git-svn-id: svn+ssh://davebalmain.com/home/dave/repos/ferret/trunk@1041 06fd6eb0-0002-0410-a719-e5602cce40bc

Location:
ruby
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • ruby/.gitignore

    r950230 r0a55ed  
    7272ext/index.c 
    7373ext/index.h 
    74 ext/intern.c 
    75 ext/intern.h 
    7674ext/internal.h 
    7775ext/libstemmer.h 
     
    140138ext/store.c 
    141139ext/store.h 
     140ext/symbol.c 
     141ext/symbol.h 
    142142ext/term_vectors.c 
    143143ext/win32.h 
  • ruby/ext/ferret.c

    raeada4 r0a55ed  
    55#include "hashset.h" 
    66#include "threading.h" 
    7 #include "intern.h" 
     7#include "symbol.h" 
    88#include "internal.h" 
    99 
     
    179179} 
    180180 
    181 const char * 
     181Symbol 
    182182rintern(VALUE rstr) 
    183183{ 
     
    186186} 
    187187 
    188 char * 
     188Symbol 
    189189frb_field(VALUE rfield) 
    190190{ 
    191191    switch (TYPE(rfield)) { 
    192192        case T_SYMBOL: 
    193             return rb_id2name(SYM2ID(rfield)); 
     193            return I(rb_id2name(SYM2ID(rfield))); 
    194194        case T_STRING: 
    195             return rs2s(rfield); 
     195            return I(rs2s(rfield)); 
    196196        default: 
    197197            rb_raise(rb_eArgError, "field name must be a symbol"); 
    198     } 
    199     return NULL; 
     198            return NULL; 
     199    } 
    200200} 
    201201 
     
    290290static ID id_text; 
    291291 
    292 VALUE frb_get_term(const char *field, const char *text) 
     292VALUE frb_get_term(Symbol field, const char *text) 
    293293{ 
    294294    return rb_struct_new(cTerm, 
    295                          ID2SYM(rb_intern(field)), 
     295                         SYM2RSYM(field), 
    296296                         rb_str_new2(text), 
    297297                         NULL); 
  • ruby/ext/ferret.h

    raeada4 r0a55ed  
    55#include "hashset.h" 
    66#include "document.h" 
     7#include "symbol.h" 
    78#include "internal.h" 
    89 
     
    6566extern VALUE frb_hs_to_rb_ary(HashSet *hs); 
    6667extern void *frb_rb_data_ptr(VALUE val); 
    67 extern char * frb_field(VALUE rfield); 
    68 extern VALUE frb_get_term(const char *field, const char *term); 
     68extern Symbol frb_field(VALUE rfield); 
     69extern VALUE frb_get_term(Symbol field, const char *term); 
    6970extern char *json_concat_string(char *s, char *field); 
    7071extern char *rs2s(VALUE rstr); 
    7172extern char *rstrdup(VALUE rstr); 
    72 extern const char *rintern(VALUE rstr); 
     73extern Symbol rintern(VALUE rstr); 
    7374#define Frt_Make_Struct(klass)\ 
    7475  rb_data_object_alloc(klass,NULL,(RUBY_DATA_FUNC)NULL,(RUBY_DATA_FUNC)NULL) 
     
    9091#endif 
    9192 
     93#define SYM2RSYM(_sym) ID2SYM(rb_intern(S(_sym))) 
    9294#define frb_mark_cclass(klass) rb_ivar_set(klass, id_cclass, Qtrue) 
    9395#define frb_is_cclass(obj) (rb_ivar_get(CLASS_OF(obj), id_cclass) == Qtrue) 
  • ruby/ext/r_analysis.c

    raeada4 r0a55ed  
    11491149 
    11501150static TokenStream * 
    1151 cwa_get_ts(Analyzer *a, const char *field, char *text) 
     1151cwa_get_ts(Analyzer *a, Symbol field, char *text) 
    11521152{ 
    11531153    VALUE rts = rb_funcall(CWA(a)->ranalyzer, id_token_stream, 2, 
    1154                            ID2SYM(rb_intern(field)), rb_str_new2(text)); 
     1154                           SYM2RSYM(field), rb_str_new2(text)); 
    11551155    return frb_get_cwrapped_rts(rts); 
    11561156}  
     
    14811481{ 
    14821482    Analyzer *pfa, *a; 
    1483     char *field = frb_field(rfield); 
     1483    Symbol field = frb_field(rfield); 
    14841484    GET_A(pfa, self); 
    14851485 
     
    14911491    if (a->get_ts == cwa_get_ts) { 
    14921492        return rb_funcall(CWA(a)->ranalyzer, id_token_stream, 2, 
    1493                           ID2SYM(rb_intern(field)), rb_str_new2(rs2s(rstring))); 
     1493                          SYM2RSYM(field), rb_str_new2(rs2s(rstring))); 
    14941494    } 
    14951495    else { 
  • ruby/ext/r_index.c

    raeada4 r0a55ed  
    5252static VALUE sym_with_offsets; 
    5353static VALUE sym_with_positions_offsets; 
     54 
     55static Symbol fsym_content; 
    5456 
    5557static ID id_term; 
     
    207209{ 
    208210    FieldInfo *fi = (FieldInfo *)DATA_PTR(self); 
    209     return ID2SYM(rb_intern(fi->name)); 
     211    return ID2SYM(rb_intern(S(fi->name))); 
    210212} 
    211213 
     
    486488                       } 
    487489        case T_SYMBOL: 
     490        case T_STRING: 
    488491            rfi = frb_get_field_info(fis_get_field(fis, frb_field(ridx))); 
    489492            break; 
     493            /* 
    490494        case T_STRING: 
    491495            rfi = frb_get_field_info(fis_get_field(fis, StringValuePtr(ridx))); 
    492496            break; 
     497            */ 
    493498        default: 
    494499            rb_raise(rb_eArgError, "Can't index FieldInfos with %s", 
     
    634639    int i; 
    635640    for (i = 0; i < fis->size; i++) { 
    636         rb_ary_push(rfield_names, ID2SYM(rb_intern(fis->fields[i]->name))); 
     641        rb_ary_push(rfield_names, SYM2RSYM(fis->fields[i]->name)); 
    637642    } 
    638643    return rfield_names; 
     
    654659    for (i = 0; i < fis->size; i++) { 
    655660        if (!fi_is_tokenized(fis->fields[i])) continue; 
    656         rb_ary_push(rfield_names, ID2SYM(rb_intern(fis->fields[i]->name))); 
     661        rb_ary_push(rfield_names, SYM2RSYM(fis->fields[i]->name)); 
    657662    } 
    658663    return rfield_names; 
     
    749754{ 
    750755    TermEnum *te = (TermEnum *)DATA_PTR(self); 
    751     return frb_te_get_set_term(self, te->skip_to(te, frb_field(rterm))); 
     756    return frb_te_get_set_term(self, te->skip_to(te, rs2s(rterm))); 
    752757} 
    753758 
     
    12401245    VALUE rfield, rterms, *rts; 
    12411246    VALUE roffsets = Qnil; 
    1242     rfield = ID2SYM(rb_intern(tv->field)); 
     1247    rfield = SYM2RSYM(tv->field); 
    12431248 
    12441249    rterms = rb_ary_new2(t_cnt); 
     
    14321437    } else { 
    14331438        Document *doc = (Document *)arg; 
    1434         char *field; 
     1439        Symbol field = frb_field(key); 
    14351440        VALUE val; 
    14361441        DocField *df; 
    1437         switch (TYPE(key)) { 
    1438             case T_STRING: 
    1439                 field = rs2s(key); 
    1440                 break; 
    1441             case T_SYMBOL: 
    1442                 field = rb_id2name(SYM2ID(key)); 
    1443                 break; 
    1444             default: 
    1445                 rb_raise(rb_eArgError, 
    1446                          "%s cannot be a key to a field. Field keys must " 
    1447                          " be symbols.", rs2s(rb_obj_as_string(key))); 
    1448                 break; 
    1449         } 
    14501442        if (NULL == (df = doc_get_field(doc, field))) { 
    14511443            df = df_new(field); 
     
    14971489            { 
    14981490                int i; 
    1499                 df = df_new("content"); 
     1491                df = df_new(fsym_content); 
    15001492                df->destroy_data = true; 
    15011493                for (i = 0; i < RARRAY(rdoc)->len; i++) { 
     
    15071499            break; 
    15081500        case T_SYMBOL: 
    1509             df = df_add_data(df_new("content"), rb_id2name(SYM2ID(rdoc))); 
     1501            df = df_add_data(df_new(fsym_content), rb_id2name(SYM2ID(rdoc))); 
    15101502            doc_add_field(doc, df); 
    15111503            break; 
    15121504        case T_STRING: 
    1513             df = df_add_data_len(df_new("content"), rs2s(rdoc), 
     1505            df = df_add_data_len(df_new(fsym_content), rs2s(rdoc), 
    15141506                                 RSTRING(rdoc)->len); 
    15151507            doc_add_field(doc, df); 
     
    15171509        default: 
    15181510            val = rb_obj_as_string(rdoc); 
    1519             df = df_add_data_len(df_new("content"), rstrdup(val), 
     1511            df = df_add_data_len(df_new(fsym_content), rstrdup(val), 
    15201512                                 RSTRING(val)->len); 
    15211513            df->destroy_data = true; 
     
    19881980{ 
    19891981    LazyDoc *lazy_doc = (LazyDoc *)DATA_PTR(rb_ivar_get(self, id_data)); 
    1990     char *field = NULL; 
    1991     switch (TYPE(rkey)) { 
    1992         case T_STRING: 
    1993             field = rs2s(rkey); 
    1994             rkey = ID2SYM(rb_intern(field)); 
    1995             break; 
    1996         case T_SYMBOL: 
    1997             field = frb_field(rkey); 
    1998             break; 
    1999         default: 
    2000             rb_raise(rb_eArgError, 
    2001                      "%s cannot be a key to a field. Field keys must " 
    2002                      " be symbols.", rs2s(rb_obj_as_string(rkey))); 
    2003             break; 
    2004     } 
    2005     return frb_lazy_df_load(self, rkey, h_get(lazy_doc->field_dict, field)); 
     1982    Symbol field = frb_field(rkey); 
     1983    VALUE rfield = SYM2RSYM(field); 
     1984 
     1985    return frb_lazy_df_load(self, rfield, h_get(lazy_doc->field_dict, field)); 
    20061986} 
    20071987 
     
    20332013    for (i = 0; i < lazy_doc->size; i++) { 
    20342014        LazyDocField *lazy_df = lazy_doc->fields[i]; 
    2035         frb_lazy_df_load(self, ID2SYM(rb_intern(lazy_df->name)), lazy_df); 
     2015        frb_lazy_df_load(self, SYM2RSYM(lazy_df->name), lazy_df); 
    20362016    } 
    20372017    return self; 
     
    20522032 
    20532033    for (i = 0; i < lazy_doc->size; i++) { 
    2054         RARRAY(rfields)->ptr[i] = ID2SYM(rb_intern(lazy_doc->fields[i]->name)); 
     2034        RARRAY(rfields)->ptr[i] = SYM2RSYM(lazy_doc->fields[i]->name); 
    20552035        RARRAY(rfields)->len++; 
    20562036    } 
     
    21912171        FieldInfo *fi = fis->fields[i]; 
    21922172        rb_hash_aset(rfield_num_map, 
    2193                      ID2SYM(rb_intern(fi->name)), 
     2173                     SYM2RSYM(fi->name), 
    21942174                     INT2FIX(fi->number)); 
    21952175    } 
     
    26602640    int i; 
    26612641    for (i = 0; i < fis->size; i++) { 
    2662         rb_ary_push(rfield_names, ID2SYM(rb_intern(fis->fields[i]->name))); 
     2642        rb_ary_push(rfield_names, SYM2RSYM(fis->fields[i]->name)); 
    26632643    } 
    26642644    return rfield_names; 
     
    26962676    for (i = 0; i < fis->size; i++) { 
    26972677        if (!fi_is_tokenized(fis->fields[i])) continue; 
    2698         rb_ary_push(rfield_names, ID2SYM(rb_intern(fis->fields[i]->name))); 
     2678        rb_ary_push(rfield_names, SYM2RSYM(fis->fields[i]->name)); 
    26992679    } 
    27002680    return rfield_names; 
     
    34863466    sym_analyzer  = ID2SYM(rb_intern("analyzer")); 
    34873467    sym_close_dir = ID2SYM(rb_intern("close_dir")); 
     3468    fsym_content  = I("content"); 
    34883469 
    34893470    Init_TermVector(); 
  • ruby/ext/r_qparser.c

    r294d6f r0a55ed  
    1 #include "intern.h" 
     1#include "symbol.h" 
    22#include "ferret.h" 
    33#include "search.h" 
  • ruby/ext/r_search.c

    r6a5a9e r0a55ed  
    127127static VALUE sym_ellipsis;       
    128128 
     129static Symbol fsym_id; 
     130 
    129131extern VALUE cIndexReader; 
    130132extern void frb_ir_free(void *p); 
     
    196198    int p = 0; 
    197199    char *str = ALLOC_N(char, len * 64 + 100); 
    198     char *field = "id"; 
     200    Symbol field = fsym_id; 
    199201    VALUE rstr; 
    200202 
     
    250252         * between fields. Add 100 for '[', ']' and good safety. 
    251253         */ 
    252         len += strlen(f->name) + f->len * 3 + 100 + 4 * f->size; 
     254        len += sym_len(f->name) + f->len * 3 + 100 + 4 * f->size; 
    253255    } 
    254256 
     
    263265                if (i)  *(s++) = ','; 
    264266        *(s++) = '"'; 
    265         l = strlen(f->name); 
     267        l = sym_len(f->name); 
    266268        memcpy(s, f->name, l); 
    267269        s += l; 
     
    401403    GET_Q(); 
    402404    VALUE rstr, rfield; 
    403     char *str, *field = ""; 
     405    char *str; 
     406    Symbol field = NULL; 
    404407    if (rb_scan_args(argc, argv, "01", &rfield)) { 
    405408        field = frb_field(rfield); 
     
    597600frb_tq_init(VALUE self, VALUE rfield, VALUE rterm) 
    598601{ 
    599     char *field = frb_field(rfield); 
     602    Symbol field = frb_field(rfield); 
    600603    char *term = rs2s(rb_obj_as_string(rterm)); 
    601604    Query *q = tq_new(field, term); 
     
    714717} 
    715718 
    716 typedef Query *(*mtq_maker_ft)(const char *field, const char *term); 
     719typedef Query *(*mtq_maker_ft)(Symbol field, const char *term); 
    717720 
    718721static int 
     
    913916    int len; 
    914917    GET_BC(); 
    915     qstr = bc->query->to_s(bc->query, ""); 
     918    qstr = bc->query->to_s(bc->query, NULL); 
    916919    switch (bc->occur) { 
    917920        case BC_SHOULD: 
     
    21752178    int type = SORT_TYPE_AUTO; 
    21762179    int is_reverse = false; 
    2177     char *field; 
     2180    Symbol field; 
    21782181 
    21792182    if (rb_scan_args(argc, argv, "11", &rfield, &roptions) == 2) { 
     
    21922195 
    21932196    sf = sort_field_new(field, type, is_reverse); 
    2194     if (sf->field == NULL && field) { 
    2195         sf->field = estrdup(field); 
     2197    if (sf->field == NULL) { 
     2198        sf->field = field; 
    21962199    } 
    21972200 
     
    22272230{ 
    22282231    GET_SF(); 
    2229     return sf->field ? ID2SYM(rb_intern(sf->field)) : Qnil; 
     2232    return sf->field ? SYM2RSYM(sf->field) : Qnil; 
    22302233} 
    22312234 
     
    23492352            sf = sort_field_doc_new(reverse); 
    23502353        } else { 
    2351             sf = sort_field_auto_new(s, reverse); 
     2354            sf = sort_field_auto_new(I(s), reverse); 
    23522355        } 
    23532356        frb_get_sf(sf); 
     
    23692372            break; 
    23702373        case T_SYMBOL: 
    2371             rsf = rb_obj_as_string(rsf); 
    2372             sf = sort_field_auto_new(rs2s(rsf), reverse); 
     2374            sf = sort_field_auto_new(frb_field(rsf), reverse); 
    23732375            /* need to give it a ruby object so it'll be freed when the 
    23742376             * sort is garbage collected */ 
     
    26162618    } 
    26172619    else { 
    2618         filter = filt_create(sizeof(CWrappedFilter), "CWrappedFilter"); 
    2619         filter->hash     = &cwfilt_hash; 
    2620         filter->eq       = &cwfilt_eq; 
    2621         filter->get_bv_i = &cwfilt_get_bv_i; 
     2620        filter               = filt_new(CWrappedFilter); 
     2621        filter->hash         = &cwfilt_hash; 
     2622        filter->eq           = &cwfilt_eq; 
     2623        filter->get_bv_i     = &cwfilt_get_bv_i; 
    26222624        CWF(filter)->rfilter = rval; 
    26232625    } 
     
    44184420    mSearch = rb_define_module_under(mFerret, "Search"); 
    44194421 
     4422    fsym_id = I("id"); 
     4423 
    44204424    Init_Hit(); 
    44214425    Init_TopDocs();