isomorfeus-ferret 0.17.2 → 0.17.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. data/ext/isomorfeus_ferret_ext/benchmark.c +9 -20
  3. data/ext/isomorfeus_ferret_ext/benchmarks_all.h +1 -2
  4. data/ext/isomorfeus_ferret_ext/bm_hash.c +1 -2
  5. data/ext/isomorfeus_ferret_ext/brotli_dec_decode.c +4 -2
  6. data/ext/isomorfeus_ferret_ext/brotli_enc_encode.c +3 -2
  7. data/ext/isomorfeus_ferret_ext/frb_analysis.c +4 -5
  8. data/ext/isomorfeus_ferret_ext/frb_field_info.c +3 -4
  9. data/ext/isomorfeus_ferret_ext/frb_index.c +161 -187
  10. data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +14 -16
  11. data/ext/isomorfeus_ferret_ext/frb_search.c +77 -69
  12. data/ext/isomorfeus_ferret_ext/frb_store.c +27 -13
  13. data/ext/isomorfeus_ferret_ext/frb_utils.c +3 -6
  14. data/ext/isomorfeus_ferret_ext/frt_analysis.c +39 -46
  15. data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
  16. data/ext/isomorfeus_ferret_ext/frt_array.c +11 -22
  17. data/ext/isomorfeus_ferret_ext/frt_bitvector.h +3 -6
  18. data/ext/isomorfeus_ferret_ext/frt_doc_field.c +87 -0
  19. data/ext/isomorfeus_ferret_ext/frt_doc_field.h +26 -0
  20. data/ext/isomorfeus_ferret_ext/frt_document.c +4 -97
  21. data/ext/isomorfeus_ferret_ext/frt_document.h +5 -33
  22. data/ext/isomorfeus_ferret_ext/frt_except.c +8 -6
  23. data/ext/isomorfeus_ferret_ext/frt_except.h +1 -2
  24. data/ext/isomorfeus_ferret_ext/frt_field_index.c +14 -33
  25. data/ext/isomorfeus_ferret_ext/frt_field_index.h +0 -6
  26. data/ext/isomorfeus_ferret_ext/frt_field_info.c +69 -0
  27. data/ext/isomorfeus_ferret_ext/frt_field_info.h +49 -0
  28. data/ext/isomorfeus_ferret_ext/frt_field_infos.c +196 -0
  29. data/ext/isomorfeus_ferret_ext/frt_field_infos.h +35 -0
  30. data/ext/isomorfeus_ferret_ext/frt_filter.c +2 -2
  31. data/ext/isomorfeus_ferret_ext/frt_global.c +10 -4
  32. data/ext/isomorfeus_ferret_ext/frt_global.h +11 -15
  33. data/ext/isomorfeus_ferret_ext/frt_hash.c +8 -8
  34. data/ext/isomorfeus_ferret_ext/frt_hash.h +1 -2
  35. data/ext/isomorfeus_ferret_ext/frt_hashset.c +20 -40
  36. data/ext/isomorfeus_ferret_ext/frt_hashset.h +1 -2
  37. data/ext/isomorfeus_ferret_ext/frt_helper.c +7 -15
  38. data/ext/isomorfeus_ferret_ext/frt_in_stream.c +35 -45
  39. data/ext/isomorfeus_ferret_ext/frt_in_stream.h +3 -2
  40. data/ext/isomorfeus_ferret_ext/frt_ind.c +21 -39
  41. data/ext/isomorfeus_ferret_ext/frt_ind.h +1 -1
  42. data/ext/isomorfeus_ferret_ext/frt_index.c +334 -848
  43. data/ext/isomorfeus_ferret_ext/frt_index.h +4 -105
  44. data/ext/isomorfeus_ferret_ext/frt_lang.c +5 -10
  45. data/ext/isomorfeus_ferret_ext/frt_lazy_doc.c +3 -3
  46. data/ext/isomorfeus_ferret_ext/frt_lazy_doc.h +1 -1
  47. data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.c +18 -25
  48. data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.h +5 -5
  49. data/ext/isomorfeus_ferret_ext/frt_mdbx_store.c +102 -70
  50. data/ext/isomorfeus_ferret_ext/frt_mempool.c +8 -16
  51. data/ext/isomorfeus_ferret_ext/frt_multimapper.c +23 -46
  52. data/ext/isomorfeus_ferret_ext/frt_multimapper.h +4 -8
  53. data/ext/isomorfeus_ferret_ext/frt_out_stream.c +31 -43
  54. data/ext/isomorfeus_ferret_ext/frt_out_stream.h +2 -2
  55. data/ext/isomorfeus_ferret_ext/frt_posh.c +6 -819
  56. data/ext/isomorfeus_ferret_ext/frt_posh.h +0 -57
  57. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.c +11 -22
  58. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.h +1 -2
  59. data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +131 -217
  60. data/ext/isomorfeus_ferret_ext/frt_q_const_score.c +2 -2
  61. data/ext/isomorfeus_ferret_ext/frt_q_filtered_query.c +4 -4
  62. data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +18 -26
  63. data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +27 -28
  64. data/ext/isomorfeus_ferret_ext/frt_q_parser.c +49 -98
  65. data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +64 -116
  66. data/ext/isomorfeus_ferret_ext/frt_q_range.c +8 -14
  67. data/ext/isomorfeus_ferret_ext/frt_q_span.c +251 -365
  68. data/ext/isomorfeus_ferret_ext/frt_q_term.c +9 -9
  69. data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +1 -2
  70. data/ext/isomorfeus_ferret_ext/frt_ram_store.c +134 -85
  71. data/ext/isomorfeus_ferret_ext/frt_search.c +109 -191
  72. data/ext/isomorfeus_ferret_ext/frt_search.h +6 -6
  73. data/ext/isomorfeus_ferret_ext/frt_similarity.c +12 -23
  74. data/ext/isomorfeus_ferret_ext/frt_similarity.h +1 -2
  75. data/ext/isomorfeus_ferret_ext/frt_sort.c +20 -20
  76. data/ext/isomorfeus_ferret_ext/frt_store.c +13 -25
  77. data/ext/isomorfeus_ferret_ext/frt_store.h +86 -52
  78. data/ext/isomorfeus_ferret_ext/frt_term_vectors.c +8 -16
  79. data/ext/isomorfeus_ferret_ext/frt_win32.h +5 -10
  80. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +12 -11
  81. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +11 -13
  82. data/ext/isomorfeus_ferret_ext/lz4.c +422 -195
  83. data/ext/isomorfeus_ferret_ext/lz4.h +114 -46
  84. data/ext/isomorfeus_ferret_ext/lz4frame.c +421 -242
  85. data/ext/isomorfeus_ferret_ext/lz4frame.h +122 -53
  86. data/ext/isomorfeus_ferret_ext/lz4hc.c +127 -111
  87. data/ext/isomorfeus_ferret_ext/lz4hc.h +14 -14
  88. data/ext/isomorfeus_ferret_ext/lz4xxhash.h +1 -1
  89. data/ext/isomorfeus_ferret_ext/mdbx.c +3762 -2526
  90. data/ext/isomorfeus_ferret_ext/mdbx.h +115 -70
  91. data/ext/isomorfeus_ferret_ext/test.c +41 -88
  92. data/ext/isomorfeus_ferret_ext/test.h +3 -6
  93. data/ext/isomorfeus_ferret_ext/test_1710.c +11 -13
  94. data/ext/isomorfeus_ferret_ext/test_analysis.c +32 -64
  95. data/ext/isomorfeus_ferret_ext/test_array.c +6 -12
  96. data/ext/isomorfeus_ferret_ext/test_bitvector.c +12 -24
  97. data/ext/isomorfeus_ferret_ext/test_document.c +23 -33
  98. data/ext/isomorfeus_ferret_ext/test_except.c +10 -21
  99. data/ext/isomorfeus_ferret_ext/test_fields.c +62 -68
  100. data/ext/isomorfeus_ferret_ext/test_file_deleter.c +16 -25
  101. data/ext/isomorfeus_ferret_ext/test_filter.c +22 -33
  102. data/ext/isomorfeus_ferret_ext/test_global.c +14 -29
  103. data/ext/isomorfeus_ferret_ext/test_hash.c +19 -38
  104. data/ext/isomorfeus_ferret_ext/test_hashset.c +8 -16
  105. data/ext/isomorfeus_ferret_ext/test_helper.c +4 -8
  106. data/ext/isomorfeus_ferret_ext/test_highlighter.c +16 -28
  107. data/ext/isomorfeus_ferret_ext/test_index.c +307 -519
  108. data/ext/isomorfeus_ferret_ext/test_lang.c +7 -14
  109. data/ext/isomorfeus_ferret_ext/test_mdbx_store.c +2 -5
  110. data/ext/isomorfeus_ferret_ext/test_mempool.c +5 -10
  111. data/ext/isomorfeus_ferret_ext/test_multimapper.c +3 -6
  112. data/ext/isomorfeus_ferret_ext/test_priorityqueue.c +9 -18
  113. data/ext/isomorfeus_ferret_ext/test_q_const_score.c +4 -6
  114. data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -4
  115. data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +9 -15
  116. data/ext/isomorfeus_ferret_ext/test_q_parser.c +8 -16
  117. data/ext/isomorfeus_ferret_ext/test_q_span.c +19 -35
  118. data/ext/isomorfeus_ferret_ext/test_ram_store.c +14 -13
  119. data/ext/isomorfeus_ferret_ext/test_search.c +66 -115
  120. data/ext/isomorfeus_ferret_ext/test_segments.c +8 -13
  121. data/ext/isomorfeus_ferret_ext/test_similarity.c +2 -4
  122. data/ext/isomorfeus_ferret_ext/test_sort.c +17 -27
  123. data/ext/isomorfeus_ferret_ext/test_store.c +96 -115
  124. data/ext/isomorfeus_ferret_ext/test_term.c +9 -15
  125. data/ext/isomorfeus_ferret_ext/test_term_vectors.c +9 -14
  126. data/ext/isomorfeus_ferret_ext/test_test.c +4 -8
  127. data/ext/isomorfeus_ferret_ext/test_threading.c +15 -21
  128. data/ext/isomorfeus_ferret_ext/testhelper.c +11 -21
  129. data/ext/isomorfeus_ferret_ext/testhelper.h +1 -1
  130. data/ext/isomorfeus_ferret_ext/tests_all.h +1 -2
  131. data/lib/isomorfeus/ferret/index/index.rb +8 -8
  132. data/lib/isomorfeus/ferret/version.rb +1 -1
  133. metadata +32 -6
@@ -44,13 +44,12 @@ static char *ste_next(FrtTermEnum *te);
44
44
 
45
45
  /* *** Must be three characters *** */
46
46
  static const char *INDEX_EXTENSIONS[] = {
47
- "frq", "prx", "fdx", "fdt", "tfx", "tix", "tis", "del", "gen", "cfs"
47
+ "frq", "prx", "fdx", "fdt", "tfx", "tix", "tis", "del", "gen"
48
48
  };
49
49
 
50
50
  static const char BASE36_DIGITMAP[] = "0123456789abcdefghijklmnopqrstuvwxyz";
51
51
 
52
- static char *u64_to_str36(char *buf, int buf_size, frt_u64 u)
53
- {
52
+ static char *u64_to_str36(char *buf, int buf_size, frt_u64 u) {
54
53
  int i = buf_size - 1;
55
54
  buf[i] = '\0';
56
55
  for (i--; i >= 0; i--) {
@@ -67,17 +66,14 @@ static char *u64_to_str36(char *buf, int buf_size, frt_u64 u)
67
66
  return buf + i;
68
67
  }
69
68
 
70
- static frt_u64 str36_to_u64(char *p)
71
- {
69
+ static frt_u64 str36_to_u64(char *p) {
72
70
  frt_u64 u = 0;
73
71
  while (true) {
74
72
  if ('0' <= *p && '9' >= *p) {
75
73
  u = u * 36 + *p - '0';
76
- }
77
- else if ('a' <= *p && 'z' >= *p) {
74
+ } else if ('a' <= *p && 'z' >= *p) {
78
75
  u = u * 36 + *p - 'a' + 10;
79
- }
80
- else {
76
+ } else {
81
77
  break;
82
78
  }
83
79
  p++;
@@ -134,12 +130,10 @@ static char *fn_for_gen_field(char *buf,
134
130
  const char *base,
135
131
  const char *ext,
136
132
  frt_i64 gen,
137
- int field_num)
138
- {
133
+ int field_num) {
139
134
  if (-1 == gen) {
140
135
  return NULL;
141
- }
142
- else {
136
+ } else {
143
137
  char b[FRT_SEGMENT_NAME_MAX_LENGTH];
144
138
  sprintf(buf, "%s_%s.%s%d",
145
139
  base,
@@ -156,18 +150,15 @@ static char *fn_for_gen_field(char *buf,
156
150
  *
157
151
  ***************************************************************************/
158
152
 
159
- static unsigned long co_hash(const void *key)
160
- {
161
- return (unsigned long)key;
153
+ static unsigned long co_hash(const void *key) {
154
+ return (unsigned long)(uintptr_t)key;
162
155
  }
163
156
 
164
- static int co_eq(const void *key1, const void *key2)
165
- {
157
+ static int co_eq(const void *key1, const void *key2) {
166
158
  return (key1 == key2);
167
159
  }
168
160
 
169
- static void co_destroy(FrtCacheObject *self)
170
- {
161
+ static void co_destroy(FrtCacheObject *self) {
171
162
  frt_h_rem(self->ref_tab1, self->ref2, false);
172
163
  frt_h_rem(self->ref_tab2, self->ref1, false);
173
164
  self->destroy(self->obj);
@@ -175,8 +166,7 @@ static void co_destroy(FrtCacheObject *self)
175
166
  }
176
167
 
177
168
  FrtCacheObject *frt_co_create(FrtHash *ref_tab1, FrtHash *ref_tab2,
178
- void *ref1, void *ref2, frt_free_ft destroy, void *obj)
179
- {
169
+ void *ref1, void *ref2, frt_free_ft destroy, void *obj) {
180
170
  FrtCacheObject *self = FRT_ALLOC(FrtCacheObject);
181
171
  frt_h_set(ref_tab1, ref2, self);
182
172
  frt_h_set(ref_tab2, ref1, self);
@@ -193,302 +183,13 @@ FrtHash *frt_co_hash_create(void) {
193
183
  return frt_h_new(&co_hash, &co_eq, (frt_free_ft)NULL, (frt_free_ft)&co_destroy);
194
184
  }
195
185
 
196
- /****************************************************************************
197
- *
198
- * FieldInfo
199
- *
200
- ****************************************************************************/
201
-
202
- static void fi_check_params(unsigned int bits) {
203
- if (!bits_is_indexed(bits) && bits_store_term_vector(bits)) {
204
- FRT_RAISE(FRT_ARG_ERROR, "You can't store the term vectors of an unindexed field.");
205
- }
206
- if (bits_is_compressed(bits) && !bits_is_stored(bits)) {
207
- FRT_RAISE(FRT_ARG_ERROR, "Field must be stored for compression to be useful.");
208
- }
209
- }
210
-
211
- FrtFieldInfo *frt_fi_alloc(void) {
212
- return FRT_ALLOC(FrtFieldInfo);
213
- }
214
-
215
- FrtFieldInfo *frt_fi_init(FrtFieldInfo *fi, ID name, unsigned int bits) {
216
- assert(NULL != name);
217
- fi_check_params(bits);
218
- fi->name = name;
219
- fi->boost = 1.0f;
220
- fi->bits = bits;
221
- fi->number = 0;
222
- fi->ref_cnt = 1;
223
- fi->rfi = Qnil;
224
- return fi;
225
- }
226
-
227
- FrtFieldInfo *frt_fi_new(ID name, unsigned int bits) {
228
- FrtFieldInfo *fi = frt_fi_alloc();
229
- return frt_fi_init(fi, name, bits);
230
- }
231
-
232
- void frt_fi_deref(FrtFieldInfo *fi) {
233
- if (FRT_DEREF(fi) == 0) free(fi);
234
- }
235
-
236
- FrtCompressionType frt_fi_get_compression(FrtFieldInfo *fi) {
237
- if (bits_is_compressed(fi->bits)) {
238
- if (bits_is_compressed_brotli(fi->bits)) {
239
- return FRT_COMPRESSION_BROTLI;
240
- } else if (bits_is_compressed_bz2(fi->bits)) {
241
- return FRT_COMPRESSION_BZ2;
242
- } else if (bits_is_compressed_lz4(fi->bits)) {
243
- return FRT_COMPRESSION_LZ4;
244
- } else {
245
- return FRT_COMPRESSION_BROTLI;
246
- }
247
- } else {
248
- return FRT_COMPRESSION_NONE;
249
- }
250
- }
251
-
252
- char *frt_fi_to_s(FrtFieldInfo *fi)
253
- {
254
- const char *fi_name = rb_id2name(fi->name);
255
- char *str = FRT_ALLOC_N(char, strlen(fi_name) + 200);
256
- char *s = str;
257
- s += sprintf(str, "[\"%s\":(%s%s%s%s%s%s%s%s", fi_name,
258
- bits_is_stored(fi->bits) ? "is_stored, " : "",
259
- bits_is_compressed(fi->bits) ? "is_compressed, " : "",
260
- bits_is_indexed(fi->bits) ? "is_indexed, " : "",
261
- bits_is_tokenized(fi->bits) ? "is_tokenized, " : "",
262
- bits_omit_norms(fi->bits) ? "omit_norms, " : "",
263
- bits_store_term_vector(fi->bits) ? "store_term_vector, " : "",
264
- bits_store_positions(fi->bits) ? "store_positions, " : "",
265
- bits_store_offsets(fi->bits) ? "store_offsets, " : "");
266
- s -= 2;
267
- if (*s != ',') {
268
- s += 2;
269
- }
270
-
271
- sprintf(s, ")]");
272
- return str;
273
- }
274
-
275
- /****************************************************************************
276
- *
277
- * FieldInfos
278
- *
279
- ****************************************************************************/
280
-
281
- FrtFieldInfos *frt_fis_alloc(void) {
282
- return FRT_ALLOC(FrtFieldInfos);
283
- }
284
-
285
- FrtFieldInfos *frt_fis_init(FrtFieldInfos *fis, unsigned int bits) {
286
- fi_check_params(bits);
287
- fis->field_dict = frt_h_new_ptr((frt_free_ft)&frt_fi_deref);
288
- fis->size = 0;
289
- fis->capa = FIELD_INFOS_INIT_CAPA;
290
- fis->fields = FRT_ALLOC_N(FrtFieldInfo *, fis->capa);
291
- fis->bits = bits;
292
- fis->ref_cnt = 1;
293
- fis->rfis = Qnil;
294
- return fis;
295
- }
296
-
297
- FrtFieldInfos *frt_fis_new(unsigned int bits) {
298
- FrtFieldInfos *fis = frt_fis_alloc();
299
- return frt_fis_init(fis, bits);
300
- }
301
-
302
- FrtFieldInfo *frt_fis_add_field(FrtFieldInfos *fis, FrtFieldInfo *fi) {
303
- if (fis->size == fis->capa) {
304
- fis->capa <<= 1;
305
- FRT_REALLOC_N(fis->fields, FrtFieldInfo *, fis->capa);
306
- }
307
- if (!frt_h_set_safe(fis->field_dict, (void *)fi->name, fi)) {
308
- FRT_RAISE(FRT_ARG_ERROR, "Field :%s already exists", rb_id2name(fi->name));
309
- }
310
- FRT_REF(fi);
311
- fi->number = fis->size;
312
- fis->fields[fis->size] = fi;
313
- fis->size++;
314
- return fi;
315
- }
316
-
317
- FrtFieldInfo *frt_fis_get_field(FrtFieldInfos *fis, ID name) {
318
- return (FrtFieldInfo *)frt_h_get(fis->field_dict, (void *)name);
319
- }
320
-
321
- int frt_fis_get_field_num(FrtFieldInfos *fis, ID name) {
322
- FrtFieldInfo *fi = (FrtFieldInfo *)frt_h_get(fis->field_dict, (void *)name);
323
- if (fi) { return fi->number; }
324
- else { return -1; }
325
- }
326
-
327
- FrtFieldInfo *frt_fis_get_or_add_field(FrtFieldInfos *fis, ID name) {
328
- FrtFieldInfo *fi = (FrtFieldInfo *)frt_h_get(fis->field_dict, (void *)name);
329
- if (!fi) {
330
- fi = (FrtFieldInfo*)frt_fi_new(name, fis->bits);
331
- frt_fis_add_field(fis, fi);
332
- }
333
- return fi;
334
- }
335
-
336
- FrtFieldInfos *frt_fis_read(FrtInStream *is)
337
- {
338
- FrtFieldInfos *volatile fis = NULL;
339
- char *field_name;
340
- FRT_TRY
341
- do {
342
- volatile int i;
343
- union { frt_u32 i; float f; } tmp;
344
- FrtFieldInfo *volatile fi;
345
- fis = frt_fis_new(frt_is_read_vint(is));
346
- for (i = frt_is_read_vint(is); i > 0; i--) {
347
- fi = FRT_ALLOC_AND_ZERO(FrtFieldInfo);
348
- FRT_TRY
349
- field_name = frt_is_read_string_safe(is);
350
- fi->name = rb_intern(field_name);
351
- free(field_name);
352
- tmp.i = frt_is_read_u32(is);
353
- fi->boost = tmp.f;
354
- fi->bits = frt_is_read_vint(is);
355
- FRT_XCATCHALL
356
- free(fi);
357
- FRT_XENDTRY
358
- frt_fis_add_field(fis, fi);
359
- fi->ref_cnt = 1;
360
- }
361
- } while (0);
362
- FRT_XCATCHALL
363
- frt_fis_deref(fis);
364
- FRT_XENDTRY
365
- return fis;
366
- }
367
-
368
- void frt_fis_write(FrtFieldInfos *fis, FrtOutStream *os)
369
- {
370
- int i;
371
- union { frt_u32 i; float f; } tmp;
372
- FrtFieldInfo *fi;
373
- const int fis_size = fis->size;
374
-
375
- frt_os_write_vint(os, fis->bits);
376
- frt_os_write_vint(os, fis->size);
377
-
378
- for (i = 0; i < fis_size; i++) {
379
- fi = fis->fields[i];
380
-
381
- frt_os_write_string(os, rb_id2name(fi->name));
382
- tmp.f = fi->boost;
383
- frt_os_write_u32(os, tmp.i);
384
- frt_os_write_vint(os, fi->bits);
385
- }
386
- }
387
-
388
- static const char *store_str[] = {
389
- ":no",
390
- ":yes",
391
- "",
392
- ":compressed"
393
- };
394
-
395
- static const char *fi_store_str(FrtFieldInfo *fi)
396
- {
397
- return store_str[fi->bits & 0x3];
398
- }
399
-
400
- static const char *index_str[] = {
401
- ":no",
402
- ":untokenized",
403
- "",
404
- ":yes",
405
- "",
406
- ":untokenized_omit_norms",
407
- "",
408
- ":omit_norms"
409
- };
410
-
411
- static const char *fi_index_str(FrtFieldInfo *fi)
412
- {
413
- return index_str[(fi->bits >> 2) & 0x7];
414
- }
415
-
416
- static const char *term_vector_str[] = {
417
- ":no",
418
- ":yes",
419
- "",
420
- ":with_positions",
421
- "",
422
- ":with_offsets",
423
- "",
424
- ":with_positions_offsets"
425
- };
426
-
427
- static const char *fi_term_vector_str(FrtFieldInfo *fi)
428
- {
429
- return term_vector_str[(fi->bits >> 5) & 0x7];
430
- }
431
-
432
- char *frt_fis_to_s(FrtFieldInfos *fis)
433
- {
434
- int i, pos, capa = 200 + fis->size * 120;
435
- char *buf = FRT_ALLOC_N(char, capa);
436
- FrtFieldInfo *fi;
437
- const int fis_size = fis->size;
438
-
439
- pos = sprintf(buf,
440
- "default:\n"
441
- " store: %s\n"
442
- " index: %s\n"
443
- " term_vector: %s\n"
444
- "fields:\n",
445
- store_str[fis->bits & 0x3],
446
- index_str[(fis->bits >> 2) & 0x7],
447
- term_vector_str[(fis->bits >> 5) & 0x7]);
448
- for (i = 0; i < fis_size; i++) {
449
- fi = fis->fields[i];
450
- pos += sprintf(buf + pos,
451
- " %s:\n"
452
- " boost: %f\n"
453
- " store: %s\n"
454
- " index: %s\n"
455
- " term_vector: %s\n",
456
- rb_id2name(fi->name), fi->boost, fi_store_str(fi),
457
- fi_index_str(fi), fi_term_vector_str(fi));
458
- }
459
-
460
- return buf;
461
- }
462
-
463
- void frt_fis_deref(FrtFieldInfos *fis) {
464
- if (FRT_DEREF(fis) == 0) {
465
- frt_h_destroy(fis->field_dict);
466
- free(fis->fields);
467
- free(fis);
468
- }
469
- }
470
-
471
- static bool fis_has_vectors(FrtFieldInfos *fis)
472
- {
473
- int i;
474
- const int fis_size = fis->size;
475
-
476
- for (i = 0; i < fis_size; i++) {
477
- if (bits_store_term_vector(fis->fields[i]->bits)) {
478
- return true;
479
- }
480
- }
481
- return false;
482
- }
483
-
484
186
  /****************************************************************************
485
187
  *
486
188
  * SegmentInfo
487
189
  *
488
190
  ****************************************************************************/
489
191
 
490
- FrtSegmentInfo *frt_si_new(char *name, int doc_cnt, FrtStore *store)
491
- {
192
+ FrtSegmentInfo *frt_si_new(char *name, int doc_cnt, FrtStore *store) {
492
193
  FrtSegmentInfo *si = FRT_ALLOC(FrtSegmentInfo);
493
194
  si->name = name;
494
195
  si->doc_cnt = doc_cnt;
@@ -501,8 +202,7 @@ FrtSegmentInfo *frt_si_new(char *name, int doc_cnt, FrtStore *store)
501
202
  return si;
502
203
  }
503
204
 
504
- static FrtSegmentInfo *si_read(FrtStore *store, FrtInStream *is)
505
- {
205
+ static FrtSegmentInfo *si_read(FrtStore *store, FrtInStream *is) {
506
206
  FrtSegmentInfo *volatile si = FRT_ALLOC_AND_ZERO(FrtSegmentInfo);
507
207
  FRT_TRY
508
208
  si->store = store;
@@ -527,8 +227,7 @@ static FrtSegmentInfo *si_read(FrtStore *store, FrtInStream *is)
527
227
  return si;
528
228
  }
529
229
 
530
- static void si_write(FrtSegmentInfo *si, FrtOutStream *os)
531
- {
230
+ static void si_write(FrtSegmentInfo *si, FrtOutStream *os) {
532
231
  frt_os_write_string(os, si->name);
533
232
  frt_os_write_vint(os, si->doc_cnt);
534
233
  frt_os_write_vint(os, si->del_gen);
@@ -550,13 +249,11 @@ void frt_si_close(FrtSegmentInfo *si) {
550
249
  }
551
250
  }
552
251
 
553
- bool frt_si_has_deletions(FrtSegmentInfo *si)
554
- {
252
+ bool frt_si_has_deletions(FrtSegmentInfo *si) {
555
253
  return si->del_gen >= 0;
556
254
  }
557
255
 
558
- void frt_si_advance_norm_gen(FrtSegmentInfo *si, int field_num)
559
- {
256
+ void frt_si_advance_norm_gen(FrtSegmentInfo *si, int field_num) {
560
257
  if (field_num >= si->norm_gens_size) {
561
258
  int i;
562
259
  FRT_REALLOC_N(si->norm_gens, int, field_num + 1);
@@ -568,8 +265,7 @@ void frt_si_advance_norm_gen(FrtSegmentInfo *si, int field_num)
568
265
  si->norm_gens[field_num]++;
569
266
  }
570
267
 
571
- static char *si_norm_file_name(FrtSegmentInfo *si, char *buf, int field_num)
572
- {
268
+ static char *si_norm_file_name(FrtSegmentInfo *si, char *buf, int field_num) {
573
269
  int norm_gen;
574
270
  if (field_num >= si->norm_gens_size
575
271
  || 0 > (norm_gen = si->norm_gens[field_num])) {
@@ -588,9 +284,7 @@ void frt_deleter_queue_file(FrtDeleter *dlr, const char *file_name);
588
284
  *
589
285
  ****************************************************************************/
590
286
 
591
- #include <time.h>
592
- static char *new_segment(frt_i64 generation)
593
- {
287
+ static char *new_segment(frt_i64 generation) {
594
288
  char buf[FRT_SEGMENT_NAME_MAX_LENGTH];
595
289
  char *fn_p = u64_to_str36(buf, FRT_SEGMENT_NAME_MAX_LENGTH - 1,
596
290
  (frt_u64)generation);
@@ -611,8 +305,7 @@ typedef struct FindSegmentsFile {
611
305
  } ret;
612
306
  } FindSegmentsFile;
613
307
 
614
- static void which_gen_i(const char *file_name, void *arg)
615
- {
308
+ static void which_gen_i(const char *file_name, void *arg) {
616
309
  frt_i64 *max_generation = (frt_i64 *)arg;
617
310
  if (0 == strncmp(FRT_SEGMENTS_FILE_NAME"_", file_name,
618
311
  sizeof(FRT_SEGMENTS_FILE_NAME))) {
@@ -658,10 +351,9 @@ void frt_sis_put(FrtSegmentInfos *sis, FILE *stream) {
658
351
  *
659
352
  * @param store - the Store to look in
660
353
  */
661
- frt_i64 frt_sis_current_segment_generation(FrtStore *store)
662
- {
354
+ frt_i64 frt_sis_current_segment_generation(FrtStore *store) {
663
355
  frt_i64 current_generation = -1;
664
- store->each(store, &which_gen_i, &current_generation);
356
+ store->each(store, segm_idx_name, &which_gen_i, &current_generation);
665
357
  return current_generation;
666
358
  }
667
359
 
@@ -672,8 +364,7 @@ frt_i64 frt_sis_current_segment_generation(FrtStore *store)
672
364
  * @param store - the Store to look in
673
365
  * @return segments_N where N is the current generation
674
366
  */
675
- char *frt_sis_curr_seg_file_name(char *buf, FrtStore *store)
676
- {
367
+ char *frt_sis_curr_seg_file_name(char *buf, FrtStore *store) {
677
368
  return segfn_for_generation(buf, frt_sis_current_segment_generation(store));
678
369
  }
679
370
 
@@ -686,16 +377,14 @@ char *frt_sis_curr_seg_file_name(char *buf, FrtStore *store)
686
377
  */
687
378
  /*
688
379
  FIXME: not used
689
- static char *sis_next_seg_file_name(char *buf, FrtStore *store)
690
- {
380
+ static char *sis_next_seg_file_name(char *buf, FrtStore *store) {
691
381
  return segfn_for_generation(buf, frt_sis_current_segment_generation(store) + 1);
692
382
  }
693
383
  */
694
384
 
695
385
  #define GEN_FILE_RETRY_COUNT 10
696
386
  #define GEN_LOOK_AHEAD_COUNT 10
697
- static void sis_find_segments_file(FrtStore *store, FindSegmentsFile *fsf, void (*run)(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReader *ir), FrtIndexReader *ir)
698
- {
387
+ static void sis_find_segments_file(FrtStore *store, FindSegmentsFile *fsf, void (*run)(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReader *ir), FrtIndexReader *ir) {
699
388
  volatile int i;
700
389
  volatile int gen_look_ahead_count = 0;
701
390
  volatile bool retry = false;
@@ -732,7 +421,7 @@ static void sis_find_segments_file(FrtStore *store, FindSegmentsFile *fsf, void
732
421
  FrtInStream *gen_is;
733
422
  gen_is = NULL;
734
423
  FRT_TRY
735
- gen_is = store->open_input(store, SEGMENTS_GEN_FILE_NAME);
424
+ gen_is = store->open_input(store, segm_idx_name, SEGMENTS_GEN_FILE_NAME);
736
425
  FRT_XCATCHALL
737
426
  FRT_HANDLED();
738
427
  /* TODO:LOG "segments open: FRT_IO_ERROR"*/
@@ -782,7 +471,7 @@ static void sis_find_segments_file(FrtStore *store, FindSegmentsFile *fsf, void
782
471
  * this must be a real error. We throw the original exception
783
472
  * we got. */
784
473
  char *listing, listing_buffer[1024];
785
- listing = frt_store_to_s(store);
474
+ listing = frt_store_folder_to_s(store, segm_idx_name);
786
475
  strncpy(listing_buffer, listing, 1023);
787
476
  listing_buffer[1023] = '\0';
788
477
  free(listing);
@@ -815,7 +504,7 @@ static void sis_find_segments_file(FrtStore *store, FindSegmentsFile *fsf, void
815
504
  * and try it if so: */
816
505
  char prev_seg_file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
817
506
  segfn_for_generation(prev_seg_file_name, gen - 1);
818
- if (store->exists(store, prev_seg_file_name)) {
507
+ if (store->exists(store, segm_idx_name, prev_seg_file_name)) {
819
508
  /* TODO:LOG "fallback to prior segment file '" +
820
509
  * prevSegmentFileName + "'" */
821
510
  FRT_TRY
@@ -839,8 +528,7 @@ static void sis_find_segments_file(FrtStore *store, FindSegmentsFile *fsf, void
839
528
  }
840
529
  }
841
530
 
842
- FrtSegmentInfos *frt_sis_new(FrtFieldInfos *fis)
843
- {
531
+ FrtSegmentInfos *frt_sis_new(FrtFieldInfos *fis) {
844
532
  FrtSegmentInfos *sis = FRT_ALLOC_AND_ZERO(FrtSegmentInfos);
845
533
  FRT_REF(fis);
846
534
  sis->fis = fis;
@@ -854,13 +542,11 @@ FrtSegmentInfos *frt_sis_new(FrtFieldInfos *fis)
854
542
  return sis;
855
543
  }
856
544
 
857
- FrtSegmentInfo *frt_sis_new_segment(FrtSegmentInfos *sis, int doc_cnt, FrtStore *store)
858
- {
545
+ FrtSegmentInfo *frt_sis_new_segment(FrtSegmentInfos *sis, int doc_cnt, FrtStore *store) {
859
546
  return frt_sis_add_si(sis, frt_si_new(new_segment(sis->counter++), doc_cnt, store));
860
547
  }
861
548
 
862
- void frt_sis_destroy(FrtSegmentInfos *sis)
863
- {
549
+ void frt_sis_destroy(FrtSegmentInfos *sis) {
864
550
  int i;
865
551
  const int sis_size = sis->size;
866
552
  for (i = 0; i < sis_size; i++) {
@@ -872,8 +558,7 @@ void frt_sis_destroy(FrtSegmentInfos *sis)
872
558
  free(sis);
873
559
  }
874
560
 
875
- FrtSegmentInfo *frt_sis_add_si(FrtSegmentInfos *sis, FrtSegmentInfo *si)
876
- {
561
+ FrtSegmentInfo *frt_sis_add_si(FrtSegmentInfos *sis, FrtSegmentInfo *si) {
877
562
  if (sis->size >= sis->capa) {
878
563
  sis->capa <<= 1;
879
564
  FRT_REALLOC_N(sis->segs, FrtSegmentInfo *, sis->capa);
@@ -882,8 +567,7 @@ FrtSegmentInfo *frt_sis_add_si(FrtSegmentInfos *sis, FrtSegmentInfo *si)
882
567
  return si;
883
568
  }
884
569
 
885
- void frt_sis_del_at(FrtSegmentInfos *sis, int at)
886
- {
570
+ void frt_sis_del_at(FrtSegmentInfos *sis, int at) {
887
571
  int i;
888
572
  const int sis_size = --(sis->size);
889
573
  frt_si_close(sis->segs[at]);
@@ -892,8 +576,7 @@ void frt_sis_del_at(FrtSegmentInfos *sis, int at)
892
576
  }
893
577
  }
894
578
 
895
- void frt_sis_del_from_to(FrtSegmentInfos *sis, int from, int to)
896
- {
579
+ void frt_sis_del_from_to(FrtSegmentInfos *sis, int from, int to) {
897
580
  int i, num_to_del = to - from;
898
581
  const int sis_size = sis->size -= num_to_del;
899
582
  for (i = from; i < to; i++) {
@@ -904,8 +587,7 @@ void frt_sis_del_from_to(FrtSegmentInfos *sis, int from, int to)
904
587
  }
905
588
  }
906
589
 
907
- static void frt_sis_read_i(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReader *ir_)
908
- {
590
+ static void frt_sis_read_i(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReader *ir_) {
909
591
  int seg_cnt;
910
592
  int i;
911
593
  frt_u32 format = 0;
@@ -916,7 +598,7 @@ static void frt_sis_read_i(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReade
916
598
  segfn_for_generation(seg_file_name, fsf->generation);
917
599
  fsf->ret.sis = NULL;
918
600
  FRT_TRY
919
- is = store->open_input(store, seg_file_name);
601
+ is = store->open_input(store, segm_idx_name, seg_file_name);
920
602
  sis->store = store;
921
603
  FRT_REF(store);
922
604
  sis->generation = fsf->generation;
@@ -942,22 +624,20 @@ static void frt_sis_read_i(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReade
942
624
  fsf->ret.sis = sis;
943
625
  }
944
626
 
945
- FrtSegmentInfos *frt_sis_read(FrtStore *store)
946
- {
627
+ FrtSegmentInfos *frt_sis_read(FrtStore *store) {
947
628
  FindSegmentsFile fsf;
948
629
  sis_find_segments_file(store, &fsf, &frt_sis_read_i, NULL);
949
630
  return fsf.ret.sis;
950
631
  }
951
632
 
952
- void frt_sis_write(FrtSegmentInfos *sis, FrtStore *store, FrtDeleter *deleter)
953
- {
633
+ void frt_sis_write(FrtSegmentInfos *sis, FrtStore *store, FrtDeleter *deleter) {
954
634
  int i;
955
635
  FrtOutStream *volatile os = NULL;
956
636
  const int sis_size = sis->size;
957
637
  char buf[FRT_SEGMENT_NAME_MAX_LENGTH];
958
638
  sis->generation++;
959
639
  FRT_TRY
960
- os = store->new_output(store, segfn_for_generation(buf, sis->generation));
640
+ os = store->new_output(store, segm_idx_name, segfn_for_generation(buf, sis->generation));
961
641
  frt_os_write_u32(os, FORMAT);
962
642
  frt_os_write_u64(os, ++(sis->version)); /* every write changes the index */
963
643
  frt_os_write_u64(os, sis->counter);
@@ -971,7 +651,7 @@ void frt_sis_write(FrtSegmentInfos *sis, FrtStore *store, FrtDeleter *deleter)
971
651
  FRT_XENDTRY
972
652
 
973
653
  FRT_TRY
974
- os = store->new_output(store, SEGMENTS_GEN_FILE_NAME);
654
+ os = store->new_output(store, segm_idx_name, SEGMENTS_GEN_FILE_NAME);
975
655
  frt_os_write_u64(os, sis->generation);
976
656
  frt_os_write_u64(os, sis->generation);
977
657
  FRT_XFINALLY
@@ -985,15 +665,14 @@ void frt_sis_write(FrtSegmentInfos *sis, FrtStore *store, FrtDeleter *deleter)
985
665
  }
986
666
  }
987
667
 
988
- static void frt_sis_read_ver_i(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReader *ir_)
989
- {
668
+ static void frt_sis_read_ver_i(FrtStore *store, FindSegmentsFile *fsf, FrtIndexReader *ir_) {
990
669
  FrtInStream *is;
991
670
  frt_u32 format = 0;
992
671
  frt_u64 version = 0;
993
672
  char seg_file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
994
673
 
995
674
  segfn_for_generation(seg_file_name, (frt_u64)fsf->generation);
996
- is = store->open_input(store, seg_file_name);
675
+ is = store->open_input(store, segm_idx_name, seg_file_name);
997
676
 
998
677
  FRT_TRY
999
678
  format = frt_is_read_u32(is); // format
@@ -1006,8 +685,7 @@ static void frt_sis_read_ver_i(FrtStore *store, FindSegmentsFile *fsf, FrtIndexR
1006
685
  fsf->ret.uint64 = version;
1007
686
  }
1008
687
 
1009
- frt_u64 frt_sis_read_current_version(FrtStore *store)
1010
- {
688
+ frt_u64 frt_sis_read_current_version(FrtStore *store) {
1011
689
  FindSegmentsFile fsf;
1012
690
  sis_find_segments_file(store, &fsf, &frt_sis_read_ver_i, NULL);
1013
691
  return fsf.ret.uint64;
@@ -1029,9 +707,9 @@ FrtFieldsReader *frt_fr_open(FrtStore *store, const char *segment, FrtFieldInfos
1029
707
  fr->fis = fis;
1030
708
 
1031
709
  strcpy(file_name + segment_len, ".fdt");
1032
- fr->fdt_in = store->open_input(store, file_name);
710
+ fr->fdt_in = store->open_input(store, segm_idx_name, file_name);
1033
711
  strcpy(file_name + segment_len, ".fdx");
1034
- fr->fdx_in = store->open_input(store, file_name);
712
+ fr->fdx_in = store->open_input(store, segm_idx_name, file_name);
1035
713
  fr->size = frt_is_length(fr->fdx_in) / FIELDS_IDX_PTR_SIZE;
1036
714
  fr->store = store;
1037
715
  FRT_REF(store);
@@ -1057,32 +735,30 @@ void frt_fr_close(FrtFieldsReader *fr) {
1057
735
  free(fr);
1058
736
  }
1059
737
 
1060
- static FrtDocField *frt_fr_df_new(ID name, int size, FrtCompressionType compression) {
738
+ static FrtDocField *frt_fr_df_new(ID name, int size, FrtCompressionType compression_type) {
1061
739
  FrtDocField *df = FRT_ALLOC(FrtDocField);
1062
740
  df->name = name;
1063
741
  df->capa = df->size = size;
1064
- df->data = FRT_ALLOC_N(char *, df->capa);
742
+ df->data = FRT_ALLOC_N(const char *, df->capa);
1065
743
  df->lengths = FRT_ALLOC_N(int, df->capa);
1066
744
  df->encodings = FRT_ALLOC_N(rb_encoding *, df->capa);
1067
- df->destroy_data = true;
1068
745
  df->boost = 1.0f;
1069
- df->compression = compression;
746
+ df->compression_type = compression_type;
1070
747
  return df;
1071
748
  }
1072
749
 
1073
- static void frt_fr_read_compressed_fields(FrtFieldsReader *fr, FrtDocField *df, FrtCompressionType compression) {
750
+ static void frt_fr_read_compressed_fields(FrtFieldsReader *fr, FrtDocField *df, FrtCompressionType compression_type) {
1074
751
  int i;
1075
752
  const int df_size = df->size;
1076
753
  FrtInStream *fdt_in = fr->fdt_in;
1077
754
 
1078
755
  for (i = 0; i < df_size; i++) {
1079
- const int compressed_len = df->lengths[i] + 1;
1080
- df->data[i] = frt_is_read_compressed_bytes(fdt_in, compressed_len, &(df->lengths[i]), compression);
756
+ const int compressed_len = df->lengths[i];
757
+ df->data[i] = frt_is_read_compressed_bytes(fdt_in, compressed_len, &(df->lengths[i]), compression_type);
1081
758
  }
1082
759
  }
1083
760
 
1084
- FrtDocument *frt_fr_get_doc(FrtFieldsReader *fr, int doc_num)
1085
- {
761
+ FrtDocument *frt_fr_get_doc(FrtFieldsReader *fr, int doc_num) {
1086
762
  int i, j;
1087
763
  frt_off_t pos;
1088
764
  int stored_cnt;
@@ -1098,28 +774,29 @@ FrtDocument *frt_fr_get_doc(FrtFieldsReader *fr, int doc_num)
1098
774
  for (i = 0; i < stored_cnt; i++) {
1099
775
  const int field_num = frt_is_read_vint(fdt_in);
1100
776
  FrtFieldInfo *fi = fr->fis->fields[field_num];
1101
- const int df_size = frt_is_read_vint(fdt_in);
1102
- FrtDocField *df = frt_fr_df_new(fi->name, df_size, frt_fi_get_compression(fi));
777
+ const int df_field_count = frt_is_read_vint(fdt_in);
778
+ FrtDocField *df = frt_fr_df_new(fi->name, df_field_count, bits_get_compression_type(fi->bits));
1103
779
 
1104
- for (j = 0; j < df_size; j++) {
780
+ for (j = 0; j < df_field_count; j++) {
1105
781
  df->lengths[j] = frt_is_read_vint(fdt_in);
1106
782
  df->encodings[j] = rb_enc_from_index(frt_is_read_vint(fdt_in));
1107
- df->compression = frt_is_read_vint(fdt_in);
783
+ df->compression_type = frt_is_read_vint(fdt_in);
1108
784
  }
1109
785
 
1110
786
  frt_doc_add_field(doc, df);
1111
787
  }
1112
788
  for (i = 0; i < stored_cnt; i++) {
1113
789
  FrtDocField *df = doc->fields[i];
1114
- if (df->compression != FRT_COMPRESSION_NONE) {
1115
- frt_fr_read_compressed_fields(fr, df, df->compression);
790
+ if (df->compression_type != FRT_COMPRESSION_NONE) {
791
+ frt_fr_read_compressed_fields(fr, df, df->compression_type);
1116
792
  } else {
1117
793
  const int df_size = df->size;
1118
794
  for (j = 0; j < df_size; j++) {
1119
- const int read_len = df->lengths[j] + 1;
1120
- df->data[j] = FRT_ALLOC_N(char, read_len);
1121
- frt_is_read_bytes(fdt_in, (frt_uchar *)df->data[j], read_len);
1122
- df->data[j][read_len - 1] = '\0';
795
+ const int read_len = df->lengths[j];
796
+ char *d = FRT_ALLOC_N(char, read_len + 1);
797
+ frt_is_read_bytes(fdt_in, (frt_uchar *)d, read_len);
798
+ d[read_len] = '\0';
799
+ df->data[j] = d;
1123
800
  }
1124
801
  }
1125
802
  }
@@ -1127,8 +804,7 @@ FrtDocument *frt_fr_get_doc(FrtFieldsReader *fr, int doc_num)
1127
804
  return doc;
1128
805
  }
1129
806
 
1130
- FrtLazyDoc *frt_fr_get_lazy_doc(FrtFieldsReader *fr, int doc_num)
1131
- {
807
+ FrtLazyDoc *frt_fr_get_lazy_doc(FrtFieldsReader *fr, int doc_num) {
1132
808
  int start = 0;
1133
809
  int i, j;
1134
810
  frt_off_t pos;
@@ -1146,18 +822,18 @@ FrtLazyDoc *frt_fr_get_lazy_doc(FrtFieldsReader *fr, int doc_num)
1146
822
  for (i = 0; i < stored_cnt; i++) {
1147
823
  FrtFieldInfo *fi = fr->fis->fields[frt_is_read_vint(fdt_in)];
1148
824
  const int df_size = frt_is_read_vint(fdt_in);
1149
- FrtLazyDocField *lazy_df = frt_lazy_df_new(fi->name, df_size, frt_fi_get_compression(fi));
825
+ FrtLazyDocField *lazy_df = frt_lazy_df_new(fi->name, df_size, bits_get_compression_type(fi->bits));
1150
826
  const int field_start = start;
1151
827
  /* get the starts relative positions this time around */
1152
828
 
1153
829
  for (j = 0; j < df_size; j++) {
1154
830
  lazy_df->data[j].start = start;
1155
- start += 1 + (lazy_df->data[j].length = frt_is_read_vint(fdt_in));
831
+ start += (lazy_df->data[j].length = frt_is_read_vint(fdt_in));
1156
832
  lazy_df->data[j].encoding = rb_enc_from_index(frt_is_read_vint(fdt_in));
1157
- lazy_df->data[j].compression = frt_is_read_vint(fdt_in);
833
+ lazy_df->data[j].compression_type = frt_is_read_vint(fdt_in);
1158
834
  }
1159
835
 
1160
- lazy_df->len = start - field_start - 1;
836
+ lazy_df->len = start - field_start;
1161
837
  frt_lazy_doc_add_field(lazy_doc, lazy_df, i);
1162
838
  }
1163
839
  /* correct the starts to their correct absolute positions */
@@ -1173,8 +849,7 @@ FrtLazyDoc *frt_fr_get_lazy_doc(FrtFieldsReader *fr, int doc_num)
1173
849
  return lazy_doc;
1174
850
  }
1175
851
 
1176
- static FrtTermVector *frt_fr_read_term_vector(FrtFieldsReader *fr, int field_num)
1177
- {
852
+ static FrtTermVector *frt_fr_read_term_vector(FrtFieldsReader *fr, int field_num) {
1178
853
  FrtTermVector *tv = FRT_ALLOC_AND_ZERO(FrtTermVector);
1179
854
  FrtInStream *fdt_in = fr->fdt_in;
1180
855
  FrtFieldInfo *fi = fr->fis->fields[field_num];
@@ -1232,8 +907,7 @@ static FrtTermVector *frt_fr_read_term_vector(FrtFieldsReader *fr, int field_num
1232
907
  return tv;
1233
908
  }
1234
909
 
1235
- FrtHash *frt_fr_get_tv(FrtFieldsReader *fr, int doc_num)
1236
- {
910
+ FrtHash *frt_fr_get_tv(FrtFieldsReader *fr, int doc_num) {
1237
911
  FrtHash *term_vectors = frt_h_new_ptr((frt_free_ft)&frt_tv_destroy);
1238
912
  int i;
1239
913
  FrtInStream *fdx_in = fr->fdx_in;
@@ -1319,10 +993,10 @@ FrtFieldsWriter *frt_fw_open(FrtStore *store, const char *segment, FrtFieldInfos
1319
993
  memcpy(file_name, segment, segment_len);
1320
994
 
1321
995
  strcpy(file_name + segment_len, ".fdt");
1322
- fw->fdt_out = store->new_output(store, file_name);
996
+ fw->fdt_out = store->new_output(store, segm_idx_name, file_name);
1323
997
 
1324
998
  strcpy(file_name + segment_len, ".fdx");
1325
- fw->fdx_out = store->new_output(store, file_name);
999
+ fw->fdx_out = store->new_output(store, segm_idx_name, file_name);
1326
1000
 
1327
1001
  fw->buffer = frt_ram_new_buffer();
1328
1002
 
@@ -1344,9 +1018,9 @@ void frt_fw_add_doc(FrtFieldsWriter *fw, FrtDocument *doc) {
1344
1018
  int i, j, stored_cnt = 0;
1345
1019
  FrtDocField *df;
1346
1020
  FrtFieldInfo *fi;
1347
- FrtCompressionType compression;
1021
+ FrtCompressionType compression_type;
1348
1022
  FrtOutStream *fdt_out = fw->fdt_out, *fdx_out = fw->fdx_out;
1349
- const int doc_size = doc->size;
1023
+ const int doc_size = doc->field_count;
1350
1024
 
1351
1025
  for (i = 0; i < doc_size; i++) {
1352
1026
  df = doc->fields[i];
@@ -1370,23 +1044,20 @@ void frt_fw_add_doc(FrtFieldsWriter *fw, FrtDocument *doc) {
1370
1044
  frt_os_write_vint(fdt_out, df_size);
1371
1045
 
1372
1046
  if (bits_is_compressed(fi->bits)) {
1373
- compression = frt_fi_get_compression(fi);
1047
+ compression_type = bits_get_compression_type(fi->bits);
1374
1048
  for (j = 0; j < df_size; j++) {
1375
- const int length = df->lengths[j];
1376
- int compressed_len = frt_os_write_compressed_bytes(fw->buffer, (frt_uchar*)df->data[j], length, compression);
1377
- frt_os_write_vint(fdt_out, compressed_len - 1);
1049
+ int compressed_len = frt_os_write_compressed_bytes(fw->buffer, (frt_uchar*)df->data[j], df->lengths[j], compression_type);
1050
+ frt_os_write_vint(fdt_out, compressed_len);
1378
1051
  frt_os_write_vint(fdt_out, rb_enc_to_index(df->encodings[j]));
1379
- frt_os_write_vint(fdt_out, compression);
1052
+ frt_os_write_vint(fdt_out, compression_type);
1380
1053
  }
1381
1054
  } else {
1382
1055
  for (j = 0; j < df_size; j++) {
1383
1056
  const int length = df->lengths[j];
1057
+ frt_os_write_bytes(fw->buffer, (frt_uchar*)df->data[j], length);
1384
1058
  frt_os_write_vint(fdt_out, length);
1385
1059
  frt_os_write_vint(fdt_out, rb_enc_to_index(df->encodings[j]));
1386
- frt_os_write_vint(fdt_out, FRT_COMPRESSION_NONE);
1387
- frt_os_write_bytes(fw->buffer, (frt_uchar*)df->data[j], length);
1388
- /* leave a space between fields as that is how they are analyzed */
1389
- frt_os_write_byte(fw->buffer, ' ');
1060
+ frt_os_write_vint(fdt_out, FRT_COMPRESSION_NONE);
1390
1061
  }
1391
1062
  }
1392
1063
  }
@@ -1413,8 +1084,7 @@ void frt_fw_add_postings(FrtFieldsWriter *fw,
1413
1084
  FrtPostingList **plists,
1414
1085
  int posting_count,
1415
1086
  FrtOffset *offsets,
1416
- int offset_count)
1417
- {
1087
+ int offset_count) {
1418
1088
  int i, delta_start, delta_length;
1419
1089
  const char *last_term = FRT_EMPTY_STRING;
1420
1090
  FrtOutStream *fdt_out = fw->fdt_out;
@@ -1478,19 +1148,16 @@ void frt_fw_add_postings(FrtFieldsWriter *fw,
1478
1148
 
1479
1149
  #define TE(ste) ((FrtTermEnum *)ste)
1480
1150
 
1481
- char *frt_te_get_term(FrtTermEnum *te)
1482
- {
1151
+ char *frt_te_get_term(FrtTermEnum *te) {
1483
1152
  return (char *)memcpy(FRT_ALLOC_N(char, te->curr_term_len + 1),
1484
1153
  te->curr_term, te->curr_term_len + 1);
1485
1154
  }
1486
1155
 
1487
- FrtTermInfo *frt_te_get_ti(FrtTermEnum *te)
1488
- {
1156
+ FrtTermInfo *frt_te_get_ti(FrtTermEnum *te) {
1489
1157
  return (FrtTermInfo*)memcpy(FRT_ALLOC(FrtTermInfo), &(te->curr_ti), sizeof(FrtTermInfo));
1490
1158
  }
1491
1159
 
1492
- static char *te_skip_to(FrtTermEnum *te, const char *term)
1493
- {
1160
+ static char *te_skip_to(FrtTermEnum *te, const char *term) {
1494
1161
  char *curr_term = te->curr_term;
1495
1162
  if (strcmp(curr_term, term) < 0) {
1496
1163
  while (NULL != ((curr_term = te->next(te)))
@@ -1512,8 +1179,7 @@ static char *te_skip_to(FrtTermEnum *te, const char *term)
1512
1179
  * SegmentTermIndex
1513
1180
  ****************************************************************************/
1514
1181
 
1515
- static void sti_destroy(FrtSegmentTermIndex *sti)
1516
- {
1182
+ static void sti_destroy(FrtSegmentTermIndex *sti) {
1517
1183
  if (sti->index_terms) {
1518
1184
  int i;
1519
1185
  const int sti_index_cnt = sti->index_cnt;
@@ -1557,8 +1223,7 @@ static void sti_ensure_index_is_read(FrtSegmentTermIndex *sti, FrtTermEnum *inde
1557
1223
  }
1558
1224
  }
1559
1225
 
1560
- static int sti_get_index_offset(FrtSegmentTermIndex *sti, const char *term)
1561
- {
1226
+ static int sti_get_index_offset(FrtSegmentTermIndex *sti, const char *term) {
1562
1227
  int lo = 0;
1563
1228
  int hi = sti->index_cnt - 1;
1564
1229
  int mid, delta;
@@ -1569,11 +1234,9 @@ static int sti_get_index_offset(FrtSegmentTermIndex *sti, const char *term)
1569
1234
  delta = strcmp(term, index_terms[mid]);
1570
1235
  if (delta < 0) {
1571
1236
  hi = mid - 1;
1572
- }
1573
- else if (delta > 0) {
1237
+ } else if (delta > 0) {
1574
1238
  lo = mid + 1;
1575
- }
1576
- else {
1239
+ } else {
1577
1240
  return mid;
1578
1241
  }
1579
1242
  }
@@ -1601,7 +1264,7 @@ FrtSegmentFieldIndex *frt_sfi_open(FrtStore *store, const char *segment) {
1601
1264
  pthread_mutex_init(&sfi->mutex, NULL);
1602
1265
 
1603
1266
  sprintf(file_name, "%s.tfx", segment);
1604
- is = store->open_input(store, file_name);
1267
+ is = store->open_input(store, segm_idx_name, file_name);
1605
1268
  field_count = (int)frt_is_read_u32(is);
1606
1269
  sfi->index_interval = frt_is_read_vint(is);
1607
1270
  sfi->skip_interval = frt_is_read_vint(is);
@@ -1620,7 +1283,7 @@ FrtSegmentFieldIndex *frt_sfi_open(FrtStore *store, const char *segment) {
1620
1283
  frt_is_close(is);
1621
1284
 
1622
1285
  sprintf(file_name, "%s.tix", segment);
1623
- is = store->open_input(store, file_name);
1286
+ is = store->open_input(store, segm_idx_name, file_name);
1624
1287
  FRT_DEREF(is);
1625
1288
  sfi->index_te = frt_ste_new(is, sfi);
1626
1289
  return sfi;
@@ -1750,13 +1413,11 @@ void frt_ste_close(FrtTermEnum *te) {
1750
1413
  free(te);
1751
1414
  }
1752
1415
 
1753
- static char *frt_ste_get_term(FrtTermEnum *te, int pos)
1754
- {
1416
+ static char *frt_ste_get_term(FrtTermEnum *te, int pos) {
1755
1417
  FrtSegmentTermEnum *ste = STE(te);
1756
1418
  if (pos >= ste->size) {
1757
1419
  return NULL;
1758
- }
1759
- else if (pos != ste->pos) {
1420
+ } else if (pos != ste->pos) {
1760
1421
  int idx_int = ste->sfi->index_interval;
1761
1422
  if ((pos < ste->pos) || pos > (1 + ste->pos / idx_int) * idx_int) {
1762
1423
  FrtSegmentTermIndex *sti = (FrtSegmentTermIndex *)frt_h_get_int(ste->sfi->field_dict, te->field_num);
@@ -1773,8 +1434,7 @@ static char *frt_ste_get_term(FrtTermEnum *te, int pos)
1773
1434
  return te->curr_term;
1774
1435
  }
1775
1436
 
1776
- FrtTermEnum *frt_ste_new(FrtInStream *is, FrtSegmentFieldIndex *sfi)
1777
- {
1437
+ FrtTermEnum *frt_ste_new(FrtInStream *is, FrtSegmentFieldIndex *sfi) {
1778
1438
  FrtSegmentTermEnum *ste = ste_allocate();
1779
1439
 
1780
1440
  TE(ste)->field_num = -1;
@@ -1794,8 +1454,7 @@ FrtTermEnum *frt_ste_new(FrtInStream *is, FrtSegmentFieldIndex *sfi)
1794
1454
 
1795
1455
  #define MTE(te) ((MultiTermEnum *)(te))
1796
1456
 
1797
- typedef struct TermEnumWrapper
1798
- {
1457
+ typedef struct TermEnumWrapper {
1799
1458
  int index;
1800
1459
  FrtTermEnum *te;
1801
1460
  int *doc_map;
@@ -1803,8 +1462,7 @@ typedef struct TermEnumWrapper
1803
1462
  char *term;
1804
1463
  } TermEnumWrapper;
1805
1464
 
1806
- typedef struct MultiTermEnum
1807
- {
1465
+ typedef struct MultiTermEnum {
1808
1466
  FrtTermEnum te;
1809
1467
  int doc_freq;
1810
1468
  FrtPriorityQueue *tew_queue;
@@ -1816,29 +1474,24 @@ typedef struct MultiTermEnum
1816
1474
  int *ti_indexes;
1817
1475
  } MultiTermEnum;
1818
1476
 
1819
- static bool tew_lt(const TermEnumWrapper *tew1, const TermEnumWrapper *tew2)
1820
- {
1477
+ static bool tew_lt(const TermEnumWrapper *tew1, const TermEnumWrapper *tew2) {
1821
1478
  int cmpres = strcmp(tew1->term, tew2->term);
1822
1479
  if (0 == cmpres) {
1823
1480
  return tew1->index < tew2->index;
1824
- }
1825
- else {
1481
+ } else {
1826
1482
  return cmpres < 0;
1827
1483
  }
1828
1484
  }
1829
1485
 
1830
- static char *tew_next(TermEnumWrapper *tew)
1831
- {
1486
+ static char *tew_next(TermEnumWrapper *tew) {
1832
1487
  return (tew->term = tew->te->next(tew->te));
1833
1488
  }
1834
1489
 
1835
- static char *tew_skip_to(TermEnumWrapper *tew, const char *term)
1836
- {
1490
+ static char *tew_skip_to(TermEnumWrapper *tew, const char *term) {
1837
1491
  return (tew->term = tew->te->skip_to(tew->te, term));
1838
1492
  }
1839
1493
 
1840
- static void tew_destroy(TermEnumWrapper *tew)
1841
- {
1494
+ static void tew_destroy(TermEnumWrapper *tew) {
1842
1495
  frt_ir_close(tew->ir);
1843
1496
  if (tew->doc_map) {
1844
1497
  free(tew->doc_map);
@@ -1905,8 +1558,7 @@ static FrtTermEnum *mte_set_field(FrtTermEnum *te, int field_num) {
1905
1558
  if (tew_next(tew)) {
1906
1559
  frt_pq_push(mte->tew_queue, tew); /* initialize queue */
1907
1560
  }
1908
- }
1909
- else {
1561
+ } else {
1910
1562
  sub_te->field_num = -1;
1911
1563
  }
1912
1564
 
@@ -2009,7 +1661,7 @@ FrtTermInfosReader *frt_tir_open(FrtStore *store, FrtSegmentFieldIndex *sfi, con
2009
1661
  char file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
2010
1662
 
2011
1663
  sprintf(file_name, "%s.tis", segment);
2012
- FrtInStream *is = store->open_input(store, file_name);
1664
+ FrtInStream *is = store->open_input(store, segm_idx_name, file_name);
2013
1665
  FRT_DEREF(is);
2014
1666
  tir->orig_te = frt_ste_new(is, sfi);
2015
1667
  tir->thread_te = 0;
@@ -2088,7 +1740,7 @@ void frt_tir_close(FrtTermInfosReader *tir) {
2088
1740
 
2089
1741
  static FrtTermWriter *frt_tw_new(FrtStore *store, char *file_name) {
2090
1742
  FrtTermWriter *tw = FRT_ALLOC_AND_ZERO(FrtTermWriter);
2091
- tw->os = store->new_output(store, file_name);
1743
+ tw->os = store->new_output(store, segm_idx_name, file_name);
2092
1744
  tw->last_term = FRT_EMPTY_STRING;
2093
1745
  return tw;
2094
1746
  }
@@ -2115,7 +1767,7 @@ FrtTermInfosWriter *frt_tiw_open(FrtStore *store, const char *segment, int index
2115
1767
  strcpy(file_name + segment_len, ".tis");
2116
1768
  tiw->tis_writer = frt_tw_new(store, file_name);
2117
1769
  strcpy(file_name + segment_len, ".tfx");
2118
- tiw->tfx_out = store->new_output(store, file_name);
1770
+ tiw->tfx_out = store->new_output(store, segm_idx_name, file_name);
2119
1771
  frt_os_write_u32(tiw->tfx_out, 0); /* make space for field_count */
2120
1772
 
2121
1773
  /* The following two numbers are the first numbers written to the field
@@ -2246,7 +1898,7 @@ static void stde_seek_ti(FrtSegmentTermDocEnum *stde, FrtTermInfo *ti) {
2246
1898
  stde->count = 0;
2247
1899
  stde->doc_freq = ti->doc_freq;
2248
1900
  stde->doc_num = 0;
2249
- stde->skip_doc = 0;
1901
+ stde->skip_doc_num = 0;
2250
1902
  stde->skip_count = 0;
2251
1903
  stde->num_skips = stde->doc_freq / stde->skip_interval;
2252
1904
  stde->frq_ptr = ti->frq_ptr;
@@ -2282,7 +1934,6 @@ static int stde_freq(FrtTermDocEnum *tde) {
2282
1934
  }
2283
1935
 
2284
1936
  static bool stde_next(FrtTermDocEnum *tde) {
2285
- int doc_code;
2286
1937
  FrtSegmentTermDocEnum *stde = STDE(tde);
2287
1938
 
2288
1939
  while (true) {
@@ -2290,13 +1941,8 @@ static bool stde_next(FrtTermDocEnum *tde) {
2290
1941
  return false;
2291
1942
  }
2292
1943
 
2293
- doc_code = frt_is_read_vint(stde->frq_in);
2294
- stde->doc_num += doc_code >> 1; /* shift off low bit */
2295
- if (0 != (doc_code & 1)) { /* if low bit is set */
2296
- stde->freq = 1; /* freq is one */
2297
- } else {
2298
- stde->freq = (int)frt_is_read_vint(stde->frq_in); /* read freq */
2299
- }
1944
+ stde->doc_num += frt_is_read_vint(stde->frq_in);
1945
+ stde->freq = frt_is_read_vint(stde->frq_in);
2300
1946
 
2301
1947
  stde->count++;
2302
1948
 
@@ -2312,17 +1958,11 @@ static bool stde_next(FrtTermDocEnum *tde) {
2312
1958
  static int stde_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num) {
2313
1959
  FrtSegmentTermDocEnum *stde = STDE(tde);
2314
1960
  int i = 0;
2315
- int doc_code;
2316
1961
 
2317
1962
  while (i < req_num && stde->count < stde->doc_freq) {
2318
1963
  /* manually inlined call to next() for speed */
2319
- doc_code = frt_is_read_vint(stde->frq_in);
2320
- stde->doc_num += (doc_code >> 1); /* shift off low bit */
2321
- if (0 != (doc_code & 1)) { /* if low bit is set */
2322
- stde->freq = 1; /* freq is one */
2323
- } else {
2324
- stde->freq = frt_is_read_vint(stde->frq_in); /* else read freq */
2325
- }
1964
+ stde->doc_num += frt_is_read_vint(stde->frq_in);
1965
+ stde->freq = frt_is_read_vint(stde->frq_in);
2326
1966
 
2327
1967
  stde->count++;
2328
1968
 
@@ -2341,7 +1981,7 @@ static bool stde_skip_to(FrtTermDocEnum *tde, int target_doc_num) {
2341
1981
 
2342
1982
  if (stde->doc_freq >= stde->skip_interval
2343
1983
  && target_doc_num > stde->doc_num) { /* optimized case */
2344
- int last_skip_doc;
1984
+ int last_skip_doc_num;
2345
1985
  frt_off_t last_frq_ptr;
2346
1986
  frt_off_t last_prx_ptr;
2347
1987
  int num_skipped;
@@ -2356,17 +1996,17 @@ static bool stde_skip_to(FrtTermDocEnum *tde, int target_doc_num) {
2356
1996
  }
2357
1997
 
2358
1998
  /* scan skip data */
2359
- last_skip_doc = stde->skip_doc;
1999
+ last_skip_doc_num = stde->skip_doc_num;
2360
2000
  last_frq_ptr = frt_is_pos(stde->frq_in);
2361
2001
  last_prx_ptr = -1;
2362
2002
  num_skipped = -1 - (stde->count % stde->skip_interval);
2363
2003
 
2364
- while (target_doc_num > stde->skip_doc) {
2365
- last_skip_doc = stde->skip_doc;
2004
+ while (target_doc_num > stde->skip_doc_num) {
2005
+ last_skip_doc_num = stde->skip_doc_num;
2366
2006
  last_frq_ptr = stde->frq_ptr;
2367
2007
  last_prx_ptr = stde->prx_ptr;
2368
2008
 
2369
- if (0 != stde->skip_doc && stde->skip_doc >= stde->doc_num) {
2009
+ if (0 != stde->skip_doc_num && stde->skip_doc_num >= stde->doc_num) {
2370
2010
  num_skipped += stde->skip_interval;
2371
2011
  }
2372
2012
 
@@ -2374,9 +2014,9 @@ static bool stde_skip_to(FrtTermDocEnum *tde, int target_doc_num) {
2374
2014
  break;
2375
2015
  }
2376
2016
 
2377
- stde->skip_doc += frt_is_read_vint(stde->skip_in);
2378
- stde->frq_ptr += frt_is_read_vint(stde->skip_in);
2379
- stde->prx_ptr += frt_is_read_vint(stde->skip_in);
2017
+ stde->skip_doc_num += frt_is_read_vint(stde->skip_in);
2018
+ stde->frq_ptr += frt_is_read_vint(stde->skip_in);
2019
+ stde->prx_ptr += frt_is_read_vint(stde->skip_in);
2380
2020
 
2381
2021
  stde->skip_count++;
2382
2022
  }
@@ -2386,7 +2026,7 @@ static bool stde_skip_to(FrtTermDocEnum *tde, int target_doc_num) {
2386
2026
  frt_is_seek(stde->frq_in, last_frq_ptr);
2387
2027
  stde->seek_prox(stde, last_prx_ptr);
2388
2028
 
2389
- stde->doc_num = last_skip_doc;
2029
+ stde->doc_num = last_skip_doc_num;
2390
2030
  stde->count += num_skipped;
2391
2031
  }
2392
2032
  }
@@ -2483,35 +2123,30 @@ static bool stpe_next(FrtTermDocEnum *tde) {
2483
2123
  }
2484
2124
  }
2485
2125
 
2486
- static int stpe_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num)
2487
- {
2126
+ static int stpe_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num) {
2488
2127
  (void)tde; (void)docs; (void)freqs; (void)req_num;
2489
2128
  FRT_RAISE(FRT_ARG_ERROR, "TermPosEnum does not handle processing multiple documents"
2490
2129
  " in one call. Use TermDocEnum instead.");
2491
2130
  return -1;
2492
2131
  }
2493
2132
 
2494
- static int stpe_next_position(FrtTermDocEnum *tde)
2495
- {
2133
+ static int stpe_next_position(FrtTermDocEnum *tde) {
2496
2134
  FrtSegmentTermDocEnum *stde = STDE(tde);
2497
2135
  return (stde->prx_cnt-- > 0) ? stde->position += frt_is_read_vint(stde->prx_in)
2498
2136
  : -1;
2499
2137
  }
2500
2138
 
2501
- static void stpe_close(FrtTermDocEnum *tde)
2502
- {
2139
+ static void stpe_close(FrtTermDocEnum *tde) {
2503
2140
  frt_is_close(STDE(tde)->prx_in);
2504
2141
  STDE(tde)->prx_in = NULL;
2505
2142
  stde_close(tde);
2506
2143
  }
2507
2144
 
2508
- static void stpe_skip_prox(FrtSegmentTermDocEnum *stde)
2509
- {
2145
+ static void stpe_skip_prox(FrtSegmentTermDocEnum *stde) {
2510
2146
  frt_is_skip_vints(stde->prx_in, stde->freq);
2511
2147
  }
2512
2148
 
2513
- static void stpe_seek_prox(FrtSegmentTermDocEnum *stde, frt_off_t prx_ptr)
2514
- {
2149
+ static void stpe_seek_prox(FrtSegmentTermDocEnum *stde, frt_off_t prx_ptr) {
2515
2150
  frt_is_seek(stde->prx_in, prx_ptr);
2516
2151
  stde->prx_cnt = 0;
2517
2152
  }
@@ -2520,8 +2155,7 @@ FrtTermDocEnum *frt_stpe_new(FrtTermInfosReader *tir,
2520
2155
  FrtInStream *frq_in,
2521
2156
  FrtInStream *prx_in,
2522
2157
  FrtBitVector *del_docs,
2523
- int skip_interval)
2524
- {
2158
+ int skip_interval) {
2525
2159
  FrtTermDocEnum *tde = frt_stde_new(tir, frq_in, del_docs, skip_interval);
2526
2160
  FrtSegmentTermDocEnum *stde = STDE(tde);
2527
2161
 
@@ -2550,8 +2184,7 @@ FrtTermDocEnum *frt_stpe_new(FrtTermInfosReader *tir,
2550
2184
 
2551
2185
  #define MTDE(tde) ((MultiTermDocEnum *)(tde))
2552
2186
 
2553
- typedef struct MultiTermDocEnum
2554
- {
2187
+ typedef struct MultiTermDocEnum {
2555
2188
  FrtTermDocEnum tde;
2556
2189
  int *starts;
2557
2190
  int base;
@@ -2564,16 +2197,14 @@ typedef struct MultiTermDocEnum
2564
2197
  FrtTermDocEnum *curr_tde;
2565
2198
  } MultiTermDocEnum;
2566
2199
 
2567
- static FrtTermDocEnum *mtde_next_tde(MultiTermDocEnum *mtde)
2568
- {
2200
+ static FrtTermDocEnum *mtde_next_tde(MultiTermDocEnum *mtde) {
2569
2201
  mtde->ptr++;
2570
2202
  while (mtde->ptr < mtde->ir_cnt && !mtde->state[mtde->ptr]) {
2571
2203
  mtde->ptr++;
2572
2204
  }
2573
2205
  if (mtde->ptr >= mtde->ir_cnt) {
2574
2206
  return mtde->curr_tde = NULL;
2575
- }
2576
- else {
2207
+ } else {
2577
2208
  FrtTermDocEnum *tde = mtde->irs_tde[mtde->ptr];
2578
2209
  mtde->base = mtde->starts[mtde->ptr];
2579
2210
  return mtde->curr_tde = tde;
@@ -2587,8 +2218,7 @@ static FrtTermDocEnum *mtde_next_tde(MultiTermDocEnum *mtde)
2587
2218
  }\
2588
2219
  } while (0)
2589
2220
 
2590
- static void mtde_seek_te(FrtTermDocEnum *tde, FrtTermEnum *te)
2591
- {
2221
+ static void mtde_seek_te(FrtTermDocEnum *tde, FrtTermEnum *te) {
2592
2222
  int i;
2593
2223
  MultiTermDocEnum *mtde = MTDE(tde);
2594
2224
  memset(mtde->state, 0, mtde->ir_cnt);
@@ -2598,11 +2228,9 @@ static void mtde_seek_te(FrtTermDocEnum *tde, FrtTermEnum *te)
2598
2228
  mtde->state[index] = 1;
2599
2229
  if (tde->close == stde_close) {
2600
2230
  stde_seek_ti(STDE(tde), MTE(te)->tis + i);
2601
- }
2602
- else if (tde->close == stpe_close) {
2231
+ } else if (tde->close == stpe_close) {
2603
2232
  stpe_seek_ti(STDE(tde), MTE(te)->tis + i);
2604
- }
2605
- else {
2233
+ } else {
2606
2234
  tde->seek(tde, MTE(te)->tews[index].te->field_num, te->curr_term);
2607
2235
  }
2608
2236
  }
@@ -2611,48 +2239,40 @@ static void mtde_seek_te(FrtTermDocEnum *tde, FrtTermEnum *te)
2611
2239
  mtde_next_tde(mtde);
2612
2240
  }
2613
2241
 
2614
- static void mtde_seek(FrtTermDocEnum *tde, int field_num, const char *term)
2615
- {
2242
+ static void mtde_seek(FrtTermDocEnum *tde, int field_num, const char *term) {
2616
2243
  MultiTermDocEnum *mtde = MTDE(tde);
2617
2244
  FrtTermEnum *te = mtde->te;
2618
2245
  char *t;
2619
2246
  te->set_field(te, field_num);
2620
2247
  if (NULL != (t = te->skip_to(te, term)) && 0 == strcmp(term, t)) {
2621
2248
  mtde_seek_te(tde, te);
2622
- }
2623
- else {
2249
+ } else {
2624
2250
  memset(mtde->state, 0, mtde->ir_cnt);
2625
2251
  }
2626
2252
  }
2627
2253
 
2628
- static int mtde_doc_num(FrtTermDocEnum *tde)
2629
- {
2254
+ static int mtde_doc_num(FrtTermDocEnum *tde) {
2630
2255
  CHECK_CURR_TDE("doc_num");
2631
2256
  return MTDE(tde)->base + MTDE(tde)->curr_tde->doc_num(MTDE(tde)->curr_tde);
2632
2257
  }
2633
2258
 
2634
- static int mtde_freq(FrtTermDocEnum *tde)
2635
- {
2259
+ static int mtde_freq(FrtTermDocEnum *tde) {
2636
2260
  CHECK_CURR_TDE("freq");
2637
2261
  return MTDE(tde)->curr_tde->freq(MTDE(tde)->curr_tde);
2638
2262
  }
2639
2263
 
2640
- static bool mtde_next(FrtTermDocEnum *tde)
2641
- {
2264
+ static bool mtde_next(FrtTermDocEnum *tde) {
2642
2265
  MultiTermDocEnum *mtde = MTDE(tde);
2643
2266
  if (NULL != mtde->curr_tde && mtde->curr_tde->next(mtde->curr_tde)) {
2644
2267
  return true;
2645
- }
2646
- else if (mtde_next_tde(mtde)) {
2268
+ } else if (mtde_next_tde(mtde)) {
2647
2269
  return mtde_next(tde);
2648
- }
2649
- else {
2270
+ } else {
2650
2271
  return false;
2651
2272
  }
2652
2273
  }
2653
2274
 
2654
- static int mtde_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num)
2655
- {
2275
+ static int mtde_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num) {
2656
2276
  int i, end = 0, last_end = 0, b;
2657
2277
  MultiTermDocEnum *mtde = MTDE(tde);
2658
2278
  while (true) {
@@ -2661,24 +2281,21 @@ static int mtde_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num)
2661
2281
  freqs + last_end, req_num - last_end);
2662
2282
  if (end == last_end) { /* none left in segment */
2663
2283
  if (!mtde_next_tde(mtde)) return end;
2664
- }
2665
- else { /* got some */
2284
+ } else { /* got some */
2666
2285
  b = mtde->base; /* adjust doc numbers */
2667
2286
  for (i = last_end; i < end; i++) {
2668
2287
  docs[i] += b;
2669
2288
  }
2670
2289
  if (end == req_num) {
2671
2290
  return end;
2672
- }
2673
- else {
2291
+ } else {
2674
2292
  last_end = end;
2675
2293
  }
2676
2294
  }
2677
2295
  }
2678
2296
  }
2679
2297
 
2680
- static bool mtde_skip_to(FrtTermDocEnum *tde, int target_doc_num)
2681
- {
2298
+ static bool mtde_skip_to(FrtTermDocEnum *tde, int target_doc_num) {
2682
2299
  MultiTermDocEnum *mtde = MTDE(tde);
2683
2300
  FrtTermDocEnum *curr_tde;
2684
2301
  while (NULL != (curr_tde = mtde->curr_tde)) {
@@ -2692,8 +2309,7 @@ static bool mtde_skip_to(FrtTermDocEnum *tde, int target_doc_num)
2692
2309
  return false;
2693
2310
  }
2694
2311
 
2695
- static void mtde_close(FrtTermDocEnum *tde)
2696
- {
2312
+ static void mtde_close(FrtTermDocEnum *tde) {
2697
2313
  MultiTermDocEnum *mtde = MTDE(tde);
2698
2314
  FrtTermDocEnum *tmp_tde;
2699
2315
  int i = mtde->ir_cnt;
@@ -2708,8 +2324,7 @@ static void mtde_close(FrtTermDocEnum *tde)
2708
2324
  free(tde);
2709
2325
  }
2710
2326
 
2711
- static FrtTermDocEnum *mtxe_new(FrtMultiReader *mr)
2712
- {
2327
+ static FrtTermDocEnum *mtxe_new(FrtMultiReader *mr) {
2713
2328
  MultiTermDocEnum *mtde = FRT_ALLOC_AND_ZERO(MultiTermDocEnum);
2714
2329
  FrtTermDocEnum *tde = TDE(mtde);
2715
2330
  tde->seek = &mtde_seek;
@@ -2731,8 +2346,7 @@ static FrtTermDocEnum *mtxe_new(FrtMultiReader *mr)
2731
2346
  return tde;
2732
2347
  }
2733
2348
 
2734
- static FrtTermDocEnum *mtde_new(FrtMultiReader *mr)
2735
- {
2349
+ static FrtTermDocEnum *mtde_new(FrtMultiReader *mr) {
2736
2350
  int i;
2737
2351
  FrtTermDocEnum *tde = mtxe_new(mr);
2738
2352
  tde->next_position = NULL;
@@ -2747,14 +2361,12 @@ static FrtTermDocEnum *mtde_new(FrtMultiReader *mr)
2747
2361
  * MultiTermPosEnum
2748
2362
  ****************************************************************************/
2749
2363
 
2750
- static int mtpe_next_position(FrtTermDocEnum *tde)
2751
- {
2364
+ static int mtpe_next_position(FrtTermDocEnum *tde) {
2752
2365
  CHECK_CURR_TDE("next_position");
2753
2366
  return MTDE(tde)->curr_tde->next_position(MTDE(tde)->curr_tde);
2754
2367
  }
2755
2368
 
2756
- static FrtTermDocEnum *mtpe_new(FrtMultiReader *mr)
2757
- {
2369
+ static FrtTermDocEnum *mtpe_new(FrtMultiReader *mr) {
2758
2370
  int i;
2759
2371
  FrtTermDocEnum *tde = mtxe_new(mr);
2760
2372
  tde->next_position = &mtpe_next_position;
@@ -2774,8 +2386,7 @@ static FrtTermDocEnum *mtpe_new(FrtMultiReader *mr)
2774
2386
  #define MTDPE(tde) ((MultipleTermDocPosEnum *)(tde))
2775
2387
  #define MTDPE_POS_QUEUE_INIT_CAPA 8
2776
2388
 
2777
- typedef struct
2778
- {
2389
+ typedef struct {
2779
2390
  FrtTermDocEnum tde;
2780
2391
  int doc_num;
2781
2392
  int freq;
@@ -2790,8 +2401,7 @@ static void tde_destroy(FrtTermDocEnum *tde) {
2790
2401
  tde->close(tde);
2791
2402
  }
2792
2403
 
2793
- static void mtdpe_seek(FrtTermDocEnum *tde, int field_num, const char *term)
2794
- {
2404
+ static void mtdpe_seek(FrtTermDocEnum *tde, int field_num, const char *term) {
2795
2405
  (void)tde;
2796
2406
  (void)field_num;
2797
2407
  (void)term;
@@ -2799,21 +2409,18 @@ static void mtdpe_seek(FrtTermDocEnum *tde, int field_num, const char *term)
2799
2409
  " the #seek operation");
2800
2410
  }
2801
2411
 
2802
- static int mtdpe_doc_num(FrtTermDocEnum *tde)
2803
- {
2412
+ static int mtdpe_doc_num(FrtTermDocEnum *tde) {
2804
2413
  return MTDPE(tde)->doc_num;
2805
2414
  }
2806
2415
 
2807
- static int mtdpe_freq(FrtTermDocEnum *tde)
2808
- {
2416
+ static int mtdpe_freq(FrtTermDocEnum *tde) {
2809
2417
  return MTDPE(tde)->freq;
2810
2418
  }
2811
2419
 
2812
- static bool mtdpe_next(FrtTermDocEnum *tde)
2813
- {
2420
+ static bool mtdpe_next(FrtTermDocEnum *tde) {
2814
2421
  FrtTermDocEnum *sub_tde;
2815
2422
  int pos = 0, freq = 0;
2816
- int doc;
2423
+ int doc_num;
2817
2424
  MultipleTermDocPosEnum *mtdpe = MTDPE(tde);
2818
2425
 
2819
2426
  if (0 == mtdpe->pq->size) {
@@ -2821,7 +2428,7 @@ static bool mtdpe_next(FrtTermDocEnum *tde)
2821
2428
  }
2822
2429
 
2823
2430
  sub_tde = (FrtTermDocEnum *)frt_pq_top(mtdpe->pq);
2824
- doc = sub_tde->doc_num(sub_tde);
2431
+ doc_num = sub_tde->doc_num(sub_tde);
2825
2432
 
2826
2433
  do {
2827
2434
  freq += sub_tde->freq(sub_tde);
@@ -2839,30 +2446,27 @@ static bool mtdpe_next(FrtTermDocEnum *tde)
2839
2446
 
2840
2447
  if (sub_tde->next(sub_tde)) {
2841
2448
  frt_pq_down(mtdpe->pq);
2842
- }
2843
- else {
2449
+ } else {
2844
2450
  sub_tde = (FrtTermDocEnum *)frt_pq_pop(mtdpe->pq);
2845
2451
  sub_tde->close(sub_tde);
2846
2452
  }
2847
2453
  sub_tde = (FrtTermDocEnum *)frt_pq_top(mtdpe->pq);
2848
- } while ((mtdpe->pq->size > 0) && (sub_tde->doc_num(sub_tde) == doc));
2454
+ } while ((mtdpe->pq->size > 0) && (sub_tde->doc_num(sub_tde) == doc_num));
2849
2455
 
2850
2456
  qsort(mtdpe->pos_queue, freq, sizeof(int), &frt_icmp_risky);
2851
2457
 
2852
2458
  mtdpe->pos_queue_index = 0;
2853
2459
  mtdpe->freq = freq;
2854
- mtdpe->doc_num = doc;
2460
+ mtdpe->doc_num = doc_num;
2855
2461
 
2856
2462
  return true;
2857
2463
  }
2858
2464
 
2859
- static bool tdpe_less_than(FrtTermDocEnum *p1, FrtTermDocEnum *p2)
2860
- {
2465
+ static bool tdpe_less_than(FrtTermDocEnum *p1, FrtTermDocEnum *p2) {
2861
2466
  return p1->doc_num(p1) < p2->doc_num(p2);
2862
2467
  }
2863
2468
 
2864
- static bool mtdpe_skip_to(FrtTermDocEnum *tde, int target_doc_num)
2865
- {
2469
+ static bool mtdpe_skip_to(FrtTermDocEnum *tde, int target_doc_num) {
2866
2470
  FrtTermDocEnum *sub_tde;
2867
2471
  FrtPriorityQueue *mtdpe_pq = MTDPE(tde)->pq;
2868
2472
 
@@ -2870,8 +2474,7 @@ static bool mtdpe_skip_to(FrtTermDocEnum *tde, int target_doc_num)
2870
2474
  && (target_doc_num > sub_tde->doc_num(sub_tde))) {
2871
2475
  if (sub_tde->skip_to(sub_tde, target_doc_num)) {
2872
2476
  frt_pq_down(mtdpe_pq);
2873
- }
2874
- else {
2477
+ } else {
2875
2478
  sub_tde = (FrtTermDocEnum *)frt_pq_pop(mtdpe_pq);
2876
2479
  sub_tde->close(sub_tde);
2877
2480
  }
@@ -2879,8 +2482,7 @@ static bool mtdpe_skip_to(FrtTermDocEnum *tde, int target_doc_num)
2879
2482
  return tde->next(tde);
2880
2483
  }
2881
2484
 
2882
- static int mtdpe_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num)
2883
- {
2485
+ static int mtdpe_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num) {
2884
2486
  (void)tde;
2885
2487
  (void)docs;
2886
2488
  (void)freqs;
@@ -2889,21 +2491,18 @@ static int mtdpe_read(FrtTermDocEnum *tde, int *docs, int *freqs, int req_num)
2889
2491
  return req_num;
2890
2492
  }
2891
2493
 
2892
- static int mtdpe_next_position(FrtTermDocEnum *tde)
2893
- {
2494
+ static int mtdpe_next_position(FrtTermDocEnum *tde) {
2894
2495
  return MTDPE(tde)->pos_queue[MTDPE(tde)->pos_queue_index++];
2895
2496
  }
2896
2497
 
2897
- static void mtdpe_close(FrtTermDocEnum *tde)
2898
- {
2498
+ static void mtdpe_close(FrtTermDocEnum *tde) {
2899
2499
  frt_pq_clear(MTDPE(tde)->pq);
2900
2500
  frt_pq_destroy(MTDPE(tde)->pq);
2901
2501
  free(MTDPE(tde)->pos_queue);
2902
2502
  free(tde);
2903
2503
  }
2904
2504
 
2905
- FrtTermDocEnum *frt_mtdpe_new(FrtIndexReader *ir, int field_num, char **terms, int t_cnt)
2906
- {
2505
+ FrtTermDocEnum *frt_mtdpe_new(FrtIndexReader *ir, int field_num, char **terms, int t_cnt) {
2907
2506
  int i;
2908
2507
  MultipleTermDocPosEnum *mtdpe = FRT_ALLOC_AND_ZERO(MultipleTermDocPosEnum);
2909
2508
  FrtTermDocEnum *tde = TDE(mtdpe);
@@ -2918,8 +2517,7 @@ FrtTermDocEnum *frt_mtdpe_new(FrtIndexReader *ir, int field_num, char **terms, i
2918
2517
  tpe->seek(tpe, field_num, terms[i]);
2919
2518
  if (tpe->next(tpe)) {
2920
2519
  frt_pq_push(pq, tpe);
2921
- }
2922
- else {
2520
+ } else {
2923
2521
  tpe->close(tpe);
2924
2522
  }
2925
2523
  }
@@ -2952,26 +2550,22 @@ static void file_name_filter_init(void) {
2952
2550
  frt_register_for_cleanup(fn_extensions, (frt_free_ft)&frt_h_destroy);
2953
2551
  }
2954
2552
 
2955
- bool frt_file_name_filter_is_index_file(const char *file_name, bool include_locks)
2956
- {
2553
+ bool frt_file_name_filter_is_index_file(const char *file_name, bool include_locks) {
2957
2554
  char *p = strrchr(file_name, '.');
2958
2555
  if (NULL == fn_extensions) file_name_filter_init();
2959
2556
  if (NULL != p) {
2960
2557
  char *extension = p + 1;
2961
2558
  if (NULL != frt_h_get(fn_extensions, extension)) {
2962
2559
  return true;
2963
- }
2964
- else if ((*extension == 'f' || *extension == 's')
2560
+ } else if ((*extension == 'f' || *extension == 's')
2965
2561
  && *(extension + 1) >= '0'
2966
2562
  && *(extension + 1) <= '9') {
2967
2563
  return true;
2968
- }
2969
- else if (include_locks && (strcmp(extension, "lck") == 0)
2564
+ } else if (include_locks && (strcmp(extension, "lck") == 0)
2970
2565
  && (strncmp(file_name, "ferret", 6) == 0)) {
2971
2566
  return true;
2972
2567
  }
2973
- }
2974
- else if (0 == strncmp(FRT_SEGMENTS_FILE_NAME, file_name,
2568
+ } else if (0 == strncmp(FRT_SEGMENTS_FILE_NAME, file_name,
2975
2569
  sizeof(FRT_SEGMENTS_FILE_NAME) - 1)) {
2976
2570
  return true;
2977
2571
  }
@@ -3007,8 +2601,8 @@ void frt_deleter_queue_file(FrtDeleter *dlr, const char *file_name) {
3007
2601
  void frt_deleter_delete_file(FrtDeleter *dlr, char *file_name) {
3008
2602
  FrtStore *store = dlr->store;
3009
2603
  FRT_TRY
3010
- if (store->exists(store, file_name)) {
3011
- store->remove(store, file_name);
2604
+ if (store->exists(store, segm_idx_name, file_name)) {
2605
+ store->remove(store, segm_idx_name, file_name);
3012
2606
  }
3013
2607
  frt_hs_del(dlr->pending, file_name);
3014
2608
  FRT_XCATCHALL
@@ -3123,20 +2717,18 @@ void frt_deleter_find_deletable_files(FrtDeleter *dlr) {
3123
2717
  * info: */
3124
2718
  frt_sis_curr_seg_file_name(dfa.curr_seg_file_name, store);
3125
2719
 
3126
- store->each(store, &frt_deleter_find_deletable_files_i, &dfa);
2720
+ store->each(store, segm_idx_name, &frt_deleter_find_deletable_files_i, &dfa);
3127
2721
  frt_h_destroy(dfa.current);
3128
2722
  }
3129
2723
 
3130
- static void deleter_delete_deletable_files(FrtDeleter *dlr)
3131
- {
2724
+ static void deleter_delete_deletable_files(FrtDeleter *dlr) {
3132
2725
  frt_deleter_find_deletable_files(dlr);
3133
2726
  deleter_commit_pending_deletions(dlr);
3134
2727
  }
3135
2728
 
3136
2729
  /*
3137
2730
  TODO: currently not used. Why not?
3138
- static void deleter_clear_pending_deletions(FrtDeleter *dlr)
3139
- {
2731
+ static void deleter_clear_pending_deletions(FrtDeleter *dlr) {
3140
2732
  frt_hs_clear(dlr->pending);
3141
2733
  }
3142
2734
  */
@@ -3147,14 +2739,12 @@ static void deleter_clear_pending_deletions(FrtDeleter *dlr)
3147
2739
  *
3148
2740
  ****************************************************************************/
3149
2741
 
3150
- static void ir_acquire_not_necessary(FrtIndexReader *ir)
3151
- {
2742
+ static void ir_acquire_not_necessary(FrtIndexReader *ir) {
3152
2743
  (void)ir;
3153
2744
  }
3154
2745
 
3155
2746
  #define I64_PFX POSH_I64_PRINTF_PREFIX
3156
- static void ir_acquire_write_lock(FrtIndexReader *ir)
3157
- {
2747
+ static void ir_acquire_write_lock(FrtIndexReader *ir) {
3158
2748
  if (ir->is_stale) {
3159
2749
  FRT_RAISE(FRT_STATE_ERROR, "IndexReader out of date and no longer valid for "
3160
2750
  "delete, undelete, or set_norm operations. To "
@@ -3163,7 +2753,7 @@ static void ir_acquire_write_lock(FrtIndexReader *ir)
3163
2753
  }
3164
2754
 
3165
2755
  if (NULL == ir->write_lock) {
3166
- ir->write_lock = frt_open_lock(ir->store, FRT_WRITE_LOCK_NAME);
2756
+ ir->write_lock = frt_open_lock(ir->store, segm_idx_name, FRT_WRITE_LOCK_NAME);
3167
2757
  if (!ir->write_lock->obtain(ir->write_lock)) {/* obtain write lock */
3168
2758
  FRT_RAISE(FRT_LOCK_ERROR, "Could not obtain write lock when trying to "
3169
2759
  "write changes to the index. Check that there "
@@ -3209,8 +2799,7 @@ static FrtIndexReader *ir_setup(FrtIndexReader *ir, FrtStore *store, FrtSegmentI
3209
2799
  ir->is_owner = is_owner;
3210
2800
  if (is_owner) {
3211
2801
  ir->acquire_write_lock = &ir_acquire_write_lock;
3212
- }
3213
- else {
2802
+ } else {
3214
2803
  ir->acquire_write_lock = &ir_acquire_not_necessary;
3215
2804
  }
3216
2805
 
@@ -3221,8 +2810,7 @@ int frt_ir_doc_freq(FrtIndexReader *ir, ID field, const char *term) {
3221
2810
  int field_num = frt_fis_get_field_num(ir->fis, field);
3222
2811
  if (field_num >= 0) {
3223
2812
  return ir->doc_freq(ir, field_num, term);
3224
- }
3225
- else {
2813
+ } else {
3226
2814
  return 0;
3227
2815
  }
3228
2816
  }
@@ -3242,15 +2830,14 @@ void frt_ir_set_norm(FrtIndexReader *ir, int doc_num, ID field, frt_uchar val) {
3242
2830
  }
3243
2831
  }
3244
2832
 
3245
- frt_uchar *frt_ir_get_norms_i(FrtIndexReader *ir, int field_num)
3246
- {
2833
+ frt_uchar *frt_ir_get_norms_i(FrtIndexReader *ir, int field_num) {
3247
2834
  frt_uchar *norms = NULL;
3248
2835
  if (field_num >= 0) {
3249
2836
  norms = ir->get_norms(ir, field_num);
3250
2837
  }
3251
2838
  if (!norms) {
3252
2839
  if (NULL == ir->fake_norms) {
3253
- ir->fake_norms = FRT_ALLOC_AND_ZERO_N(frt_uchar, ir->max_doc(ir));
2840
+ ir->fake_norms = FRT_ALLOC_AND_ZERO_N(frt_uchar, ir->max_doc_num(ir));
3254
2841
  }
3255
2842
  norms = ir->fake_norms;
3256
2843
  }
@@ -3266,15 +2853,13 @@ frt_uchar *frt_ir_get_norms_into(FrtIndexReader *ir, ID field, frt_uchar *buf) {
3266
2853
  int field_num = frt_fis_get_field_num(ir->fis, field);
3267
2854
  if (field_num >= 0) {
3268
2855
  ir->get_norms_into(ir, field_num, buf);
3269
- }
3270
- else {
3271
- memset(buf, 0, ir->max_doc(ir));
2856
+ } else {
2857
+ memset(buf, 0, ir->max_doc_num(ir));
3272
2858
  }
3273
2859
  return buf;
3274
2860
  }
3275
2861
 
3276
- void frt_ir_undelete_all(FrtIndexReader *ir)
3277
- {
2862
+ void frt_ir_undelete_all(FrtIndexReader *ir) {
3278
2863
  pthread_mutex_lock(&ir->mutex);
3279
2864
  ir->acquire_write_lock(ir);
3280
2865
  ir->undelete_all_i(ir);
@@ -3282,9 +2867,8 @@ void frt_ir_undelete_all(FrtIndexReader *ir)
3282
2867
  pthread_mutex_unlock(&ir->mutex);
3283
2868
  }
3284
2869
 
3285
- void frt_ir_delete_doc(FrtIndexReader *ir, int doc_num)
3286
- {
3287
- if (doc_num >= 0 && doc_num < ir->max_doc(ir)) {
2870
+ void frt_ir_delete_doc(FrtIndexReader *ir, int doc_num) {
2871
+ if (doc_num >= 0 && doc_num < ir->max_doc_num(ir)) {
3288
2872
  pthread_mutex_lock(&ir->mutex);
3289
2873
  ir->acquire_write_lock(ir);
3290
2874
  ir->delete_doc_i(ir, doc_num);
@@ -3342,8 +2926,7 @@ FrtTermDocEnum *frt_ir_term_positions_for(FrtIndexReader *ir, ID field, const ch
3342
2926
  return tde;
3343
2927
  }
3344
2928
 
3345
- static void ir_commit_i(FrtIndexReader *ir)
3346
- {
2929
+ static void ir_commit_i(FrtIndexReader *ir) {
3347
2930
  if (ir->has_changes) {
3348
2931
  if (NULL == ir->deleter && NULL != ir->store) {
3349
2932
  /* In the MultiReader case, we share this deleter across all
@@ -3369,16 +2952,14 @@ static void ir_commit_i(FrtIndexReader *ir)
3369
2952
  frt_close_lock(ir->write_lock);
3370
2953
  ir->write_lock = NULL;
3371
2954
  }
3372
- }
3373
- else {
2955
+ } else {
3374
2956
  ir->commit_i(ir);
3375
2957
  }
3376
2958
  }
3377
2959
  ir->has_changes = false;
3378
2960
  }
3379
2961
 
3380
- void frt_ir_commit(FrtIndexReader *ir)
3381
- {
2962
+ void frt_ir_commit(FrtIndexReader *ir) {
3382
2963
  pthread_mutex_lock(&ir->mutex);
3383
2964
  ir_commit_i(ir);
3384
2965
  pthread_mutex_unlock(&ir->mutex);
@@ -3411,15 +2992,13 @@ void frt_ir_close(FrtIndexReader *ir) {
3411
2992
  /**
3412
2993
  * Don't call this method if the cache already exists
3413
2994
  **/
3414
- void frt_ir_add_cache(FrtIndexReader *ir)
3415
- {
2995
+ void frt_ir_add_cache(FrtIndexReader *ir) {
3416
2996
  if (NULL == ir->cache) {
3417
2997
  ir->cache = frt_co_hash_create();
3418
2998
  }
3419
2999
  }
3420
3000
 
3421
- bool frt_ir_is_latest(FrtIndexReader *ir)
3422
- {
3001
+ bool frt_ir_is_latest(FrtIndexReader *ir) {
3423
3002
  return ir->is_latest_i(ir);
3424
3003
  }
3425
3004
 
@@ -3434,8 +3013,7 @@ typedef struct Norm {
3434
3013
  bool is_dirty : 1;
3435
3014
  } Norm;
3436
3015
 
3437
- static Norm *norm_create(FrtInStream *is, int field_num)
3438
- {
3016
+ static Norm *norm_create(FrtInStream *is, int field_num) {
3439
3017
  Norm *norm = FRT_ALLOC(Norm);
3440
3018
 
3441
3019
  norm->is = is;
@@ -3447,8 +3025,7 @@ static Norm *norm_create(FrtInStream *is, int field_num)
3447
3025
  return norm;
3448
3026
  }
3449
3027
 
3450
- static void norm_destroy(Norm *norm)
3451
- {
3028
+ static void norm_destroy(Norm *norm) {
3452
3029
  frt_is_close(norm->is);
3453
3030
  if (NULL != norm->bytes) {
3454
3031
  free(norm->bytes);
@@ -3457,8 +3034,7 @@ static void norm_destroy(Norm *norm)
3457
3034
  }
3458
3035
 
3459
3036
  static void norm_rewrite(Norm *norm, FrtStore *store, FrtDeleter *dlr,
3460
- FrtSegmentInfo *si, int doc_count)
3461
- {
3037
+ FrtSegmentInfo *si, int doc_count) {
3462
3038
  FrtOutStream *os;
3463
3039
  char norm_file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
3464
3040
  const int field_num = norm->field_num;
@@ -3468,7 +3044,7 @@ static void norm_rewrite(Norm *norm, FrtStore *store, FrtDeleter *dlr,
3468
3044
  }
3469
3045
  frt_si_advance_norm_gen(si, field_num);
3470
3046
  si_norm_file_name(si, norm_file_name, field_num);
3471
- os = store->new_output(store, norm_file_name);
3047
+ os = store->new_output(store, segm_idx_name, norm_file_name);
3472
3048
  frt_os_write_bytes(os, norm->bytes, doc_count);
3473
3049
  frt_os_close(os);
3474
3050
  norm->is_dirty = false;
@@ -3492,8 +3068,7 @@ static FrtFieldsReader *sr_fr(FrtSegmentReader *sr) {
3492
3068
  return fr;
3493
3069
  }
3494
3070
 
3495
- static bool sr_is_deleted_i(FrtSegmentReader *sr, int doc_num)
3496
- {
3071
+ static bool sr_is_deleted_i(FrtSegmentReader *sr, int doc_num) {
3497
3072
  return (NULL != sr->deleted_docs && frt_bv_get(sr->deleted_docs, doc_num));
3498
3073
  }
3499
3074
 
@@ -3561,10 +3136,9 @@ static void sr_set_deleter_i(FrtIndexReader *ir, FrtDeleter *deleter) {
3561
3136
  ir->deleter = deleter;
3562
3137
  }
3563
3138
 
3564
- static void bv_write(FrtBitVector *bv, FrtStore *store, char *name)
3565
- {
3139
+ static void bv_write(FrtBitVector *bv, FrtStore *store, char *name) {
3566
3140
  int i;
3567
- FrtOutStream *os = store->new_output(store, name);
3141
+ FrtOutStream *os = store->new_output(store, segm_idx_name, name);
3568
3142
  frt_os_write_vint(os, bv->size);
3569
3143
  for (i = ((bv->size-1) >> 5); i >= 0; i--) {
3570
3144
  frt_os_write_u32(os, bv->bits[i]);
@@ -3572,11 +3146,10 @@ static void bv_write(FrtBitVector *bv, FrtStore *store, char *name)
3572
3146
  frt_os_close(os);
3573
3147
  }
3574
3148
 
3575
- static FrtBitVector *bv_read(FrtStore *store, char *name)
3576
- {
3149
+ static FrtBitVector *bv_read(FrtStore *store, char *name) {
3577
3150
  int i;
3578
3151
  volatile bool success = false;
3579
- FrtInStream *volatile is = store->open_input(store, name);
3152
+ FrtInStream *volatile is = store->open_input(store, segm_idx_name, name);
3580
3153
  FrtBitVector *volatile bv = FRT_ALLOC_AND_ZERO(FrtBitVector);
3581
3154
  bv->size = (int)frt_is_read_vint(is);
3582
3155
  bv->capa = (bv->size >> 5) + 1;
@@ -3595,13 +3168,11 @@ static FrtBitVector *bv_read(FrtStore *store, char *name)
3595
3168
  return bv;
3596
3169
  }
3597
3170
 
3598
- static bool sr_is_latest_i(FrtIndexReader *ir)
3599
- {
3171
+ static bool sr_is_latest_i(FrtIndexReader *ir) {
3600
3172
  return (frt_sis_read_current_version(ir->store) == ir->sis->version);
3601
3173
  }
3602
3174
 
3603
- static void sr_commit_i(FrtIndexReader *ir)
3604
- {
3175
+ static void sr_commit_i(FrtIndexReader *ir) {
3605
3176
  FrtSegmentInfo *si = SR(ir)->si;
3606
3177
  char *segment = SR(ir)->si->name;
3607
3178
  char tmp_file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
@@ -3614,8 +3185,7 @@ static void sr_commit_i(FrtIndexReader *ir)
3614
3185
  if (SR(ir)->undelete_all) {
3615
3186
  si->del_gen = -1;
3616
3187
  SR(ir)->undelete_all = false;
3617
- }
3618
- else {
3188
+ } else {
3619
3189
  /* (SR(ir)->deleted_docs_dirty) re-write deleted */
3620
3190
  si->del_gen++;
3621
3191
  frt_fn_for_generation(tmp_file_name, segment, "del", si->del_gen);
@@ -3658,8 +3228,7 @@ static void sr_close_i(FrtIndexReader *ir) {
3658
3228
  }
3659
3229
  }
3660
3230
 
3661
- static int sr_num_docs(FrtIndexReader *ir)
3662
- {
3231
+ static int sr_num_docs(FrtIndexReader *ir) {
3663
3232
  int num_docs;
3664
3233
 
3665
3234
  pthread_mutex_lock(&ir->mutex);
@@ -3671,13 +3240,11 @@ static int sr_num_docs(FrtIndexReader *ir)
3671
3240
  return num_docs;
3672
3241
  }
3673
3242
 
3674
- static int sr_max_doc(FrtIndexReader *ir)
3675
- {
3243
+ static int sr_max_doc_num(FrtIndexReader *ir) {
3676
3244
  return SR(ir)->fr->size;
3677
3245
  }
3678
3246
 
3679
- static FrtDocument *sr_get_doc(FrtIndexReader *ir, int doc_num)
3680
- {
3247
+ static FrtDocument *sr_get_doc(FrtIndexReader *ir, int doc_num) {
3681
3248
  FrtDocument *doc;
3682
3249
  pthread_mutex_lock(&ir->mutex);
3683
3250
  if (sr_is_deleted_i(SR(ir), doc_num)) {
@@ -3689,8 +3256,7 @@ static FrtDocument *sr_get_doc(FrtIndexReader *ir, int doc_num)
3689
3256
  return doc;
3690
3257
  }
3691
3258
 
3692
- static FrtLazyDoc *sr_get_lazy_doc(FrtIndexReader *ir, int doc_num)
3693
- {
3259
+ static FrtLazyDoc *sr_get_lazy_doc(FrtIndexReader *ir, int doc_num) {
3694
3260
  FrtLazyDoc *lazy_doc;
3695
3261
  pthread_mutex_lock(&ir->mutex);
3696
3262
  if (sr_is_deleted_i(SR(ir), doc_num)) {
@@ -3702,8 +3268,7 @@ static FrtLazyDoc *sr_get_lazy_doc(FrtIndexReader *ir, int doc_num)
3702
3268
  return lazy_doc;
3703
3269
  }
3704
3270
 
3705
- static frt_uchar *sr_get_norms(FrtIndexReader *ir, int field_num)
3706
- {
3271
+ static frt_uchar *sr_get_norms(FrtIndexReader *ir, int field_num) {
3707
3272
  frt_uchar *norms;
3708
3273
  pthread_mutex_lock(&ir->mutex);
3709
3274
  norms = sr_get_norms_i(SR(ir), field_num);
@@ -3712,23 +3277,20 @@ static frt_uchar *sr_get_norms(FrtIndexReader *ir, int field_num)
3712
3277
  }
3713
3278
 
3714
3279
  static frt_uchar *sr_get_norms_into(FrtIndexReader *ir, int field_num,
3715
- frt_uchar *buf)
3716
- {
3280
+ frt_uchar *buf) {
3717
3281
  pthread_mutex_lock(&ir->mutex);
3718
3282
  sr_get_norms_into_i(SR(ir), field_num, buf);
3719
3283
  pthread_mutex_unlock(&ir->mutex);
3720
3284
  return buf;
3721
3285
  }
3722
3286
 
3723
- static FrtTermEnum *sr_terms(FrtIndexReader *ir, int field_num)
3724
- {
3287
+ static FrtTermEnum *sr_terms(FrtIndexReader *ir, int field_num) {
3725
3288
  FrtTermEnum *te = SR(ir)->tir->orig_te;
3726
3289
  te = frt_ste_clone(te);
3727
3290
  return ste_set_field(te, field_num);
3728
3291
  }
3729
3292
 
3730
- static FrtTermEnum *sr_terms_from(FrtIndexReader *ir, int field_num, const char *term)
3731
- {
3293
+ static FrtTermEnum *sr_terms_from(FrtIndexReader *ir, int field_num, const char *term) {
3732
3294
  FrtTermEnum *te = SR(ir)->tir->orig_te;
3733
3295
  te = frt_ste_clone(te);
3734
3296
  ste_set_field(te, field_num);
@@ -3736,20 +3298,17 @@ static FrtTermEnum *sr_terms_from(FrtIndexReader *ir, int field_num, const char
3736
3298
  return te;
3737
3299
  }
3738
3300
 
3739
- static int sr_doc_freq(FrtIndexReader *ir, int field_num, const char *term)
3740
- {
3301
+ static int sr_doc_freq(FrtIndexReader *ir, int field_num, const char *term) {
3741
3302
  FrtTermInfo *ti = frt_tir_get_ti(frt_tir_set_field(SR(ir)->tir, field_num), term);
3742
3303
  return ti ? ti->doc_freq : 0;
3743
3304
  }
3744
3305
 
3745
- static FrtTermDocEnum *sr_term_docs(FrtIndexReader *ir)
3746
- {
3306
+ static FrtTermDocEnum *sr_term_docs(FrtIndexReader *ir) {
3747
3307
  return frt_stde_new(SR(ir)->tir, SR(ir)->frq_in, SR(ir)->deleted_docs,
3748
3308
  STE(SR(ir)->tir->orig_te)->skip_interval);
3749
3309
  }
3750
3310
 
3751
- static FrtTermDocEnum *sr_term_positions(FrtIndexReader *ir)
3752
- {
3311
+ static FrtTermDocEnum *sr_term_positions(FrtIndexReader *ir) {
3753
3312
  FrtSegmentReader *sr = SR(ir);
3754
3313
  return frt_stpe_new(sr->tir, sr->frq_in, sr->prx_in, sr->deleted_docs,
3755
3314
  STE(sr->tir->orig_te)->skip_interval);
@@ -3766,8 +3325,7 @@ static FrtTermVector *sr_term_vector(FrtIndexReader *ir, int doc_num, ID field)
3766
3325
  return frt_fr_get_field_tv(fr, doc_num, fi->number);
3767
3326
  }
3768
3327
 
3769
- static FrtHash *sr_term_vectors(FrtIndexReader *ir, int doc_num)
3770
- {
3328
+ static FrtHash *sr_term_vectors(FrtIndexReader *ir, int doc_num) {
3771
3329
  FrtFieldsReader *fr;
3772
3330
  if (!SR(ir)->fr || NULL == (fr = sr_fr(SR(ir)))) {
3773
3331
  return NULL;
@@ -3776,8 +3334,7 @@ static FrtHash *sr_term_vectors(FrtIndexReader *ir, int doc_num)
3776
3334
  return frt_fr_get_tv(fr, doc_num);
3777
3335
  }
3778
3336
 
3779
- static bool sr_is_deleted(FrtIndexReader *ir, int doc_num)
3780
- {
3337
+ static bool sr_is_deleted(FrtIndexReader *ir, int doc_num) {
3781
3338
  bool is_del;
3782
3339
 
3783
3340
  pthread_mutex_lock(&ir->mutex);
@@ -3787,13 +3344,11 @@ static bool sr_is_deleted(FrtIndexReader *ir, int doc_num)
3787
3344
  return is_del;
3788
3345
  }
3789
3346
 
3790
- static bool sr_has_deletions(FrtIndexReader *ir)
3791
- {
3347
+ static bool sr_has_deletions(FrtIndexReader *ir) {
3792
3348
  return NULL != SR(ir)->deleted_docs;
3793
3349
  }
3794
3350
 
3795
- static void sr_open_norms(FrtIndexReader *ir, FrtStore *cfs_store)
3796
- {
3351
+ static void sr_open_norms(FrtIndexReader *ir, FrtStore *cfs_store) {
3797
3352
  int i;
3798
3353
  FrtSegmentInfo *si = SR(ir)->si;
3799
3354
  char file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
@@ -3801,7 +3356,7 @@ static void sr_open_norms(FrtIndexReader *ir, FrtStore *cfs_store)
3801
3356
  for (i = si->norm_gens_size - 1; i >= 0; i--) {
3802
3357
  FrtStore *store = ir->store;
3803
3358
  if (si_norm_file_name(si, file_name, i)) {
3804
- FrtInStream *is = store->open_input(store, file_name);
3359
+ FrtInStream *is = store->open_input(store, segm_idx_name, file_name);
3805
3360
  FRT_DEREF(is);
3806
3361
  frt_h_set_int(SR(ir)->norms, i, norm_create(is, i));
3807
3362
  }
@@ -3809,15 +3364,14 @@ static void sr_open_norms(FrtIndexReader *ir, FrtStore *cfs_store)
3809
3364
  SR(ir)->norms_dirty = false;
3810
3365
  }
3811
3366
 
3812
- static FrtIndexReader *sr_setup_i(FrtSegmentReader *sr)
3813
- {
3367
+ static FrtIndexReader *sr_setup_i(FrtSegmentReader *sr) {
3814
3368
  FrtStore *volatile store = sr->si->store;
3815
3369
  FrtIndexReader *ir = IR(sr);
3816
3370
  char file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
3817
3371
  char *sr_segment = sr->si->name;
3818
3372
 
3819
3373
  ir->num_docs = &sr_num_docs;
3820
- ir->max_doc = &sr_max_doc;
3374
+ ir->max_doc_num = &sr_max_doc_num;
3821
3375
  ir->get_doc = &sr_get_doc;
3822
3376
  ir->get_lazy_doc = &sr_get_lazy_doc;
3823
3377
  ir->get_norms = &sr_get_norms;
@@ -3859,12 +3413,12 @@ static FrtIndexReader *sr_setup_i(FrtSegmentReader *sr)
3859
3413
  }
3860
3414
 
3861
3415
  sprintf(file_name, "%s.frq", sr_segment);
3862
- sr->frq_in = store->open_input(store, file_name);
3416
+ sr->frq_in = store->open_input(store, segm_idx_name, file_name);
3863
3417
  sprintf(file_name, "%s.prx", sr_segment);
3864
- sr->prx_in = store->open_input(store, file_name);
3418
+ sr->prx_in = store->open_input(store, segm_idx_name, file_name);
3865
3419
  sr->norms = frt_h_new_int((frt_free_ft)&norm_destroy);
3866
3420
  sr_open_norms(ir, store);
3867
- if (fis_has_vectors(ir->fis)) {
3421
+ if (frt_fis_has_vectors(ir->fis)) {
3868
3422
  frb_thread_key_create(&sr->thread_fr, NULL);
3869
3423
  sr->fr_bucket = frt_ary_new();
3870
3424
  }
@@ -3894,8 +3448,7 @@ static FrtIndexReader *sr_open(FrtSegmentInfos *sis, FrtFieldInfos *fis, int si_
3894
3448
 
3895
3449
  #define MR(ir) ((FrtMultiReader *)(ir))
3896
3450
 
3897
- static int mr_reader_index_i(FrtMultiReader *mr, int doc_num)
3898
- {
3451
+ static int mr_reader_index_i(FrtMultiReader *mr, int doc_num) {
3899
3452
  int lo = 0; /* search @starts array */
3900
3453
  int hi = mr->r_cnt - 1; /* for first element less */
3901
3454
  int mid;
@@ -3906,11 +3459,9 @@ static int mr_reader_index_i(FrtMultiReader *mr, int doc_num)
3906
3459
  mid_value = mr->starts[mid];
3907
3460
  if (doc_num < mid_value) {
3908
3461
  hi = mid - 1;
3909
- }
3910
- else if (doc_num > mid_value) {
3462
+ } else if (doc_num > mid_value) {
3911
3463
  lo = mid + 1;
3912
- }
3913
- else { /* found a match */
3464
+ } else { /* found a match */
3914
3465
  while ((mid+1 < mr->r_cnt) && (mr->starts[mid+1] == mid_value)) {
3915
3466
  mid += 1; /* scan to last match in case we have empty segments */
3916
3467
  }
@@ -3920,8 +3471,7 @@ static int mr_reader_index_i(FrtMultiReader *mr, int doc_num)
3920
3471
  return hi;
3921
3472
  }
3922
3473
 
3923
- static int mr_num_docs(FrtIndexReader *ir)
3924
- {
3474
+ static int mr_num_docs(FrtIndexReader *ir) {
3925
3475
  int i, num_docs;
3926
3476
  pthread_mutex_lock(&ir->mutex);
3927
3477
  if (MR(ir)->num_docs_cache == -1) {
@@ -3938,39 +3488,33 @@ static int mr_num_docs(FrtIndexReader *ir)
3938
3488
  return num_docs;
3939
3489
  }
3940
3490
 
3941
- static int mr_max_doc(FrtIndexReader *ir)
3942
- {
3943
- return MR(ir)->max_doc;
3491
+ static int mr_max_doc_num(FrtIndexReader *ir) {
3492
+ return MR(ir)->max_doc_num;
3944
3493
  }
3945
3494
 
3946
3495
  #define GET_READER()\
3947
3496
  int i = mr_reader_index_i(MR(ir), doc_num);\
3948
3497
  FrtIndexReader *reader = MR(ir)->sub_readers[i]
3949
3498
 
3950
- static FrtDocument *mr_get_doc(FrtIndexReader *ir, int doc_num)
3951
- {
3499
+ static FrtDocument *mr_get_doc(FrtIndexReader *ir, int doc_num) {
3952
3500
  GET_READER();
3953
3501
  return reader->get_doc(reader, doc_num - MR(ir)->starts[i]);
3954
3502
  }
3955
3503
 
3956
- static FrtLazyDoc *mr_get_lazy_doc(FrtIndexReader *ir, int doc_num)
3957
- {
3504
+ static FrtLazyDoc *mr_get_lazy_doc(FrtIndexReader *ir, int doc_num) {
3958
3505
  GET_READER();
3959
3506
  return reader->get_lazy_doc(reader, doc_num - MR(ir)->starts[i]);
3960
3507
  }
3961
3508
 
3962
- int frt_mr_get_field_num(FrtMultiReader *mr, int ir_num, int f_num)
3963
- {
3509
+ int frt_mr_get_field_num(FrtMultiReader *mr, int ir_num, int f_num) {
3964
3510
  if (mr->field_num_map) {
3965
3511
  return mr->field_num_map[ir_num][f_num];
3966
- }
3967
- else {
3512
+ } else {
3968
3513
  return f_num;
3969
3514
  }
3970
3515
  }
3971
3516
 
3972
- static frt_uchar *mr_get_norms(FrtIndexReader *ir, int field_num)
3973
- {
3517
+ static frt_uchar *mr_get_norms(FrtIndexReader *ir, int field_num) {
3974
3518
  frt_uchar *bytes;
3975
3519
 
3976
3520
  pthread_mutex_lock(&ir->mutex);
@@ -3979,7 +3523,7 @@ static frt_uchar *mr_get_norms(FrtIndexReader *ir, int field_num)
3979
3523
  int i;
3980
3524
  const int mr_reader_cnt = MR(ir)->r_cnt;
3981
3525
 
3982
- bytes = FRT_ALLOC_AND_ZERO_N(frt_uchar, MR(ir)->max_doc);
3526
+ bytes = FRT_ALLOC_AND_ZERO_N(frt_uchar, MR(ir)->max_doc_num);
3983
3527
 
3984
3528
  for (i = 0; i < mr_reader_cnt; i++) {
3985
3529
  int fnum = frt_mr_get_field_num(MR(ir), i, field_num);
@@ -3995,16 +3539,14 @@ static frt_uchar *mr_get_norms(FrtIndexReader *ir, int field_num)
3995
3539
  return bytes;
3996
3540
  }
3997
3541
 
3998
- static frt_uchar *mr_get_norms_into(FrtIndexReader *ir, int field_num, frt_uchar *buf)
3999
- {
3542
+ static frt_uchar *mr_get_norms_into(FrtIndexReader *ir, int field_num, frt_uchar *buf) {
4000
3543
  frt_uchar *bytes;
4001
3544
 
4002
3545
  pthread_mutex_lock(&ir->mutex);
4003
3546
  bytes = (frt_uchar *)frt_h_get_int(MR(ir)->norms_cache, field_num);
4004
3547
  if (NULL != bytes) {
4005
- memcpy(buf, bytes, MR(ir)->max_doc);
4006
- }
4007
- else {
3548
+ memcpy(buf, bytes, MR(ir)->max_doc_num);
3549
+ } else {
4008
3550
  int i;
4009
3551
  const int mr_reader_cnt = MR(ir)->r_cnt;
4010
3552
  for (i = 0; i < mr_reader_cnt; i++) {
@@ -4019,18 +3561,15 @@ static frt_uchar *mr_get_norms_into(FrtIndexReader *ir, int field_num, frt_uchar
4019
3561
  return buf;
4020
3562
  }
4021
3563
 
4022
- static FrtTermEnum *mr_terms(FrtIndexReader *ir, int field_num)
4023
- {
3564
+ static FrtTermEnum *mr_terms(FrtIndexReader *ir, int field_num) {
4024
3565
  return frt_mte_new(MR(ir), field_num, NULL);
4025
3566
  }
4026
3567
 
4027
- static FrtTermEnum *mr_terms_from(FrtIndexReader *ir, int field_num, const char *term)
4028
- {
3568
+ static FrtTermEnum *mr_terms_from(FrtIndexReader *ir, int field_num, const char *term) {
4029
3569
  return frt_mte_new(MR(ir), field_num, term);
4030
3570
  }
4031
3571
 
4032
- static int mr_doc_freq(FrtIndexReader *ir, int field_num, const char *t)
4033
- {
3572
+ static int mr_doc_freq(FrtIndexReader *ir, int field_num, const char *t) {
4034
3573
  int total = 0; /* sum freqs in segments */
4035
3574
  int i = MR(ir)->r_cnt;
4036
3575
  for (i = MR(ir)->r_cnt - 1; i >= 0; i--) {
@@ -4043,13 +3582,11 @@ static int mr_doc_freq(FrtIndexReader *ir, int field_num, const char *t)
4043
3582
  return total;
4044
3583
  }
4045
3584
 
4046
- static FrtTermDocEnum *mr_term_docs(FrtIndexReader *ir)
4047
- {
3585
+ static FrtTermDocEnum *mr_term_docs(FrtIndexReader *ir) {
4048
3586
  return mtde_new(MR(ir));
4049
3587
  }
4050
3588
 
4051
- static FrtTermDocEnum *mr_term_positions(FrtIndexReader *ir)
4052
- {
3589
+ static FrtTermDocEnum *mr_term_positions(FrtIndexReader *ir) {
4053
3590
  return mtpe_new(MR(ir));
4054
3591
  }
4055
3592
 
@@ -4058,25 +3595,21 @@ static FrtTermVector *mr_term_vector(FrtIndexReader *ir, int doc_num, ID field)
4058
3595
  return reader->term_vector(reader, doc_num - MR(ir)->starts[i], field);
4059
3596
  }
4060
3597
 
4061
- static FrtHash *mr_term_vectors(FrtIndexReader *ir, int doc_num)
4062
- {
3598
+ static FrtHash *mr_term_vectors(FrtIndexReader *ir, int doc_num) {
4063
3599
  GET_READER();
4064
3600
  return reader->term_vectors(reader, doc_num - MR(ir)->starts[i]);
4065
3601
  }
4066
3602
 
4067
- static bool mr_is_deleted(FrtIndexReader *ir, int doc_num)
4068
- {
3603
+ static bool mr_is_deleted(FrtIndexReader *ir, int doc_num) {
4069
3604
  GET_READER();
4070
3605
  return reader->is_deleted(reader, doc_num - MR(ir)->starts[i]);
4071
3606
  }
4072
3607
 
4073
- static bool mr_has_deletions(FrtIndexReader *ir)
4074
- {
3608
+ static bool mr_has_deletions(FrtIndexReader *ir) {
4075
3609
  return MR(ir)->has_deletions;
4076
3610
  }
4077
3611
 
4078
- static void mr_set_norm_i(FrtIndexReader *ir, int doc_num, int field_num, frt_uchar val)
4079
- {
3612
+ static void mr_set_norm_i(FrtIndexReader *ir, int doc_num, int field_num, frt_uchar val) {
4080
3613
  int i = mr_reader_index_i(MR(ir), doc_num);
4081
3614
  int fnum = frt_mr_get_field_num(MR(ir), i, field_num);
4082
3615
  if (fnum >= 0) {
@@ -4087,8 +3620,7 @@ static void mr_set_norm_i(FrtIndexReader *ir, int doc_num, int field_num, frt_uc
4087
3620
  }
4088
3621
  }
4089
3622
 
4090
- static void mr_delete_doc_i(FrtIndexReader *ir, int doc_num)
4091
- {
3623
+ static void mr_delete_doc_i(FrtIndexReader *ir, int doc_num) {
4092
3624
  GET_READER();
4093
3625
  MR(ir)->num_docs_cache = -1; /* invalidate cache */
4094
3626
 
@@ -4098,8 +3630,7 @@ static void mr_delete_doc_i(FrtIndexReader *ir, int doc_num)
4098
3630
  ir->has_changes = true;
4099
3631
  }
4100
3632
 
4101
- static void mr_undelete_all_i(FrtIndexReader *ir)
4102
- {
3633
+ static void mr_undelete_all_i(FrtIndexReader *ir) {
4103
3634
  int i;
4104
3635
  const int mr_reader_cnt = MR(ir)->r_cnt;
4105
3636
 
@@ -4112,8 +3643,7 @@ static void mr_undelete_all_i(FrtIndexReader *ir)
4112
3643
  ir->has_changes = true;
4113
3644
  }
4114
3645
 
4115
- static void mr_set_deleter_i(FrtIndexReader *ir, FrtDeleter *deleter)
4116
- {
3646
+ static void mr_set_deleter_i(FrtIndexReader *ir, FrtDeleter *deleter) {
4117
3647
  int i;
4118
3648
  ir->deleter = deleter;
4119
3649
  for (i = MR(ir)->r_cnt - 1; i >= 0; i--) {
@@ -4122,8 +3652,7 @@ static void mr_set_deleter_i(FrtIndexReader *ir, FrtDeleter *deleter)
4122
3652
  }
4123
3653
  }
4124
3654
 
4125
- static bool mr_is_latest_i(FrtIndexReader *ir)
4126
- {
3655
+ static bool mr_is_latest_i(FrtIndexReader *ir) {
4127
3656
  int i;
4128
3657
  const int mr_reader_cnt = MR(ir)->r_cnt;
4129
3658
  for (i = 0; i < mr_reader_cnt; i++) {
@@ -4134,8 +3663,7 @@ static bool mr_is_latest_i(FrtIndexReader *ir)
4134
3663
  return true;
4135
3664
  }
4136
3665
 
4137
- static void mr_commit_i(FrtIndexReader *ir)
4138
- {
3666
+ static void mr_commit_i(FrtIndexReader *ir) {
4139
3667
  int i;
4140
3668
  const int mr_reader_cnt = MR(ir)->r_cnt;
4141
3669
  for (i = 0; i < mr_reader_cnt; i++) {
@@ -4144,8 +3672,7 @@ static void mr_commit_i(FrtIndexReader *ir)
4144
3672
  }
4145
3673
  }
4146
3674
 
4147
- static void mr_close_i(FrtIndexReader *ir)
4148
- {
3675
+ static void mr_close_i(FrtIndexReader *ir) {
4149
3676
  int i;
4150
3677
  const int mr_reader_cnt = MR(ir)->r_cnt;
4151
3678
  for (i = 0; i < mr_reader_cnt; i++) {
@@ -4167,7 +3694,7 @@ FrtMultiReader *frt_mr_init(FrtMultiReader *mr, FrtIndexReader **sub_readers, co
4167
3694
 
4168
3695
  mr->sub_readers = sub_readers;
4169
3696
  mr->r_cnt = r_cnt;
4170
- mr->max_doc = 0;
3697
+ mr->max_doc_num = 0;
4171
3698
  mr->num_docs_cache = -1;
4172
3699
  mr->has_deletions = false;
4173
3700
  mr->starts = FRT_ALLOC_N(int, (r_cnt+1));
@@ -4175,18 +3702,18 @@ FrtMultiReader *frt_mr_init(FrtMultiReader *mr, FrtIndexReader **sub_readers, co
4175
3702
  for (i = 0; i < r_cnt; i++) {
4176
3703
  FrtIndexReader *sub_reader = sub_readers[i];
4177
3704
  FRT_REF(sub_reader);
4178
- mr->starts[i] = mr->max_doc;
4179
- mr->max_doc += sub_reader->max_doc(sub_reader); /* compute max_docs */
3705
+ mr->starts[i] = mr->max_doc_num;
3706
+ mr->max_doc_num += sub_reader->max_doc_num(sub_reader); /* compute max_docs */
4180
3707
 
4181
3708
  if (sub_reader->has_deletions(sub_reader)) {
4182
3709
  mr->has_deletions = true;
4183
3710
  }
4184
3711
  }
4185
- mr->starts[r_cnt] = mr->max_doc;
3712
+ mr->starts[r_cnt] = mr->max_doc_num;
4186
3713
  mr->norms_cache = frt_h_new_int(&free);
4187
3714
 
4188
3715
  ir->num_docs = &mr_num_docs;
4189
- ir->max_doc = &mr_max_doc;
3716
+ ir->max_doc_num = &mr_max_doc_num;
4190
3717
  ir->get_doc = &mr_get_doc;
4191
3718
  ir->get_lazy_doc = &mr_get_lazy_doc;
4192
3719
  ir->get_norms = &mr_get_norms;
@@ -4351,8 +3878,7 @@ FrtIndexReader *frt_ir_open(FrtIndexReader *ir, FrtStore *store) {
4351
3878
  *
4352
3879
  ****************************************************************************/
4353
3880
 
4354
- static FrtOccurence *occ_new(FrtMemoryPool *mp, int pos)
4355
- {
3881
+ static FrtOccurence *occ_new(FrtMemoryPool *mp, int pos) {
4356
3882
  FrtOccurence *occ = FRT_MP_ALLOC(mp, FrtOccurence);
4357
3883
  occ->pos = pos;
4358
3884
  occ->next = NULL;
@@ -4365,8 +3891,7 @@ static FrtOccurence *occ_new(FrtMemoryPool *mp, int pos)
4365
3891
  *
4366
3892
  ****************************************************************************/
4367
3893
 
4368
- FrtPosting *frt_p_new(FrtMemoryPool *mp, int doc_num, int pos)
4369
- {
3894
+ FrtPosting *frt_p_new(FrtMemoryPool *mp, int doc_num, int pos) {
4370
3895
  FrtPosting *p = FRT_MP_ALLOC(mp, FrtPosting);
4371
3896
  p->doc_num = doc_num;
4372
3897
  p->first_occ = occ_new(mp, pos);
@@ -4382,8 +3907,7 @@ FrtPosting *frt_p_new(FrtMemoryPool *mp, int doc_num, int pos)
4382
3907
  ****************************************************************************/
4383
3908
 
4384
3909
  FrtPostingList *frt_pl_new(FrtMemoryPool *mp, const char *term,
4385
- int term_len, FrtPosting *p)
4386
- {
3910
+ int term_len, FrtPosting *p) {
4387
3911
  // TODO account for term_len as measured in the original text vs utf8 term_len of term
4388
3912
  FrtPostingList *pl = FRT_MP_ALLOC(mp, FrtPostingList);
4389
3913
  pl->term = (char *)frt_mp_memdup(mp, term, term_len + 1);
@@ -4393,20 +3917,17 @@ FrtPostingList *frt_pl_new(FrtMemoryPool *mp, const char *term,
4393
3917
  return pl;
4394
3918
  }
4395
3919
 
4396
- void frt_pl_add_occ(FrtMemoryPool *mp, FrtPostingList *pl, int pos)
4397
- {
3920
+ void frt_pl_add_occ(FrtMemoryPool *mp, FrtPostingList *pl, int pos) {
4398
3921
  pl->last_occ = pl->last_occ->next = occ_new(mp, pos);
4399
3922
  pl->last->freq++;
4400
3923
  }
4401
3924
 
4402
- static void pl_add_posting(FrtPostingList *pl, FrtPosting *p)
4403
- {
3925
+ static void pl_add_posting(FrtPostingList *pl, FrtPosting *p) {
4404
3926
  pl->last = pl->last->next = p;
4405
3927
  pl->last_occ = p->first_occ;
4406
3928
  }
4407
3929
 
4408
- int frt_pl_cmp(const FrtPostingList **pl1, const FrtPostingList **pl2)
4409
- {
3930
+ int frt_pl_cmp(const FrtPostingList **pl1, const FrtPostingList **pl2) {
4410
3931
  return strcmp((*pl1)->term, (*pl2)->term);
4411
3932
  }
4412
3933
 
@@ -4416,8 +3937,7 @@ int frt_pl_cmp(const FrtPostingList **pl1, const FrtPostingList **pl2)
4416
3937
  *
4417
3938
  ****************************************************************************/
4418
3939
 
4419
- static FrtFieldInverter *fld_inv_new(FrtDocWriter *dw, FrtFieldInfo *fi)
4420
- {
3940
+ static FrtFieldInverter *fld_inv_new(FrtDocWriter *dw, FrtFieldInfo *fi) {
4421
3941
  FrtFieldInverter *fld_inv = FRT_MP_ALLOC(dw->mp, FrtFieldInverter);
4422
3942
  fld_inv->is_tokenized = bits_is_tokenized(fi->bits);
4423
3943
  fld_inv->store_term_vector = bits_store_term_vector(fi->bits);
@@ -4434,8 +3954,7 @@ static FrtFieldInverter *fld_inv_new(FrtDocWriter *dw, FrtFieldInfo *fi)
4434
3954
  return fld_inv;
4435
3955
  }
4436
3956
 
4437
- static void fld_inv_destroy(FrtFieldInverter *fld_inv)
4438
- {
3957
+ static void fld_inv_destroy(FrtFieldInverter *fld_inv) {
4439
3958
  frt_h_destroy(fld_inv->plists);
4440
3959
  }
4441
3960
 
@@ -4445,26 +3964,23 @@ static void fld_inv_destroy(FrtFieldInverter *fld_inv)
4445
3964
  *
4446
3965
  ****************************************************************************/
4447
3966
 
4448
- typedef struct SkipBuffer
4449
- {
3967
+ typedef struct SkipBuffer {
4450
3968
  FrtOutStream *buf;
4451
3969
  FrtOutStream *frq_out;
4452
3970
  FrtOutStream *prx_out;
4453
- int last_doc;
4454
- frt_off_t last_frq_ptr;
4455
- frt_off_t last_prx_ptr;
3971
+ int last_doc_num;
3972
+ frt_off_t last_frq_ptr;
3973
+ frt_off_t last_prx_ptr;
4456
3974
  } SkipBuffer;
4457
3975
 
4458
- static void skip_buf_reset(SkipBuffer *skip_buf)
4459
- {
3976
+ static void skip_buf_reset(SkipBuffer *skip_buf) {
4460
3977
  frt_ramo_reset(skip_buf->buf);
4461
- skip_buf->last_doc = 0;
3978
+ skip_buf->last_doc_num = 0;
4462
3979
  skip_buf->last_frq_ptr = frt_os_pos(skip_buf->frq_out);
4463
3980
  skip_buf->last_prx_ptr = frt_os_pos(skip_buf->prx_out);
4464
3981
  }
4465
3982
 
4466
- static SkipBuffer *skip_buf_new(FrtOutStream *frq_out, FrtOutStream *prx_out)
4467
- {
3983
+ static SkipBuffer *skip_buf_new(FrtOutStream *frq_out, FrtOutStream *prx_out) {
4468
3984
  SkipBuffer *skip_buf = FRT_ALLOC(SkipBuffer);
4469
3985
  skip_buf->buf = frt_ram_new_buffer();
4470
3986
  skip_buf->frq_out = frq_out;
@@ -4472,29 +3988,26 @@ static SkipBuffer *skip_buf_new(FrtOutStream *frq_out, FrtOutStream *prx_out)
4472
3988
  return skip_buf;
4473
3989
  }
4474
3990
 
4475
- static void skip_buf_add(SkipBuffer *skip_buf, int doc)
4476
- {
3991
+ static void skip_buf_add(SkipBuffer *skip_buf, int doc_num) {
4477
3992
  frt_off_t frq_ptr = frt_os_pos(skip_buf->frq_out);
4478
3993
  frt_off_t prx_ptr = frt_os_pos(skip_buf->prx_out);
4479
3994
 
4480
- frt_os_write_vint(skip_buf->buf, doc - skip_buf->last_doc);
3995
+ frt_os_write_vint(skip_buf->buf, doc_num - skip_buf->last_doc_num);
4481
3996
  frt_os_write_vint(skip_buf->buf, frq_ptr - skip_buf->last_frq_ptr);
4482
3997
  frt_os_write_vint(skip_buf->buf, prx_ptr - skip_buf->last_prx_ptr);
4483
3998
 
4484
- skip_buf->last_doc = doc;
3999
+ skip_buf->last_doc_num = doc_num;
4485
4000
  skip_buf->last_frq_ptr = frq_ptr;
4486
4001
  skip_buf->last_prx_ptr = prx_ptr;
4487
4002
  }
4488
4003
 
4489
- static frt_off_t skip_buf_write(SkipBuffer *skip_buf)
4490
- {
4004
+ static frt_off_t skip_buf_write(SkipBuffer *skip_buf) {
4491
4005
  frt_off_t skip_ptr = frt_os_pos(skip_buf->frq_out);
4492
4006
  frt_ramo_write_to(skip_buf->buf, skip_buf->frq_out);
4493
4007
  return skip_ptr;
4494
4008
  }
4495
4009
 
4496
- static void skip_buf_destroy(SkipBuffer *skip_buf)
4497
- {
4010
+ static void skip_buf_destroy(SkipBuffer *skip_buf) {
4498
4011
  frt_ram_destroy_buffer(skip_buf->buf);
4499
4012
  free(skip_buf);
4500
4013
  }
@@ -4505,21 +4018,19 @@ static void skip_buf_destroy(SkipBuffer *skip_buf)
4505
4018
  *
4506
4019
  ****************************************************************************/
4507
4020
 
4508
- static void dw_write_norms(FrtDocWriter *dw, FrtFieldInverter *fld_inv)
4509
- {
4021
+ static void dw_write_norms(FrtDocWriter *dw, FrtFieldInverter *fld_inv) {
4510
4022
  char file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
4511
4023
  FrtOutStream *norms_out;
4512
4024
  frt_si_advance_norm_gen(dw->si, fld_inv->fi->number);
4513
4025
  si_norm_file_name(dw->si, file_name, fld_inv->fi->number);
4514
- norms_out = dw->store->new_output(dw->store, file_name);
4026
+ norms_out = dw->store->new_output(dw->store, segm_idx_name, file_name);
4515
4027
  frt_os_write_bytes(norms_out, fld_inv->norms, dw->doc_num);
4516
4028
  frt_os_close(norms_out);
4517
4029
  }
4518
4030
 
4519
4031
  /* we'll use the postings Hash's table area to sort the postings as it is
4520
4032
  * going to be zeroset soon anyway */
4521
- static FrtPostingList **dw_sort_postings(FrtHash *plists_ht)
4522
- {
4033
+ static FrtPostingList **dw_sort_postings(FrtHash *plists_ht) {
4523
4034
  int i, j;
4524
4035
  FrtHashEntry *he;
4525
4036
  FrtPostingList **plists = (FrtPostingList **)plists_ht->table;
@@ -4537,8 +4048,7 @@ static FrtPostingList **dw_sort_postings(FrtHash *plists_ht)
4537
4048
  return plists;
4538
4049
  }
4539
4050
 
4540
- static void dw_flush_streams(FrtDocWriter *dw)
4541
- {
4051
+ static void dw_flush_streams(FrtDocWriter *dw) {
4542
4052
  frt_mp_reset(dw->mp);
4543
4053
  frt_fw_close(dw->fw);
4544
4054
  dw->fw = NULL;
@@ -4546,9 +4056,8 @@ static void dw_flush_streams(FrtDocWriter *dw)
4546
4056
  dw->doc_num = 0;
4547
4057
  }
4548
4058
 
4549
- static void dw_flush(FrtDocWriter *dw)
4550
- {
4551
- int i, j, last_doc, doc_code, doc_freq, last_pos, posting_count;
4059
+ static void dw_flush(FrtDocWriter *dw) {
4060
+ int i, j, last_doc, doc_num, doc_freq, last_pos, posting_count;
4552
4061
  int skip_interval = dw->skip_interval;
4553
4062
  FrtFieldInfos *fis = dw->fis;
4554
4063
  const int fields_count = fis->size;
@@ -4565,9 +4074,9 @@ static void dw_flush(FrtDocWriter *dw)
4565
4074
  SkipBuffer *skip_buf;
4566
4075
 
4567
4076
  sprintf(file_name, "%s.frq", dw->si->name);
4568
- frq_out = store->new_output(store, file_name);
4077
+ frq_out = store->new_output(store, segm_idx_name, file_name);
4569
4078
  sprintf(file_name, "%s.prx", dw->si->name);
4570
- prx_out = store->new_output(store, file_name);
4079
+ prx_out = store->new_output(store, segm_idx_name, file_name);
4571
4080
  skip_buf = skip_buf_new(frq_out, prx_out);
4572
4081
 
4573
4082
  for (i = 0; i < fields_count; i++) {
@@ -4596,16 +4105,11 @@ static void dw_flush(FrtDocWriter *dw)
4596
4105
  skip_buf_add(skip_buf, last_doc);
4597
4106
  }
4598
4107
 
4599
- doc_code = (p->doc_num - last_doc) << 1;
4108
+ doc_num = (p->doc_num - last_doc);
4600
4109
  last_doc = p->doc_num;
4601
4110
 
4602
- if (p->freq == 1) {
4603
- frt_os_write_vint(frq_out, 1|doc_code);
4604
- }
4605
- else {
4606
- frt_os_write_vint(frq_out, doc_code);
4607
- frt_os_write_vint(frq_out, p->freq);
4608
- }
4111
+ frt_os_write_vint(frq_out, doc_num);
4112
+ frt_os_write_vint(frq_out, p->freq);
4609
4113
 
4610
4114
  last_pos = 0;
4611
4115
  for (occ = p->first_occ; NULL != occ; occ = occ->next) {
@@ -4625,8 +4129,7 @@ static void dw_flush(FrtDocWriter *dw)
4625
4129
  dw_flush_streams(dw);
4626
4130
  }
4627
4131
 
4628
- FrtDocWriter *frt_dw_open(FrtIndexWriter *iw, FrtSegmentInfo *si)
4629
- {
4132
+ FrtDocWriter *frt_dw_open(FrtIndexWriter *iw, FrtSegmentInfo *si) {
4630
4133
  FrtStore *store = iw->store;
4631
4134
  FrtMemoryPool *mp = frt_mp_new_capa(iw->config.chunk_size,
4632
4135
  iw->config.max_buffer_memory/iw->config.chunk_size);
@@ -4658,14 +4161,12 @@ FrtDocWriter *frt_dw_open(FrtIndexWriter *iw, FrtSegmentInfo *si)
4658
4161
  return dw;
4659
4162
  }
4660
4163
 
4661
- void frt_dw_new_segment(FrtDocWriter *dw, FrtSegmentInfo *si)
4662
- {
4164
+ void frt_dw_new_segment(FrtDocWriter *dw, FrtSegmentInfo *si) {
4663
4165
  dw->fw = frt_fw_open(dw->store, si->name, dw->fis);
4664
4166
  dw->si = si;
4665
4167
  }
4666
4168
 
4667
- void frt_dw_close(FrtDocWriter *dw)
4668
- {
4169
+ void frt_dw_close(FrtDocWriter *dw) {
4669
4170
  if (dw->doc_num) {
4670
4171
  dw_flush(dw);
4671
4172
  }
@@ -4680,8 +4181,7 @@ void frt_dw_close(FrtDocWriter *dw)
4680
4181
  free(dw);
4681
4182
  }
4682
4183
 
4683
- FrtFieldInverter *frt_dw_get_fld_inv(FrtDocWriter *dw, FrtFieldInfo *fi)
4684
- {
4184
+ FrtFieldInverter *frt_dw_get_fld_inv(FrtDocWriter *dw, FrtFieldInfo *fi) {
4685
4185
  FrtFieldInverter *fld_inv = (FrtFieldInverter*)frt_h_get_int(dw->fields, fi->number);
4686
4186
 
4687
4187
  if (!fld_inv) {
@@ -4697,8 +4197,7 @@ static void dw_add_posting(FrtMemoryPool *mp,
4697
4197
  int doc_num,
4698
4198
  const char *text,
4699
4199
  int len,
4700
- int pos)
4701
- {
4200
+ int pos) {
4702
4201
  FrtHashEntry *pl_he;
4703
4202
  if (frt_h_set_ext(curr_plists, text, &pl_he)) {
4704
4203
  FrtPosting *p = frt_p_new(mp, doc_num, pos);
@@ -4708,21 +4207,18 @@ static void dw_add_posting(FrtMemoryPool *mp,
4708
4207
  if (frt_h_set_ext(fld_plists, text, &fld_pl_he)) {
4709
4208
  fld_pl_he->value = pl = frt_pl_new(mp, text, len, p);
4710
4209
  pl_he->key = fld_pl_he->key = (char *)pl->term;
4711
- }
4712
- else {
4210
+ } else {
4713
4211
  pl = (FrtPostingList *)fld_pl_he->value;
4714
4212
  pl_add_posting(pl, p);
4715
4213
  pl_he->key = (char *)pl->term;
4716
4214
  }
4717
4215
  pl_he->value = pl;
4718
- }
4719
- else {
4216
+ } else {
4720
4217
  frt_pl_add_occ(mp, (FrtPostingList *)pl_he->value, pos);
4721
4218
  }
4722
4219
  }
4723
4220
 
4724
- static void dw_add_offsets(FrtDocWriter *dw, int pos, frt_off_t start, frt_off_t end)
4725
- {
4221
+ static void dw_add_offsets(FrtDocWriter *dw, int pos, frt_off_t start, frt_off_t end) {
4726
4222
  if (pos >= dw->offsets_capa) {
4727
4223
  int old_capa = dw->offsets_capa;
4728
4224
  while (pos >= dw->offsets_capa) {
@@ -4786,7 +4282,7 @@ FrtHash *frt_dw_invert_field(FrtDocWriter *dw, FrtFieldInverter *fld_inv, FrtDoc
4786
4282
  buf[FRT_MAX_WORD_SIZE - 1] = '\0';
4787
4283
  for (i = 0; i < df_size; i++) {
4788
4284
  int len = df->lengths[i];
4789
- char *data_ptr = df->data[i];
4285
+ const char *data_ptr = df->data[i];
4790
4286
  if (len >= FRT_MAX_WORD_SIZE) {
4791
4287
  char *head_last = rb_enc_left_char_head(data_ptr, data_ptr + FRT_MAX_WORD_SIZE - 1, data_ptr + len, df->encodings[i]);
4792
4288
  len = head_last - data_ptr;
@@ -4828,7 +4324,7 @@ void frt_dw_add_doc(FrtDocWriter *dw, FrtDocument *doc) {
4828
4324
  FrtFieldInverter *fld_inv;
4829
4325
  FrtHash *postings;
4830
4326
  FrtFieldInfo *fi;
4831
- const int doc_size = doc->size;
4327
+ const int doc_size = doc->field_count;
4832
4328
 
4833
4329
  /* frt_fw_add_doc will add new fields as necessary */
4834
4330
  frt_fw_add_doc(dw->fw, doc);
@@ -4867,23 +4363,21 @@ void frt_dw_add_doc(FrtDocWriter *dw, FrtDocument *doc) {
4867
4363
  ****************************************************************************/
4868
4364
 
4869
4365
  /* prepare an index ready for writing */
4870
- void frt_index_create(FrtStore *store, FrtFieldInfos *fis)
4871
- {
4366
+ void frt_index_create(FrtStore *store, FrtFieldInfos *fis) {
4872
4367
  FrtSegmentInfos *sis = frt_sis_new(fis);
4873
- store->clear_all(store);
4368
+ store->clear_all(store, segm_idx_name);
4874
4369
  frt_sis_write(sis, store, NULL);
4875
4370
  frt_sis_destroy(sis);
4876
4371
  }
4877
4372
 
4878
4373
  bool frt_index_is_locked(FrtStore *store) {
4879
- FrtLock *write_lock = frt_open_lock(store, FRT_WRITE_LOCK_NAME);
4374
+ FrtLock *write_lock = frt_open_lock(store, segm_idx_name, FRT_WRITE_LOCK_NAME);
4880
4375
  bool is_locked = write_lock->is_locked(write_lock);
4881
4376
  frt_close_lock(write_lock);
4882
4377
  return is_locked;
4883
4378
  }
4884
4379
 
4885
- int frt_iw_doc_count(FrtIndexWriter *iw)
4886
- {
4380
+ int frt_iw_doc_count(FrtIndexWriter *iw) {
4887
4381
  int i, doc_cnt = 0;
4888
4382
  pthread_mutex_lock(&iw->mutex);
4889
4383
  for (i = iw->sis->size - 1; i >= 0; i--) {
@@ -4909,13 +4403,11 @@ static void iw_flush_ram_segment(FrtIndexWriter *iw) {
4909
4403
  pthread_mutex_unlock(&iw->store->mutex);
4910
4404
  }
4911
4405
 
4912
- void frt_iw_add_doc(FrtIndexWriter *iw, FrtDocument *doc)
4913
- {
4406
+ void frt_iw_add_doc(FrtIndexWriter *iw, FrtDocument *doc) {
4914
4407
  pthread_mutex_lock(&iw->mutex);
4915
4408
  if (NULL == iw->dw) {
4916
4409
  iw->dw = frt_dw_open(iw, frt_sis_new_segment(iw->sis, 0, iw->store));
4917
- }
4918
- else if (NULL == iw->dw->fw) {
4410
+ } else if (NULL == iw->dw->fw) {
4919
4411
  frt_dw_new_segment(iw->dw, frt_sis_new_segment(iw->sis, 0, iw->store));
4920
4412
  }
4921
4413
  frt_dw_add_doc(iw->dw, doc);
@@ -4926,15 +4418,13 @@ void frt_iw_add_doc(FrtIndexWriter *iw, FrtDocument *doc)
4926
4418
  pthread_mutex_unlock(&iw->mutex);
4927
4419
  }
4928
4420
 
4929
- static void iw_commit_i(FrtIndexWriter *iw)
4930
- {
4421
+ static void iw_commit_i(FrtIndexWriter *iw) {
4931
4422
  if (iw->dw && iw->dw->doc_num > 0) {
4932
4423
  iw_flush_ram_segment(iw);
4933
4424
  }
4934
4425
  }
4935
4426
 
4936
- void frt_iw_commit(FrtIndexWriter *iw)
4937
- {
4427
+ void frt_iw_commit(FrtIndexWriter *iw) {
4938
4428
  pthread_mutex_lock(&iw->mutex);
4939
4429
  iw_commit_i(iw);
4940
4430
  pthread_mutex_unlock(&iw->mutex);
@@ -5010,8 +4500,7 @@ void frt_iw_delete_terms(FrtIndexWriter *iw, ID field, char **terms, const int t
5010
4500
  }
5011
4501
  }
5012
4502
 
5013
- void frt_iw_close(FrtIndexWriter *iw)
5014
- {
4503
+ void frt_iw_close(FrtIndexWriter *iw) {
5015
4504
  pthread_mutex_lock(&iw->mutex);
5016
4505
  iw_commit_i(iw);
5017
4506
  if (iw->dw) {
@@ -5047,7 +4536,7 @@ FrtIndexWriter *frt_iw_open(FrtIndexWriter *iw, FrtStore *store, FrtAnalyzer *vo
5047
4536
  iw->config = *config;
5048
4537
 
5049
4538
  FRT_TRY
5050
- iw->write_lock = frt_open_lock(store, FRT_WRITE_LOCK_NAME);
4539
+ iw->write_lock = frt_open_lock(store, segm_idx_name, FRT_WRITE_LOCK_NAME);
5051
4540
  if (!iw->write_lock->obtain(iw->write_lock)) {
5052
4541
  FRT_RAISE(FRT_LOCK_ERROR, "Couldn't obtain write lock when opening IndexWriter");
5053
4542
  }
@@ -5089,21 +4578,21 @@ static void iw_cp_fields(FrtIndexWriter *iw, FrtSegmentReader *sr, const char *s
5089
4578
  char *sr_segment = sr->si->name;
5090
4579
 
5091
4580
  sprintf(file_name, "%s.fdt", segment);
5092
- fdt_out = store_out->new_output(store_out, file_name);
4581
+ fdt_out = store_out->new_output(store_out, segm_idx_name, file_name);
5093
4582
  sprintf(file_name, "%s.fdx", segment);
5094
- fdx_out = store_out->new_output(store_out, file_name);
4583
+ fdx_out = store_out->new_output(store_out, segm_idx_name, file_name);
5095
4584
 
5096
4585
  sprintf(file_name, "%s.fdt", sr_segment);
5097
- fdt_in = store_in->open_input(store_in, file_name);
4586
+ fdt_in = store_in->open_input(store_in, segm_idx_name, file_name);
5098
4587
  sprintf(file_name, "%s.fdx", sr_segment);
5099
- fdx_in = store_in->open_input(store_in, file_name);
4588
+ fdx_in = store_in->open_input(store_in, segm_idx_name, file_name);
5100
4589
 
5101
4590
  sprintf(file_name, "%s.del", sr_segment);
5102
- if (store_in->exists(store_in, file_name)) {
4591
+ if (store_in->exists(store_in, segm_idx_name, file_name)) {
5103
4592
  FrtOutStream *del_out;
5104
- FrtInStream *del_in = store_in->open_input(store_in, file_name);
4593
+ FrtInStream *del_in = store_in->open_input(store_in, segm_idx_name, file_name);
5105
4594
  sprintf(file_name, "%s.del", segment);
5106
- del_out = store_out->new_output(store_out, file_name);
4595
+ del_out = store_out->new_output(store_out, segm_idx_name, file_name);
5107
4596
  frt_is2os_copy_bytes(del_in, del_out, frt_is_length(del_in));
5108
4597
  frt_os_close(del_out);
5109
4598
  frt_is_close(del_in);
@@ -5111,8 +4600,8 @@ static void iw_cp_fields(FrtIndexWriter *iw, FrtSegmentReader *sr, const char *s
5111
4600
 
5112
4601
  if (map) {
5113
4602
  int i;
5114
- const int max_doc = sr_max_doc(IR(sr));
5115
- for (i = 0; i < max_doc; i++) {
4603
+ const int max_doc_num = sr_max_doc_num(IR(sr));
4604
+ for (i = 0; i < max_doc_num; i++) {
5116
4605
  int j, data_len = 0;
5117
4606
  const int field_cnt = frt_is_read_vint(fdt_in);
5118
4607
  int tv_cnt;
@@ -5170,8 +4659,7 @@ static void iw_cp_fields(FrtIndexWriter *iw, FrtSegmentReader *sr, const char *s
5170
4659
  }
5171
4660
 
5172
4661
  static void iw_cp_terms(FrtIndexWriter *iw, FrtSegmentReader *sr,
5173
- const char *segment, int *map)
5174
- {
4662
+ const char *segment, int *map) {
5175
4663
  char file_name[FRT_SEGMENT_NAME_MAX_LENGTH];
5176
4664
  FrtOutStream *tix_out, *tis_out, *tfx_out, *frq_out, *prx_out;
5177
4665
  FrtInStream *tix_in, *tis_in, *tfx_in, *frq_in, *prx_in;
@@ -5180,29 +4668,29 @@ static void iw_cp_terms(FrtIndexWriter *iw, FrtSegmentReader *sr,
5180
4668
  char *sr_segment = sr->si->name;
5181
4669
 
5182
4670
  sprintf(file_name, "%s.tix", segment);
5183
- tix_out = store_out->new_output(store_out, file_name);
4671
+ tix_out = store_out->new_output(store_out, segm_idx_name, file_name);
5184
4672
  sprintf(file_name, "%s.tix", sr_segment);
5185
- tix_in = store_in->open_input(store_in, file_name);
4673
+ tix_in = store_in->open_input(store_in, segm_idx_name, file_name);
5186
4674
 
5187
4675
  sprintf(file_name, "%s.tis", segment);
5188
- tis_out = store_out->new_output(store_out, file_name);
4676
+ tis_out = store_out->new_output(store_out, segm_idx_name, file_name);
5189
4677
  sprintf(file_name, "%s.tis", sr_segment);
5190
- tis_in = store_in->open_input(store_in, file_name);
4678
+ tis_in = store_in->open_input(store_in, segm_idx_name, file_name);
5191
4679
 
5192
4680
  sprintf(file_name, "%s.tfx", segment);
5193
- tfx_out = store_out->new_output(store_out, file_name);
4681
+ tfx_out = store_out->new_output(store_out, segm_idx_name, file_name);
5194
4682
  sprintf(file_name, "%s.tfx", sr_segment);
5195
- tfx_in = store_in->open_input(store_in, file_name);
4683
+ tfx_in = store_in->open_input(store_in, segm_idx_name, file_name);
5196
4684
 
5197
4685
  sprintf(file_name, "%s.frq", segment);
5198
- frq_out = store_out->new_output(store_out, file_name);
4686
+ frq_out = store_out->new_output(store_out, segm_idx_name, file_name);
5199
4687
  sprintf(file_name, "%s.frq", sr_segment);
5200
- frq_in = store_in->open_input(store_in, file_name);
4688
+ frq_in = store_in->open_input(store_in, segm_idx_name, file_name);
5201
4689
 
5202
4690
  sprintf(file_name, "%s.prx", segment);
5203
- prx_out = store_out->new_output(store_out, file_name);
4691
+ prx_out = store_out->new_output(store_out, segm_idx_name, file_name);
5204
4692
  sprintf(file_name, "%s.prx", sr_segment);
5205
- prx_in = store_in->open_input(store_in, file_name);
4693
+ prx_in = store_in->open_input(store_in, segm_idx_name, file_name);
5206
4694
 
5207
4695
  if (map) {
5208
4696
  int field_cnt = frt_is_read_u32(tfx_in);
@@ -5217,8 +4705,7 @@ static void iw_cp_terms(FrtIndexWriter *iw, FrtSegmentReader *sr,
5217
4705
  frt_os_write_vint(tfx_out, frt_is_read_vint(tfx_in)); /* index size */
5218
4706
  frt_os_write_vint(tfx_out, frt_is_read_vint(tfx_in)); /* dict size */
5219
4707
  }
5220
- }
5221
- else {
4708
+ } else {
5222
4709
  frt_is2os_copy_bytes(tfx_in, tfx_out, frt_is_length(tfx_in));
5223
4710
  }
5224
4711
  frt_is2os_copy_bytes(tix_in, tix_out, frt_is_length(tix_in));
@@ -5239,8 +4726,7 @@ static void iw_cp_terms(FrtIndexWriter *iw, FrtSegmentReader *sr,
5239
4726
  }
5240
4727
 
5241
4728
  static void iw_cp_norms(FrtIndexWriter *iw, FrtSegmentReader *sr,
5242
- FrtSegmentInfo *si, int *map)
5243
- {
4729
+ FrtSegmentInfo *si, int *map) {
5244
4730
  int i;
5245
4731
  FrtFieldInfos *fis = IR(sr)->fis;
5246
4732
  const int field_cnt = fis->size;
@@ -5256,10 +4742,10 @@ static void iw_cp_norms(FrtIndexWriter *iw, FrtSegmentReader *sr,
5256
4742
  FrtStore *store = IR(sr)->store;
5257
4743
  int field_num = map ? map[i] : i;
5258
4744
 
5259
- norms_in = store->open_input(store, file_name_in);
4745
+ norms_in = store->open_input(store, segm_idx_name, file_name_in);
5260
4746
  frt_si_advance_norm_gen(si, field_num);
5261
4747
  si_norm_file_name(si, file_name_out, field_num);
5262
- norms_out = store_out->new_output(store_out, file_name_out);
4748
+ norms_out = store_out->new_output(store_out, segm_idx_name, file_name_out);
5263
4749
  frt_is2os_copy_bytes(norms_in, norms_out, frt_is_length(norms_in));
5264
4750
  frt_os_close(norms_out);
5265
4751
  frt_is_close(norms_in);
@@ -5299,7 +4785,7 @@ static void iw_add_segment(FrtIndexWriter *iw, FrtSegmentReader *sr) {
5299
4785
  const int fis_size = sub_fis->size;
5300
4786
  bool must_map_fields = false;
5301
4787
 
5302
- si->doc_cnt = IR(sr)->max_doc(IR(sr));
4788
+ si->doc_cnt = IR(sr)->max_doc_num(IR(sr));
5303
4789
  /* Merge FrtFieldInfos */
5304
4790
  for (j = 0; j < fis_size; j++) {
5305
4791
  FrtFieldInfo *fi = sub_fis->fields[j];