Changeset 0a55ed69e9335dedb34800a9364559814f7b38ee
- 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:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r950230
|
r0a55ed
|
|
| 72 | 72 | ext/index.c |
| 73 | 73 | ext/index.h |
| 74 | | ext/intern.c |
| 75 | | ext/intern.h |
| 76 | 74 | ext/internal.h |
| 77 | 75 | ext/libstemmer.h |
| … |
… |
|
| 140 | 138 | ext/store.c |
| 141 | 139 | ext/store.h |
| | 140 | ext/symbol.c |
| | 141 | ext/symbol.h |
| 142 | 142 | ext/term_vectors.c |
| 143 | 143 | ext/win32.h |
-
|
raeada4
|
r0a55ed
|
|
| 5 | 5 | #include "hashset.h" |
| 6 | 6 | #include "threading.h" |
| 7 | | #include "intern.h" |
| | 7 | #include "symbol.h" |
| 8 | 8 | #include "internal.h" |
| 9 | 9 | |
| … |
… |
|
| 179 | 179 | } |
| 180 | 180 | |
| 181 | | const char * |
| | 181 | Symbol |
| 182 | 182 | rintern(VALUE rstr) |
| 183 | 183 | { |
| … |
… |
|
| 186 | 186 | } |
| 187 | 187 | |
| 188 | | char * |
| | 188 | Symbol |
| 189 | 189 | frb_field(VALUE rfield) |
| 190 | 190 | { |
| 191 | 191 | switch (TYPE(rfield)) { |
| 192 | 192 | case T_SYMBOL: |
| 193 | | return rb_id2name(SYM2ID(rfield)); |
| | 193 | return I(rb_id2name(SYM2ID(rfield))); |
| 194 | 194 | case T_STRING: |
| 195 | | return rs2s(rfield); |
| | 195 | return I(rs2s(rfield)); |
| 196 | 196 | default: |
| 197 | 197 | rb_raise(rb_eArgError, "field name must be a symbol"); |
| 198 | | } |
| 199 | | return NULL; |
| | 198 | return NULL; |
| | 199 | } |
| 200 | 200 | } |
| 201 | 201 | |
| … |
… |
|
| 290 | 290 | static ID id_text; |
| 291 | 291 | |
| 292 | | VALUE frb_get_term(const char *field, const char *text) |
| | 292 | VALUE frb_get_term(Symbol field, const char *text) |
| 293 | 293 | { |
| 294 | 294 | return rb_struct_new(cTerm, |
| 295 | | ID2SYM(rb_intern(field)), |
| | 295 | SYM2RSYM(field), |
| 296 | 296 | rb_str_new2(text), |
| 297 | 297 | NULL); |
-
|
raeada4
|
r0a55ed
|
|
| 5 | 5 | #include "hashset.h" |
| 6 | 6 | #include "document.h" |
| | 7 | #include "symbol.h" |
| 7 | 8 | #include "internal.h" |
| 8 | 9 | |
| … |
… |
|
| 65 | 66 | extern VALUE frb_hs_to_rb_ary(HashSet *hs); |
| 66 | 67 | extern 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); |
| | 68 | extern Symbol frb_field(VALUE rfield); |
| | 69 | extern VALUE frb_get_term(Symbol field, const char *term); |
| 69 | 70 | extern char *json_concat_string(char *s, char *field); |
| 70 | 71 | extern char *rs2s(VALUE rstr); |
| 71 | 72 | extern char *rstrdup(VALUE rstr); |
| 72 | | extern const char *rintern(VALUE rstr); |
| | 73 | extern Symbol rintern(VALUE rstr); |
| 73 | 74 | #define Frt_Make_Struct(klass)\ |
| 74 | 75 | rb_data_object_alloc(klass,NULL,(RUBY_DATA_FUNC)NULL,(RUBY_DATA_FUNC)NULL) |
| … |
… |
|
| 90 | 91 | #endif |
| 91 | 92 | |
| | 93 | #define SYM2RSYM(_sym) ID2SYM(rb_intern(S(_sym))) |
| 92 | 94 | #define frb_mark_cclass(klass) rb_ivar_set(klass, id_cclass, Qtrue) |
| 93 | 95 | #define frb_is_cclass(obj) (rb_ivar_get(CLASS_OF(obj), id_cclass) == Qtrue) |
-
|
raeada4
|
r0a55ed
|
|
| 1149 | 1149 | |
| 1150 | 1150 | static TokenStream * |
| 1151 | | cwa_get_ts(Analyzer *a, const char *field, char *text) |
| | 1151 | cwa_get_ts(Analyzer *a, Symbol field, char *text) |
| 1152 | 1152 | { |
| 1153 | 1153 | 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)); |
| 1155 | 1155 | return frb_get_cwrapped_rts(rts); |
| 1156 | 1156 | } |
| … |
… |
|
| 1481 | 1481 | { |
| 1482 | 1482 | Analyzer *pfa, *a; |
| 1483 | | char *field = frb_field(rfield); |
| | 1483 | Symbol field = frb_field(rfield); |
| 1484 | 1484 | GET_A(pfa, self); |
| 1485 | 1485 | |
| … |
… |
|
| 1491 | 1491 | if (a->get_ts == cwa_get_ts) { |
| 1492 | 1492 | 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))); |
| 1494 | 1494 | } |
| 1495 | 1495 | else { |
-
|
raeada4
|
r0a55ed
|
|
| 52 | 52 | static VALUE sym_with_offsets; |
| 53 | 53 | static VALUE sym_with_positions_offsets; |
| | 54 | |
| | 55 | static Symbol fsym_content; |
| 54 | 56 | |
| 55 | 57 | static ID id_term; |
| … |
… |
|
| 207 | 209 | { |
| 208 | 210 | FieldInfo *fi = (FieldInfo *)DATA_PTR(self); |
| 209 | | return ID2SYM(rb_intern(fi->name)); |
| | 211 | return ID2SYM(rb_intern(S(fi->name))); |
| 210 | 212 | } |
| 211 | 213 | |
| … |
… |
|
| 486 | 488 | } |
| 487 | 489 | case T_SYMBOL: |
| | 490 | case T_STRING: |
| 488 | 491 | rfi = frb_get_field_info(fis_get_field(fis, frb_field(ridx))); |
| 489 | 492 | break; |
| | 493 | /* |
| 490 | 494 | case T_STRING: |
| 491 | 495 | rfi = frb_get_field_info(fis_get_field(fis, StringValuePtr(ridx))); |
| 492 | 496 | break; |
| | 497 | */ |
| 493 | 498 | default: |
| 494 | 499 | rb_raise(rb_eArgError, "Can't index FieldInfos with %s", |
| … |
… |
|
| 634 | 639 | int i; |
| 635 | 640 | 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)); |
| 637 | 642 | } |
| 638 | 643 | return rfield_names; |
| … |
… |
|
| 654 | 659 | for (i = 0; i < fis->size; i++) { |
| 655 | 660 | 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)); |
| 657 | 662 | } |
| 658 | 663 | return rfield_names; |
| … |
… |
|
| 749 | 754 | { |
| 750 | 755 | 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))); |
| 752 | 757 | } |
| 753 | 758 | |
| … |
… |
|
| 1240 | 1245 | VALUE rfield, rterms, *rts; |
| 1241 | 1246 | VALUE roffsets = Qnil; |
| 1242 | | rfield = ID2SYM(rb_intern(tv->field)); |
| | 1247 | rfield = SYM2RSYM(tv->field); |
| 1243 | 1248 | |
| 1244 | 1249 | rterms = rb_ary_new2(t_cnt); |
| … |
… |
|
| 1432 | 1437 | } else { |
| 1433 | 1438 | Document *doc = (Document *)arg; |
| 1434 | | char *field; |
| | 1439 | Symbol field = frb_field(key); |
| 1435 | 1440 | VALUE val; |
| 1436 | 1441 | 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 | | } |
| 1450 | 1442 | if (NULL == (df = doc_get_field(doc, field))) { |
| 1451 | 1443 | df = df_new(field); |
| … |
… |
|
| 1497 | 1489 | { |
| 1498 | 1490 | int i; |
| 1499 | | df = df_new("content"); |
| | 1491 | df = df_new(fsym_content); |
| 1500 | 1492 | df->destroy_data = true; |
| 1501 | 1493 | for (i = 0; i < RARRAY(rdoc)->len; i++) { |
| … |
… |
|
| 1507 | 1499 | break; |
| 1508 | 1500 | 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))); |
| 1510 | 1502 | doc_add_field(doc, df); |
| 1511 | 1503 | break; |
| 1512 | 1504 | 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), |
| 1514 | 1506 | RSTRING(rdoc)->len); |
| 1515 | 1507 | doc_add_field(doc, df); |
| … |
… |
|
| 1517 | 1509 | default: |
| 1518 | 1510 | 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), |
| 1520 | 1512 | RSTRING(val)->len); |
| 1521 | 1513 | df->destroy_data = true; |
| … |
… |
|
| 1988 | 1980 | { |
| 1989 | 1981 | 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)); |
| 2006 | 1986 | } |
| 2007 | 1987 | |
| … |
… |
|
| 2033 | 2013 | for (i = 0; i < lazy_doc->size; i++) { |
| 2034 | 2014 | 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); |
| 2036 | 2016 | } |
| 2037 | 2017 | return self; |
| … |
… |
|
| 2052 | 2032 | |
| 2053 | 2033 | 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); |
| 2055 | 2035 | RARRAY(rfields)->len++; |
| 2056 | 2036 | } |
| … |
… |
|
| 2191 | 2171 | FieldInfo *fi = fis->fields[i]; |
| 2192 | 2172 | rb_hash_aset(rfield_num_map, |
| 2193 | | ID2SYM(rb_intern(fi->name)), |
| | 2173 | SYM2RSYM(fi->name), |
| 2194 | 2174 | INT2FIX(fi->number)); |
| 2195 | 2175 | } |
| … |
… |
|
| 2660 | 2640 | int i; |
| 2661 | 2641 | 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)); |
| 2663 | 2643 | } |
| 2664 | 2644 | return rfield_names; |
| … |
… |
|
| 2696 | 2676 | for (i = 0; i < fis->size; i++) { |
| 2697 | 2677 | 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)); |
| 2699 | 2679 | } |
| 2700 | 2680 | return rfield_names; |
| … |
… |
|
| 3486 | 3466 | sym_analyzer = ID2SYM(rb_intern("analyzer")); |
| 3487 | 3467 | sym_close_dir = ID2SYM(rb_intern("close_dir")); |
| | 3468 | fsym_content = I("content"); |
| 3488 | 3469 | |
| 3489 | 3470 | Init_TermVector(); |
-
|
r294d6f
|
r0a55ed
|
|
| 1 | | #include "intern.h" |
| | 1 | #include "symbol.h" |
| 2 | 2 | #include "ferret.h" |
| 3 | 3 | #include "search.h" |
-
|
r6a5a9e
|
r0a55ed
|
|
| 127 | 127 | static VALUE sym_ellipsis; |
| 128 | 128 | |
| | 129 | static Symbol fsym_id; |
| | 130 | |
| 129 | 131 | extern VALUE cIndexReader; |
| 130 | 132 | extern void frb_ir_free(void *p); |
| … |
… |
|
| 196 | 198 | int p = 0; |
| 197 | 199 | char *str = ALLOC_N(char, len * 64 + 100); |
| 198 | | char *field = "id"; |
| | 200 | Symbol field = fsym_id; |
| 199 | 201 | VALUE rstr; |
| 200 | 202 | |
| … |
… |
|
| 250 | 252 | * between fields. Add 100 for '[', ']' and good safety. |
| 251 | 253 | */ |
| 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; |
| 253 | 255 | } |
| 254 | 256 | |
| … |
… |
|
| 263 | 265 | if (i) *(s++) = ','; |
| 264 | 266 | *(s++) = '"'; |
| 265 | | l = strlen(f->name); |
| | 267 | l = sym_len(f->name); |
| 266 | 268 | memcpy(s, f->name, l); |
| 267 | 269 | s += l; |
| … |
… |
|
| 401 | 403 | GET_Q(); |
| 402 | 404 | VALUE rstr, rfield; |
| 403 | | char *str, *field = ""; |
| | 405 | char *str; |
| | 406 | Symbol field = NULL; |
| 404 | 407 | if (rb_scan_args(argc, argv, "01", &rfield)) { |
| 405 | 408 | field = frb_field(rfield); |
| … |
… |
|
| 597 | 600 | frb_tq_init(VALUE self, VALUE rfield, VALUE rterm) |
| 598 | 601 | { |
| 599 | | char *field = frb_field(rfield); |
| | 602 | Symbol field = frb_field(rfield); |
| 600 | 603 | char *term = rs2s(rb_obj_as_string(rterm)); |
| 601 | 604 | Query *q = tq_new(field, term); |
| … |
… |
|
| 714 | 717 | } |
| 715 | 718 | |
| 716 | | typedef Query *(*mtq_maker_ft)(const char *field, const char *term); |
| | 719 | typedef Query *(*mtq_maker_ft)(Symbol field, const char *term); |
| 717 | 720 | |
| 718 | 721 | static int |
| … |
… |
|
| 913 | 916 | int len; |
| 914 | 917 | GET_BC(); |
| 915 | | qstr = bc->query->to_s(bc->query, ""); |
| | 918 | qstr = bc->query->to_s(bc->query, NULL); |
| 916 | 919 | switch (bc->occur) { |
| 917 | 920 | case BC_SHOULD: |
| … |
… |
|
| 2175 | 2178 | int type = SORT_TYPE_AUTO; |
| 2176 | 2179 | int is_reverse = false; |
| 2177 | | char *field; |
| | 2180 | Symbol field; |
| 2178 | 2181 | |
| 2179 | 2182 | if (rb_scan_args(argc, argv, "11", &rfield, &roptions) == 2) { |
| … |
… |
|
| 2192 | 2195 | |
| 2193 | 2196 | 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; |
| 2196 | 2199 | } |
| 2197 | 2200 | |
| … |
… |
|
| 2227 | 2230 | { |
| 2228 | 2231 | GET_SF(); |
| 2229 | | return sf->field ? ID2SYM(rb_intern(sf->field)) : Qnil; |
| | 2232 | return sf->field ? SYM2RSYM(sf->field) : Qnil; |
| 2230 | 2233 | } |
| 2231 | 2234 | |
| … |
… |
|
| 2349 | 2352 | sf = sort_field_doc_new(reverse); |
| 2350 | 2353 | } else { |
| 2351 | | sf = sort_field_auto_new(s, reverse); |
| | 2354 | sf = sort_field_auto_new(I(s), reverse); |
| 2352 | 2355 | } |
| 2353 | 2356 | frb_get_sf(sf); |
| … |
… |
|
| 2369 | 2372 | break; |
| 2370 | 2373 | 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); |
| 2373 | 2375 | /* need to give it a ruby object so it'll be freed when the |
| 2374 | 2376 | * sort is garbage collected */ |
| … |
… |
|
| 2616 | 2618 | } |
| 2617 | 2619 | 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; |
| 2622 | 2624 | CWF(filter)->rfilter = rval; |
| 2623 | 2625 | } |
| … |
… |
|
| 4418 | 4420 | mSearch = rb_define_module_under(mFerret, "Search"); |
| 4419 | 4421 | |
| | 4422 | fsym_id = I("id"); |
| | 4423 | |
| 4420 | 4424 | Init_Hit(); |
| 4421 | 4425 | Init_TopDocs(); |