isomorfeus-ferret 0.13.8 → 0.13.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/ext/isomorfeus_ferret_ext/bm_store.c +3 -3
  3. data/ext/isomorfeus_ferret_ext/bzlib.h +83 -82
  4. data/ext/isomorfeus_ferret_ext/frb_index.c +17 -23
  5. data/ext/isomorfeus_ferret_ext/frb_search.c +1 -4
  6. data/ext/isomorfeus_ferret_ext/frb_store.c +32 -34
  7. data/ext/isomorfeus_ferret_ext/frt_analysis.c +4 -4
  8. data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
  9. data/ext/isomorfeus_ferret_ext/frt_bitvector.c +1 -1
  10. data/ext/isomorfeus_ferret_ext/frt_bitvector.h +1 -1
  11. data/ext/isomorfeus_ferret_ext/frt_compound_io.c +41 -66
  12. data/ext/isomorfeus_ferret_ext/frt_config.h +8 -0
  13. data/ext/isomorfeus_ferret_ext/frt_except.c +1 -0
  14. data/ext/isomorfeus_ferret_ext/frt_filter.c +2 -4
  15. data/ext/isomorfeus_ferret_ext/frt_fs_store.c +24 -19
  16. data/ext/isomorfeus_ferret_ext/frt_global.c +6 -4
  17. data/ext/isomorfeus_ferret_ext/frt_global.h +1 -1
  18. data/ext/isomorfeus_ferret_ext/frt_hash.c +40 -48
  19. data/ext/isomorfeus_ferret_ext/frt_hash.h +14 -16
  20. data/ext/isomorfeus_ferret_ext/frt_hashset.c +5 -5
  21. data/ext/isomorfeus_ferret_ext/frt_ind.c +2 -3
  22. data/ext/isomorfeus_ferret_ext/frt_index.c +148 -219
  23. data/ext/isomorfeus_ferret_ext/frt_index.h +31 -31
  24. data/ext/isomorfeus_ferret_ext/frt_lang.c +1 -4
  25. data/ext/isomorfeus_ferret_ext/frt_multimapper.c +8 -9
  26. data/ext/isomorfeus_ferret_ext/frt_multimapper.h +1 -1
  27. data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +6 -6
  28. data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -3
  29. data/ext/isomorfeus_ferret_ext/frt_q_parser.c +1743 -1742
  30. data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +1 -2
  31. data/ext/isomorfeus_ferret_ext/frt_q_span.c +11 -10
  32. data/ext/isomorfeus_ferret_ext/frt_ram_store.c +24 -40
  33. data/ext/isomorfeus_ferret_ext/frt_search.c +29 -28
  34. data/ext/isomorfeus_ferret_ext/frt_search.h +18 -19
  35. data/ext/isomorfeus_ferret_ext/frt_store.c +47 -40
  36. data/ext/isomorfeus_ferret_ext/frt_store.h +46 -48
  37. data/ext/isomorfeus_ferret_ext/frt_threading.h +12 -5
  38. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +4 -3
  39. data/ext/isomorfeus_ferret_ext/test_1710.c +1 -2
  40. data/ext/isomorfeus_ferret_ext/test_compound_io.c +8 -8
  41. data/ext/isomorfeus_ferret_ext/test_fields.c +7 -7
  42. data/ext/isomorfeus_ferret_ext/test_file_deleter.c +1 -1
  43. data/ext/isomorfeus_ferret_ext/test_filter.c +4 -3
  44. data/ext/isomorfeus_ferret_ext/test_fs_store.c +1 -1
  45. data/ext/isomorfeus_ferret_ext/test_highlighter.c +3 -1
  46. data/ext/isomorfeus_ferret_ext/test_index.c +61 -61
  47. data/ext/isomorfeus_ferret_ext/test_q_const_score.c +2 -1
  48. data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -2
  49. data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +3 -1
  50. data/ext/isomorfeus_ferret_ext/test_q_span.c +8 -1
  51. data/ext/isomorfeus_ferret_ext/test_ram_store.c +4 -4
  52. data/ext/isomorfeus_ferret_ext/test_search.c +9 -4
  53. data/ext/isomorfeus_ferret_ext/test_segments.c +4 -3
  54. data/ext/isomorfeus_ferret_ext/test_sort.c +17 -9
  55. data/ext/isomorfeus_ferret_ext/test_term.c +4 -2
  56. data/ext/isomorfeus_ferret_ext/test_term_vectors.c +2 -2
  57. data/ext/isomorfeus_ferret_ext/test_threading.c +5 -4
  58. data/lib/isomorfeus/ferret/index/index.rb +8 -3
  59. data/lib/isomorfeus/ferret/version.rb +1 -1
  60. metadata +16 -2
@@ -100,7 +100,7 @@ typedef struct FrtFieldInfo {
100
100
  float boost;
101
101
  unsigned int bits;
102
102
  int number;
103
- int ref_cnt;
103
+ _Atomic unsigned int ref_cnt;
104
104
  VALUE rfi;
105
105
  } FrtFieldInfo;
106
106
 
@@ -133,7 +133,7 @@ extern void frt_fi_deref(FrtFieldInfo *fi);
133
133
  #define FIELD_INFOS_INIT_CAPA 4
134
134
  /* carry changes over to dummy_fis in test/test_segments.c */
135
135
  typedef struct FrtFieldInfos {
136
- FrtStoreValue store;
136
+ FrtStoreValue store_val;
137
137
  FrtCompressionType compression;
138
138
  FrtIndexValue index;
139
139
  FrtTermVectorValue term_vector;
@@ -141,7 +141,7 @@ typedef struct FrtFieldInfos {
141
141
  int capa;
142
142
  FrtFieldInfo **fields;
143
143
  FrtHash *field_dict;
144
- int ref_cnt;
144
+ _Atomic unsigned int ref_cnt;
145
145
  VALUE rfis;
146
146
  } FrtFieldInfos;
147
147
 
@@ -167,18 +167,18 @@ extern void frt_fis_deref(FrtFieldInfos *fis);
167
167
  #define FRT_SEGMENTS_FILE_NAME "segments"
168
168
 
169
169
  typedef struct FrtSegmentInfo {
170
- int ref_cnt;
171
- char *name;
172
- FrtStore *store;
173
- int doc_cnt;
174
- int del_gen;
175
- int *norm_gens;
176
- int norm_gens_size;
177
- bool use_compound_file;
170
+ _Atomic unsigned int ref_cnt;
171
+ char *name;
172
+ FrtStore *store;
173
+ int doc_cnt;
174
+ int del_gen;
175
+ int *norm_gens;
176
+ int norm_gens_size;
177
+ bool use_compound_file;
178
178
  } FrtSegmentInfo;
179
179
 
180
180
  extern FrtSegmentInfo *frt_si_new(char *name, int doc_cnt, FrtStore *store);
181
- extern void frt_si_deref(FrtSegmentInfo *si);
181
+ extern void frt_si_close(FrtSegmentInfo *si);
182
182
  extern bool frt_si_has_deletions(FrtSegmentInfo *si);
183
183
  extern bool frt_si_has_separate_norms(FrtSegmentInfo *si);
184
184
  extern void frt_si_advance_norm_gen(FrtSegmentInfo *si, int field_num);
@@ -224,9 +224,9 @@ extern void frt_sis_put(FrtSegmentInfos *sis, FILE *stream);
224
224
 
225
225
  typedef struct FrtTermInfo {
226
226
  int doc_freq;
227
- off_t frq_ptr;
228
- off_t prx_ptr;
229
- off_t skip_offset;
227
+ frt_off_t frq_ptr;
228
+ frt_off_t prx_ptr;
229
+ frt_off_t skip_offset;
230
230
  } FrtTermInfo;
231
231
 
232
232
  #define frt_ti_set(ti, mdf, mfp, mpp, mso) do {\
@@ -265,14 +265,14 @@ FrtTermInfo *frt_te_get_ti(struct FrtTermEnum *te);
265
265
  /* FrtSegmentTermIndex */
266
266
 
267
267
  typedef struct FrtSegmentTermIndex {
268
- off_t index_ptr;
269
- off_t ptr;
268
+ frt_off_t index_ptr;
269
+ frt_off_t ptr;
270
270
  int index_cnt;
271
271
  int size;
272
272
  char **index_terms;
273
273
  int *index_term_lens;
274
274
  FrtTermInfo *index_term_infos;
275
- off_t *index_ptrs;
275
+ frt_off_t *index_ptrs;
276
276
  } FrtSegmentTermIndex;
277
277
 
278
278
  /* FrtSegmentFieldIndex */
@@ -281,7 +281,7 @@ typedef struct FrtSegmentFieldIndex {
281
281
  frt_mutex_t mutex;
282
282
  int skip_interval;
283
283
  int index_interval;
284
- off_t index_ptr;
284
+ frt_off_t index_ptr;
285
285
  FrtTermEnum *index_te;
286
286
  FrtHash *field_dict;
287
287
  } FrtSegmentFieldIndex;
@@ -349,7 +349,7 @@ typedef struct FrtTermInfosWriter {
349
349
  int field_count;
350
350
  int index_interval;
351
351
  int skip_interval;
352
- off_t last_index_ptr;
352
+ frt_off_t last_index_ptr;
353
353
  FrtOutStream *tfx_out;
354
354
  FrtTermWriter *tix_writer;
355
355
  FrtTermWriter *tis_writer;
@@ -385,7 +385,7 @@ struct FrtTermDocEnum {
385
385
  typedef struct FrtSegmentTermDocEnum FrtSegmentTermDocEnum;
386
386
  struct FrtSegmentTermDocEnum {
387
387
  FrtTermDocEnum tde;
388
- void (*seek_prox)(FrtSegmentTermDocEnum *stde, off_t prx_ptr);
388
+ void (*seek_prox)(FrtSegmentTermDocEnum *stde, frt_off_t prx_ptr);
389
389
  void (*skip_prox)(FrtSegmentTermDocEnum *stde);
390
390
  FrtTermInfosReader *tir;
391
391
  FrtInStream *frq_in;
@@ -402,9 +402,9 @@ struct FrtSegmentTermDocEnum {
402
402
  int skip_doc;
403
403
  int prx_cnt;
404
404
  int position;
405
- off_t frq_ptr;
406
- off_t prx_ptr;
407
- off_t skip_ptr;
405
+ frt_off_t frq_ptr;
406
+ frt_off_t prx_ptr;
407
+ frt_off_t skip_ptr;
408
408
  bool have_skipped : 1;
409
409
  };
410
410
 
@@ -429,8 +429,8 @@ extern FrtTermDocEnum *frt_mtdpe_new(FrtIndexReader *ir, int field_num, char **t
429
429
  ****************************************************************************/
430
430
 
431
431
  typedef struct FrtOffset {
432
- off_t start;
433
- off_t end;
432
+ frt_off_t start;
433
+ frt_off_t end;
434
434
  } FrtOffset;
435
435
 
436
436
  /****************************************************************************
@@ -529,7 +529,7 @@ extern FrtTVTerm *frt_tv_get_tv_term(FrtTermVector *tv, const char *term);
529
529
 
530
530
  /* * * FrtLazyDocField * * */
531
531
  typedef struct FrtLazyDocFieldData {
532
- off_t start;
532
+ frt_off_t start;
533
533
  int length;
534
534
  rb_encoding *encoding;
535
535
  FrtCompressionType compression; /* as stored */
@@ -595,7 +595,7 @@ typedef struct FrtFieldsWriter {
595
595
  FrtOutStream *fdx_out;
596
596
  FrtOutStream *buffer;
597
597
  FrtTVField *tv_fields;
598
- off_t start_ptr;
598
+ frt_off_t start_ptr;
599
599
  } FrtFieldsWriter;
600
600
 
601
601
  extern FrtFieldsWriter *frt_fw_open(FrtStore *store, const char *segment, FrtFieldInfos *fis);
@@ -671,7 +671,7 @@ struct FrtIndexReader {
671
671
  bool (*is_latest_i)(FrtIndexReader *ir);
672
672
  void (*commit_i)(FrtIndexReader *ir);
673
673
  void (*close_i)(FrtIndexReader *ir);
674
- int ref_cnt;
674
+ _Atomic unsigned int ref_cnt;
675
675
  FrtDeleter *deleter;
676
676
  FrtStore *store;
677
677
  FrtLock *write_lock;
@@ -846,8 +846,8 @@ extern void frt_iw_add_readers(FrtIndexWriter *iw, FrtIndexReader **readers, con
846
846
  #define FRT_CW_INIT_CAPA 16
847
847
  typedef struct FrtCWFileEntry {
848
848
  char *name;
849
- off_t dir_offset;
850
- off_t data_offset;
849
+ frt_off_t dir_offset;
850
+ frt_off_t data_offset;
851
851
  } FrtCWFileEntry;
852
852
 
853
853
  typedef struct FrtCompoundWriter {
@@ -43,10 +43,7 @@ void *frt_erealloc(void *ptr, size_t size)
43
43
  return p;
44
44
  }
45
45
 
46
-
47
- struct timeval rb_time_interval _((VALUE));
48
-
49
- extern void frt_micro_sleep(const int micro_seconds) {
46
+ void frt_micro_sleep(const int micro_seconds) {
50
47
  rb_thread_wait_for(rb_time_interval(rb_float_new((double)micro_seconds/1000000.0)));
51
48
  }
52
49
 
@@ -328,19 +328,18 @@ char *frt_mulmap_dynamic_map(FrtMultiMapper *self, char *from)
328
328
  return to;
329
329
  }
330
330
 
331
- void frt_mulmap_destroy(FrtMultiMapper *self)
332
- {
333
- if (--(self->ref_cnt) <= 0) {
331
+ void frt_mulmap_destroy(FrtMultiMapper *mulm) {
332
+ if (FRT_DEREF(mulm) <= 0) {
334
333
  int i;
335
- mulmap_free_dstates(self);
336
- for (i = self->size - 1; i >= 0; i--) {
337
- FrtMapping *mapping = self->mappings[i];
334
+ mulmap_free_dstates(mulm);
335
+ for (i = mulm->size - 1; i >= 0; i--) {
336
+ FrtMapping *mapping = mulm->mappings[i];
338
337
  free(mapping->pattern);
339
338
  free(mapping->replacement);
340
339
  free(mapping);
341
340
  }
342
- free(self->mappings);
343
- free(self->dstates);
344
- free(self);
341
+ free(mulm->mappings);
342
+ free(mulm->dstates);
343
+ free(mulm);
345
344
  }
346
345
  }
@@ -38,7 +38,7 @@ typedef struct FrtMultiMapper
38
38
  FrtState **nstates;
39
39
  int nsize;
40
40
  int *next_states;
41
- int ref_cnt;
41
+ _Atomic unsigned int ref_cnt;
42
42
  } FrtMultiMapper;
43
43
 
44
44
  extern FrtMultiMapper *frt_mulmap_new();
@@ -1264,10 +1264,10 @@ void frt_bc_set_occur(FrtBooleanClause *self, FrtBCType occur) {
1264
1264
  }
1265
1265
  }
1266
1266
 
1267
- void frt_bc_deref(FrtBooleanClause *self) {
1268
- if (--self->ref_cnt <= 0) {
1269
- frt_q_deref(self->query);
1270
- free(self);
1267
+ void frt_bc_deref(FrtBooleanClause *bc) {
1268
+ if (FRT_DEREF(bc) == 0) {
1269
+ frt_q_deref(bc->query);
1270
+ free(bc);
1271
1271
  }
1272
1272
  }
1273
1273
 
@@ -1345,7 +1345,7 @@ static FrtQuery *bq_rewrite(FrtQuery *self, FrtIndexReader *ir) {
1345
1345
  }
1346
1346
  }
1347
1347
 
1348
- self->ref_cnt++;
1348
+ FRT_REF(self);
1349
1349
  /* replace each clause's query with its rewritten query */
1350
1350
  for (i = 0; i < clause_cnt; i++) {
1351
1351
  FrtBooleanClause *clause = BQ(self)->clauses[i];
@@ -1364,7 +1364,7 @@ static FrtQuery *bq_rewrite(FrtQuery *self, FrtIndexReader *ir) {
1364
1364
  for (j = 0; j < clause_cnt; j++) {
1365
1365
  FRT_REF(BQ(self)->clauses[j]);
1366
1366
  }
1367
- self->ref_cnt--;
1367
+ FRT_DEREF(self);
1368
1368
  self = new_self;
1369
1369
  self->ref_cnt = 1;
1370
1370
  rewritten = true;
@@ -45,9 +45,15 @@ static FrtExplanation *masc_explain(FrtScorer *self, int doc_num)
45
45
  return frt_expl_new(1.0, "MatchAllScorer");
46
46
  }
47
47
 
48
+ void masc_destroy_i(FrtScorer *self) {
49
+ frt_ir_close(MASc(self)->ir);
50
+ frt_scorer_destroy_i(self);
51
+ }
52
+
48
53
  static FrtScorer *masc_new(FrtWeight *weight, FrtIndexReader *ir) {
49
- FrtScorer *self = frt_scorer_new(MatchAllScorer, weight->similarity);
54
+ FrtScorer *self = frt_scorer_new(MatchAllScorer, weight->similarity);
50
55
  MASc(self)->ir = ir;
56
+ FRT_REF(ir);
51
57
  MASc(self)->max_doc = ir->max_doc(ir);
52
58
  MASc(self)->score = weight->value;
53
59
  self->doc = -1;
@@ -55,7 +61,7 @@ static FrtScorer *masc_new(FrtWeight *weight, FrtIndexReader *ir) {
55
61
  self->next = &masc_next;
56
62
  self->skip_to = &masc_skip_to;
57
63
  self->explain = &masc_explain;
58
- self->destroy = &frt_scorer_destroy_i;
64
+ self->destroy = &masc_destroy_i;
59
65
 
60
66
  return self;
61
67
  }
@@ -142,4 +148,3 @@ FrtQuery *frt_maq_new(void) {
142
148
  FrtQuery *self = frt_maq_alloc();
143
149
  return frt_maq_init(self);
144
150
  }
145
-