isomorfeus-ferret 0.17.2 → 0.17.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) 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 +118 -125
  10. data/ext/isomorfeus_ferret_ext/frb_lazy_doc.c +14 -16
  11. data/ext/isomorfeus_ferret_ext/frb_search.c +31 -23
  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 +2 -27
  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 +13 -32
  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_global.c +10 -4
  31. data/ext/isomorfeus_ferret_ext/frt_global.h +11 -15
  32. data/ext/isomorfeus_ferret_ext/frt_hash.c +8 -8
  33. data/ext/isomorfeus_ferret_ext/frt_hash.h +1 -2
  34. data/ext/isomorfeus_ferret_ext/frt_hashset.c +20 -40
  35. data/ext/isomorfeus_ferret_ext/frt_hashset.h +1 -2
  36. data/ext/isomorfeus_ferret_ext/frt_helper.c +7 -15
  37. data/ext/isomorfeus_ferret_ext/frt_in_stream.c +35 -45
  38. data/ext/isomorfeus_ferret_ext/frt_in_stream.h +3 -2
  39. data/ext/isomorfeus_ferret_ext/frt_ind.c +20 -38
  40. data/ext/isomorfeus_ferret_ext/frt_index.c +292 -790
  41. data/ext/isomorfeus_ferret_ext/frt_index.h +1 -102
  42. data/ext/isomorfeus_ferret_ext/frt_lang.c +5 -10
  43. data/ext/isomorfeus_ferret_ext/frt_lazy_doc.c +3 -3
  44. data/ext/isomorfeus_ferret_ext/frt_lazy_doc.h +1 -1
  45. data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.c +18 -25
  46. data/ext/isomorfeus_ferret_ext/frt_lazy_doc_field.h +5 -5
  47. data/ext/isomorfeus_ferret_ext/frt_mdbx_store.c +102 -70
  48. data/ext/isomorfeus_ferret_ext/frt_mempool.c +8 -16
  49. data/ext/isomorfeus_ferret_ext/frt_multimapper.c +23 -46
  50. data/ext/isomorfeus_ferret_ext/frt_multimapper.h +4 -8
  51. data/ext/isomorfeus_ferret_ext/frt_out_stream.c +31 -43
  52. data/ext/isomorfeus_ferret_ext/frt_out_stream.h +2 -2
  53. data/ext/isomorfeus_ferret_ext/frt_posh.c +6 -819
  54. data/ext/isomorfeus_ferret_ext/frt_posh.h +0 -57
  55. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.c +11 -22
  56. data/ext/isomorfeus_ferret_ext/frt_priorityqueue.h +1 -2
  57. data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +85 -171
  58. data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -16
  59. data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +1 -2
  60. data/ext/isomorfeus_ferret_ext/frt_q_parser.c +49 -98
  61. data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +52 -104
  62. data/ext/isomorfeus_ferret_ext/frt_q_range.c +6 -12
  63. data/ext/isomorfeus_ferret_ext/frt_q_span.c +113 -226
  64. data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +1 -2
  65. data/ext/isomorfeus_ferret_ext/frt_ram_store.c +134 -85
  66. data/ext/isomorfeus_ferret_ext/frt_search.c +82 -164
  67. data/ext/isomorfeus_ferret_ext/frt_similarity.c +11 -22
  68. data/ext/isomorfeus_ferret_ext/frt_similarity.h +1 -2
  69. data/ext/isomorfeus_ferret_ext/frt_store.c +13 -25
  70. data/ext/isomorfeus_ferret_ext/frt_store.h +86 -52
  71. data/ext/isomorfeus_ferret_ext/frt_term_vectors.c +8 -16
  72. data/ext/isomorfeus_ferret_ext/frt_win32.h +5 -10
  73. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +12 -11
  74. data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +11 -13
  75. data/ext/isomorfeus_ferret_ext/lz4.c +422 -195
  76. data/ext/isomorfeus_ferret_ext/lz4.h +114 -46
  77. data/ext/isomorfeus_ferret_ext/lz4frame.c +421 -242
  78. data/ext/isomorfeus_ferret_ext/lz4frame.h +122 -53
  79. data/ext/isomorfeus_ferret_ext/lz4hc.c +127 -111
  80. data/ext/isomorfeus_ferret_ext/lz4hc.h +14 -14
  81. data/ext/isomorfeus_ferret_ext/lz4xxhash.h +1 -1
  82. data/ext/isomorfeus_ferret_ext/mdbx.c +3762 -2526
  83. data/ext/isomorfeus_ferret_ext/mdbx.h +115 -70
  84. data/ext/isomorfeus_ferret_ext/test.c +40 -87
  85. data/ext/isomorfeus_ferret_ext/test.h +3 -6
  86. data/ext/isomorfeus_ferret_ext/test_1710.c +11 -13
  87. data/ext/isomorfeus_ferret_ext/test_analysis.c +32 -64
  88. data/ext/isomorfeus_ferret_ext/test_array.c +6 -12
  89. data/ext/isomorfeus_ferret_ext/test_bitvector.c +12 -24
  90. data/ext/isomorfeus_ferret_ext/test_document.c +23 -33
  91. data/ext/isomorfeus_ferret_ext/test_except.c +10 -21
  92. data/ext/isomorfeus_ferret_ext/test_fields.c +62 -68
  93. data/ext/isomorfeus_ferret_ext/test_file_deleter.c +15 -23
  94. data/ext/isomorfeus_ferret_ext/test_filter.c +17 -27
  95. data/ext/isomorfeus_ferret_ext/test_global.c +14 -29
  96. data/ext/isomorfeus_ferret_ext/test_hash.c +19 -38
  97. data/ext/isomorfeus_ferret_ext/test_hashset.c +8 -16
  98. data/ext/isomorfeus_ferret_ext/test_helper.c +4 -8
  99. data/ext/isomorfeus_ferret_ext/test_highlighter.c +16 -28
  100. data/ext/isomorfeus_ferret_ext/test_index.c +277 -487
  101. data/ext/isomorfeus_ferret_ext/test_lang.c +7 -14
  102. data/ext/isomorfeus_ferret_ext/test_mdbx_store.c +2 -5
  103. data/ext/isomorfeus_ferret_ext/test_mempool.c +5 -10
  104. data/ext/isomorfeus_ferret_ext/test_multimapper.c +3 -6
  105. data/ext/isomorfeus_ferret_ext/test_priorityqueue.c +9 -18
  106. data/ext/isomorfeus_ferret_ext/test_q_const_score.c +4 -6
  107. data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -4
  108. data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +9 -15
  109. data/ext/isomorfeus_ferret_ext/test_q_parser.c +8 -16
  110. data/ext/isomorfeus_ferret_ext/test_q_span.c +19 -35
  111. data/ext/isomorfeus_ferret_ext/test_ram_store.c +14 -13
  112. data/ext/isomorfeus_ferret_ext/test_search.c +60 -109
  113. data/ext/isomorfeus_ferret_ext/test_segments.c +8 -13
  114. data/ext/isomorfeus_ferret_ext/test_similarity.c +2 -4
  115. data/ext/isomorfeus_ferret_ext/test_sort.c +14 -24
  116. data/ext/isomorfeus_ferret_ext/test_store.c +96 -115
  117. data/ext/isomorfeus_ferret_ext/test_term.c +9 -15
  118. data/ext/isomorfeus_ferret_ext/test_term_vectors.c +9 -14
  119. data/ext/isomorfeus_ferret_ext/test_test.c +4 -8
  120. data/ext/isomorfeus_ferret_ext/test_threading.c +14 -20
  121. data/ext/isomorfeus_ferret_ext/testhelper.c +11 -21
  122. data/ext/isomorfeus_ferret_ext/testhelper.h +1 -1
  123. data/ext/isomorfeus_ferret_ext/tests_all.h +1 -2
  124. data/lib/isomorfeus/ferret/index/index.rb +1 -1
  125. data/lib/isomorfeus/ferret/version.rb +1 -1
  126. metadata +24 -4
@@ -2,6 +2,7 @@
2
2
  #define FRT_INDEX_H
3
3
 
4
4
  #include "frt_global.h"
5
+ #include "frt_field_infos.h"
5
6
  #include "frt_document.h"
6
7
  #include "frt_analysis.h"
7
8
  #include "frt_hash.h"
@@ -56,84 +57,6 @@ extern FrtCacheObject *frt_co_create(FrtHash *ref_tab1, FrtHash *ref_tab2,
56
57
  void *ref1, void *ref2, frt_free_ft destroy, void *obj);
57
58
  extern FrtHash *frt_co_hash_create();
58
59
 
59
- /****************************************************************************
60
- *
61
- * FrtFieldInfo
62
- *
63
- ****************************************************************************/
64
-
65
- #define FRT_FI_DEFAULTS_BM FRT_FI_IS_STORED_BM | FRT_FI_IS_INDEXED_BM | FRT_FI_IS_TOKENIZED_BM | FRT_FI_STORE_TERM_VECTOR_BM | FRT_FI_STORE_POSITIONS_BM | FRT_FI_STORE_OFFSETS_BM
66
- #define FRT_FI_IS_STORED_BM 0x001
67
- #define FRT_FI_IS_COMPRESSED_BM 0x002
68
- #define FRT_FI_IS_INDEXED_BM 0x004
69
- #define FRT_FI_IS_TOKENIZED_BM 0x008
70
- #define FRT_FI_OMIT_NORMS_BM 0x010
71
- #define FRT_FI_STORE_TERM_VECTOR_BM 0x020
72
- #define FRT_FI_STORE_POSITIONS_BM 0x040
73
- #define FRT_FI_STORE_OFFSETS_BM 0x080
74
- #define FRT_FI_COMPRESSION_BROTLI_BM 0x100
75
- #define FRT_FI_COMPRESSION_BZ2_BM 0x200
76
- #define FRT_FI_COMPRESSION_LZ4_BM 0x400
77
-
78
- typedef struct FrtFieldInfo {
79
- ID name;
80
- float boost;
81
- unsigned int bits;
82
- int number;
83
- _Atomic unsigned int ref_cnt;
84
- VALUE rfi;
85
- } FrtFieldInfo;
86
-
87
- extern FrtFieldInfo *frt_fi_alloc();
88
- extern FrtFieldInfo *frt_fi_init(FrtFieldInfo *fi, ID name, unsigned int bits);
89
- extern FrtFieldInfo *frt_fi_new(ID name, unsigned int bits);
90
- extern char *frt_fi_to_s(FrtFieldInfo *fi);
91
- extern void frt_fi_deref(FrtFieldInfo *fi);
92
-
93
- #define bits_is_stored(bits) ((bits & FRT_FI_IS_STORED_BM) != 0)
94
- #define bits_is_compressed(bits) ((bits & FRT_FI_IS_COMPRESSED_BM) != 0)
95
- #define bits_is_compressed_brotli(bits) ((bits & FRT_FI_COMPRESSION_BROTLI_BM) != 0)
96
- #define bits_is_compressed_bz2(bits) ((bits & FRT_FI_COMPRESSION_BZ2_BM) != 0)
97
- #define bits_is_compressed_lz4(bits) ((bits & FRT_FI_COMPRESSION_LZ4_BM) != 0)
98
- #define bits_is_indexed(bits) ((bits & FRT_FI_IS_INDEXED_BM) != 0)
99
- #define bits_is_tokenized(bits) ((bits & FRT_FI_IS_TOKENIZED_BM) != 0)
100
- #define bits_omit_norms(bits) ((bits & FRT_FI_OMIT_NORMS_BM) != 0)
101
- #define bits_store_term_vector(bits) ((bits & FRT_FI_STORE_TERM_VECTOR_BM) != 0)
102
- #define bits_store_positions(bits) ((bits & FRT_FI_STORE_POSITIONS_BM) != 0)
103
- #define bits_store_offsets(bits) ((bits & FRT_FI_STORE_OFFSETS_BM) != 0)
104
- #define bits_has_norms(bits)\
105
- ((bits & (FRT_FI_OMIT_NORMS_BM|FRT_FI_IS_INDEXED_BM)) == FRT_FI_IS_INDEXED_BM)
106
-
107
- /****************************************************************************
108
- *
109
- * FrtFieldInfos
110
- *
111
- ****************************************************************************/
112
-
113
- #define FIELD_INFOS_INIT_CAPA 4
114
- /* carry changes over to dummy_fis in test/test_segments.c */
115
- typedef struct FrtFieldInfos {
116
- unsigned int bits;
117
- int size;
118
- int capa;
119
- FrtFieldInfo **fields;
120
- FrtHash *field_dict;
121
- _Atomic unsigned int ref_cnt;
122
- VALUE rfis;
123
- } FrtFieldInfos;
124
-
125
- FrtFieldInfos *frt_fis_alloc();
126
- FrtFieldInfos *frt_fis_init(FrtFieldInfos *fis, unsigned int bits);
127
- FrtFieldInfos *frt_fis_new(unsigned int bits);
128
- extern FrtFieldInfo *frt_fis_add_field(FrtFieldInfos *fis, FrtFieldInfo *fi);
129
- extern FrtFieldInfo *frt_fis_get_field(FrtFieldInfos *fis, ID name);
130
- extern int frt_fis_get_field_num(FrtFieldInfos *fis, ID name);
131
- extern FrtFieldInfo *frt_fis_get_or_add_field(FrtFieldInfos *fis, ID name);
132
- extern void frt_fis_write(FrtFieldInfos *fis, FrtOutStream *os);
133
- extern FrtFieldInfos *frt_fis_read(FrtInStream *is);
134
- extern char *frt_fis_to_s(FrtFieldInfos *fis);
135
- extern void frt_fis_deref(FrtFieldInfos *fis);
136
-
137
60
  /****************************************************************************
138
61
  *
139
62
  * FrtSegmentInfo
@@ -771,28 +694,4 @@ extern int frt_iw_doc_count(FrtIndexWriter *iw);
771
694
  extern void frt_iw_commit(FrtIndexWriter *iw);
772
695
  extern void frt_iw_add_readers(FrtIndexWriter *iw, FrtIndexReader **readers, const int r_cnt);
773
696
 
774
- /****************************************************************************
775
- *
776
- * FrtCompoundWriter
777
- *
778
- ****************************************************************************/
779
-
780
- #define FRT_CW_INIT_CAPA 16
781
- typedef struct FrtCWFileEntry {
782
- char *name;
783
- frt_off_t dir_offset;
784
- frt_off_t data_offset;
785
- } FrtCWFileEntry;
786
-
787
- typedef struct FrtCompoundWriter {
788
- FrtStore *store;
789
- const char *name;
790
- FrtHashSet *ids;
791
- FrtCWFileEntry *file_entries;
792
- } FrtCompoundWriter;
793
-
794
- extern FrtCompoundWriter *frt_open_cw(FrtStore *store, char *name);
795
- extern void frt_cw_add_file(FrtCompoundWriter *cw, char *id);
796
- extern void frt_cw_close(FrtCompoundWriter *cw, FrtDeleter *dlr);
797
-
798
697
  #endif
@@ -8,8 +8,7 @@
8
8
  #include "frt_global.h"
9
9
 
10
10
  /* emalloc: malloc and report if error */
11
- void *frt_emalloc(size_t size)
12
- {
11
+ void *frt_emalloc(size_t size) {
13
12
  void *p = malloc(size);
14
13
 
15
14
  if (p == NULL) {
@@ -20,8 +19,7 @@ void *frt_emalloc(size_t size)
20
19
  }
21
20
 
22
21
  /* frt_ecalloc: malloc, zeroset and report if error */
23
- void *frt_ecalloc(size_t size)
24
- {
22
+ void *frt_ecalloc(size_t size) {
25
23
  void *p = calloc(1, size);
26
24
 
27
25
  if (p == NULL) {
@@ -32,8 +30,7 @@ void *frt_ecalloc(size_t size)
32
30
  }
33
31
 
34
32
  /* frt_erealloc: realloc and report if error */
35
- void *frt_erealloc(void *ptr, size_t size)
36
- {
33
+ void *frt_erealloc(void *ptr, size_t size) {
37
34
  void *p = realloc(ptr, size);
38
35
 
39
36
  if (p == NULL) {
@@ -47,8 +44,7 @@ void frt_micro_sleep(const int micro_seconds) {
47
44
  rb_thread_wait_for(rb_time_interval(rb_float_new((double)micro_seconds/1000000.0)));
48
45
  }
49
46
 
50
- /* void frt_micro_sleep(const int micro_seconds)
51
- {
47
+ /* void frt_micro_sleep(const int micro_seconds) {
52
48
  #if (defined POSH_OS_WIN32 || defined POSH_OS_WIN64) && !defined __MINGW32__
53
49
  Sleep(micro_seconds / 1000);
54
50
  #else
@@ -81,8 +77,7 @@ void FRT_VEXIT(const char *err_type, const char *fmt, va_list args)
81
77
  fprintf(EXCEPTION_STREAM, "\n");
82
78
  if (frt_x_abort_on_exception) {
83
79
  exit(2); /* conventional value for failed execution */
84
- }
85
- else {
80
+ } else {
86
81
  frt_x_has_aborted = true;
87
82
  }
88
83
  }
@@ -1,10 +1,10 @@
1
1
  #include "frt_lazy_doc.h"
2
2
 
3
- FrtLazyDoc *frt_lazy_doc_new(int size, FrtInStream *fdt_in) {
3
+ FrtLazyDoc *frt_lazy_doc_new(int field_count, FrtInStream *fdt_in) {
4
4
  FrtLazyDoc *self = FRT_ALLOC(FrtLazyDoc);
5
5
  self->field_dictionary = frt_h_new_ptr((frt_free_ft)&frt_lazy_df_destroy);
6
- self->size = size;
7
- self->fields = FRT_ALLOC_AND_ZERO_N(FrtLazyDocField *, size);
6
+ self->field_count = field_count;
7
+ self->fields = FRT_ALLOC_AND_ZERO_N(FrtLazyDocField *, field_count);
8
8
  self->fields_in = frt_is_clone(fdt_in);
9
9
  self->loaded = false;
10
10
  return self;
@@ -5,7 +5,7 @@
5
5
 
6
6
  typedef struct FrtLazyDoc {
7
7
  FrtHash *field_dictionary;
8
- int size;
8
+ int field_count;
9
9
  FrtLazyDocField **fields;
10
10
  FrtInStream *fields_in;
11
11
  bool loaded;
@@ -2,12 +2,12 @@
2
2
  #include "frt_lazy_doc_field.h"
3
3
  #include "frt_lazy_doc.h"
4
4
 
5
- FrtLazyDocField *frt_lazy_df_new(ID name, const int size, FrtCompressionType compression) {
5
+ FrtLazyDocField *frt_lazy_df_new(ID name, const int size, FrtCompressionType compression_type) {
6
6
  FrtLazyDocField *self = FRT_ALLOC(FrtLazyDocField);
7
7
  self->name = name;
8
8
  self->size = size;
9
9
  self->data = FRT_ALLOC_AND_ZERO_N(FrtLazyDocFieldData, size);
10
- self->compression = compression;
10
+ self->compression_type = compression_type;
11
11
  self->decompressed = false;
12
12
  self->loaded = false;
13
13
  return self;
@@ -17,26 +17,27 @@ void frt_lazy_df_destroy(FrtLazyDocField *self) {
17
17
  int i;
18
18
  for (i = self->size - 1; i >= 0; i--) {
19
19
  if (self->data[i].text) {
20
- free(self->data[i].text);
20
+ free((void *)self->data[i].text);
21
21
  }
22
22
  }
23
23
  free(self->data);
24
24
  free(self);
25
25
  }
26
26
 
27
- char *frt_lazy_df_get_data(FrtLazyDocField *self, int i) {
28
- char *text = NULL;
27
+ const char *frt_lazy_df_get_data(FrtLazyDocField *self, int i) {
28
+ const char *text = NULL;
29
29
  if (i < self->size && i >= 0) {
30
30
  text = self->data[i].text;
31
31
  if (NULL == text) {
32
- const int read_len = self->data[i].length + 1;
32
+ const int read_len = self->data[i].length;
33
33
  frt_is_seek(self->doc->fields_in, self->data[i].start);
34
- if (self->data[i].compression != FRT_COMPRESSION_NONE) {
35
- self->data[i].text = text = frt_is_read_compressed_bytes(self->doc->fields_in, read_len, &(self->data[i].length), self->data[i].compression);
34
+ if (self->data[i].compression_type != FRT_COMPRESSION_NONE) {
35
+ self->data[i].text = text = frt_is_read_compressed_bytes(self->doc->fields_in, read_len, &(self->data[i].length), self->data[i].compression_type);
36
36
  } else {
37
- self->data[i].text = text = FRT_ALLOC_N(char, read_len);
38
- frt_is_read_bytes(self->doc->fields_in, (frt_uchar *)text, read_len);
39
- text[read_len - 1] = '\0';
37
+ char *d = FRT_ALLOC_N(char, read_len + 1);
38
+ frt_is_read_bytes(self->doc->fields_in, (frt_uchar *)d, read_len);
39
+ d[read_len] = '\0';
40
+ self->data[i].text = text = d;
40
41
  }
41
42
  self->loaded = true;
42
43
  }
@@ -46,14 +47,13 @@ char *frt_lazy_df_get_data(FrtLazyDocField *self, int i) {
46
47
  }
47
48
 
48
49
  void frt_lazy_df_get_bytes(FrtLazyDocField *self, char *buf, int start, int len) {
49
- if (self->compression != FRT_COMPRESSION_NONE && !self->decompressed) {
50
+ if (self->compression_type != FRT_COMPRESSION_NONE && !self->decompressed) {
50
51
  int i;
51
52
  self->len = 0;
52
53
  for (i = self->size-1; i >= 0; i--) {
53
54
  (void)frt_lazy_df_get_data(self, i);
54
- self->len += self->data[i].length + 1;
55
+ self->len += self->data[i].length;
55
56
  }
56
- self->len--; /* each field separated by ' ' but no need to add to end */
57
57
  self->decompressed = true;
58
58
  }
59
59
  if (start < 0 || start >= self->len) {
@@ -67,7 +67,7 @@ void frt_lazy_df_get_bytes(FrtLazyDocField *self, char *buf, int start, int len)
67
67
  FRT_RAISE(FRT_IO_ERROR, "Tried to read past end of field. Field is only %d "
68
68
  "bytes long but tried to read to %d", self->len, start + len);
69
69
  }
70
- if (self->compression != FRT_COMPRESSION_NONE) {
70
+ if (self->compression_type != FRT_COMPRESSION_NONE) {
71
71
  int cur_start = 0, buf_start = 0, cur_end, i, copy_start, copy_len;
72
72
  for (i = 0; i < self->size; i++) {
73
73
  cur_end = cur_start + self->data[i].length;
@@ -77,21 +77,14 @@ void frt_lazy_df_get_bytes(FrtLazyDocField *self, char *buf, int start, int len)
77
77
  if (copy_len >= len) {
78
78
  copy_len = len;
79
79
  len = 0;
80
- }
81
- else {
80
+ } else {
82
81
  len -= copy_len;
83
82
  }
84
- memcpy(buf + buf_start,
85
- self->data[i].text + copy_start,
86
- copy_len);
83
+ memcpy(buf + buf_start, self->data[i].text + copy_start, copy_len);
87
84
  buf_start += copy_len;
88
- if (len > 0) {
89
- buf[buf_start++] = ' ';
90
- len--;
91
- }
92
85
  if (len == 0) break;
93
86
  }
94
- cur_start = cur_end + 1;
87
+ cur_start = cur_end;
95
88
  }
96
89
  } else {
97
90
  frt_is_seek(self->doc->fields_in, self->data[0].start + start);
@@ -9,8 +9,8 @@ typedef struct FrtLazyDocFieldData {
9
9
  frt_off_t start;
10
10
  int length;
11
11
  rb_encoding *encoding;
12
- FrtCompressionType compression; /* as stored */
13
- char *text;
12
+ FrtCompressionType compression_type; /* as stored */
13
+ const char *text;
14
14
  } FrtLazyDocFieldData;
15
15
 
16
16
  typedef struct FrtLazyDoc FrtLazyDoc;
@@ -20,13 +20,13 @@ typedef struct FrtLazyDocField {
20
20
  FrtLazyDoc *doc;
21
21
  int size; /* number of data elements */
22
22
  int len; /* length of data elements concatenated */
23
- FrtCompressionType compression; /* as configured */
23
+ FrtCompressionType compression_type; /* as configured */
24
24
  bool decompressed;
25
25
  bool loaded;
26
26
  } FrtLazyDocField;
27
27
 
28
- extern FrtLazyDocField *frt_lazy_df_new(ID name, const int size, FrtCompressionType compression);
29
- extern char *frt_lazy_df_get_data(FrtLazyDocField *self, int i);
28
+ extern FrtLazyDocField *frt_lazy_df_new(ID name, const int size, FrtCompressionType compression_type);
29
+ extern const char *frt_lazy_df_get_data(FrtLazyDocField *self, int i);
30
30
  extern void frt_lazy_df_get_bytes(FrtLazyDocField *self, char *buf, int start, int len);
31
31
  extern void frt_lazy_df_destroy(FrtLazyDocField *self);
32
32