isomorfeus-ferret 0.13.8 → 0.13.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/isomorfeus_ferret_ext/bm_store.c +3 -3
- data/ext/isomorfeus_ferret_ext/bzlib.h +83 -82
- data/ext/isomorfeus_ferret_ext/frb_index.c +17 -23
- data/ext/isomorfeus_ferret_ext/frb_search.c +1 -4
- data/ext/isomorfeus_ferret_ext/frb_store.c +32 -34
- data/ext/isomorfeus_ferret_ext/frt_analysis.c +4 -4
- data/ext/isomorfeus_ferret_ext/frt_analysis.h +9 -9
- data/ext/isomorfeus_ferret_ext/frt_bitvector.c +1 -1
- data/ext/isomorfeus_ferret_ext/frt_bitvector.h +1 -1
- data/ext/isomorfeus_ferret_ext/frt_compound_io.c +41 -66
- data/ext/isomorfeus_ferret_ext/frt_config.h +8 -0
- data/ext/isomorfeus_ferret_ext/frt_except.c +1 -0
- data/ext/isomorfeus_ferret_ext/frt_filter.c +2 -4
- data/ext/isomorfeus_ferret_ext/frt_fs_store.c +24 -19
- data/ext/isomorfeus_ferret_ext/frt_global.c +6 -4
- data/ext/isomorfeus_ferret_ext/frt_global.h +1 -1
- data/ext/isomorfeus_ferret_ext/frt_hash.c +40 -48
- data/ext/isomorfeus_ferret_ext/frt_hash.h +14 -16
- data/ext/isomorfeus_ferret_ext/frt_hashset.c +5 -5
- data/ext/isomorfeus_ferret_ext/frt_ind.c +2 -3
- data/ext/isomorfeus_ferret_ext/frt_index.c +148 -219
- data/ext/isomorfeus_ferret_ext/frt_index.h +31 -31
- data/ext/isomorfeus_ferret_ext/frt_lang.c +1 -4
- data/ext/isomorfeus_ferret_ext/frt_multimapper.c +8 -9
- data/ext/isomorfeus_ferret_ext/frt_multimapper.h +1 -1
- data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +6 -6
- data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +8 -3
- data/ext/isomorfeus_ferret_ext/frt_q_parser.c +1743 -1742
- data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_q_span.c +11 -10
- data/ext/isomorfeus_ferret_ext/frt_ram_store.c +24 -40
- data/ext/isomorfeus_ferret_ext/frt_search.c +29 -28
- data/ext/isomorfeus_ferret_ext/frt_search.h +18 -19
- data/ext/isomorfeus_ferret_ext/frt_store.c +47 -40
- data/ext/isomorfeus_ferret_ext/frt_store.h +46 -48
- data/ext/isomorfeus_ferret_ext/frt_threading.h +12 -5
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +4 -3
- data/ext/isomorfeus_ferret_ext/test_1710.c +1 -2
- data/ext/isomorfeus_ferret_ext/test_compound_io.c +8 -8
- data/ext/isomorfeus_ferret_ext/test_fields.c +7 -7
- data/ext/isomorfeus_ferret_ext/test_file_deleter.c +1 -1
- data/ext/isomorfeus_ferret_ext/test_filter.c +4 -3
- data/ext/isomorfeus_ferret_ext/test_fs_store.c +1 -1
- data/ext/isomorfeus_ferret_ext/test_highlighter.c +3 -1
- data/ext/isomorfeus_ferret_ext/test_index.c +61 -61
- data/ext/isomorfeus_ferret_ext/test_q_const_score.c +2 -1
- data/ext/isomorfeus_ferret_ext/test_q_filtered.c +3 -2
- data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +3 -1
- data/ext/isomorfeus_ferret_ext/test_q_span.c +8 -1
- data/ext/isomorfeus_ferret_ext/test_ram_store.c +4 -4
- data/ext/isomorfeus_ferret_ext/test_search.c +9 -4
- data/ext/isomorfeus_ferret_ext/test_segments.c +4 -3
- data/ext/isomorfeus_ferret_ext/test_sort.c +17 -9
- data/ext/isomorfeus_ferret_ext/test_term.c +4 -2
- data/ext/isomorfeus_ferret_ext/test_term_vectors.c +2 -2
- data/ext/isomorfeus_ferret_ext/test_threading.c +5 -4
- data/lib/isomorfeus/ferret/index/index.rb +8 -3
- data/lib/isomorfeus/ferret/version.rb +1 -1
- metadata +16 -2
@@ -28,17 +28,6 @@ void frt_with_lock_name(FrtStore *store, const char *lock_name, void (*func)(voi
|
|
28
28
|
store->close_lock_i(lock);
|
29
29
|
}
|
30
30
|
|
31
|
-
void frt_store_deref(FrtStore *store)
|
32
|
-
{
|
33
|
-
frt_mutex_lock(&store->mutex_i);
|
34
|
-
if (--store->ref_cnt <= 0) {
|
35
|
-
store->close_i(store);
|
36
|
-
}
|
37
|
-
else {
|
38
|
-
frt_mutex_unlock(&store->mutex_i);
|
39
|
-
}
|
40
|
-
}
|
41
|
-
|
42
31
|
FrtLock *frt_open_lock(FrtStore *store, const char *lockname)
|
43
32
|
{
|
44
33
|
FrtLock *lock = store->open_lock_i(store, lockname);
|
@@ -78,16 +67,25 @@ FrtStore *frt_store_new(void) {
|
|
78
67
|
}
|
79
68
|
|
80
69
|
/**
|
81
|
-
*
|
70
|
+
* close the store freeing allocated resources
|
82
71
|
*
|
83
72
|
* @param store the store struct to free
|
84
73
|
*/
|
85
|
-
void
|
86
|
-
{
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
74
|
+
void frt_store_close(FrtStore *store) {
|
75
|
+
if (store->ref_cnt == 0) {
|
76
|
+
fprintf(stderr, "store ref_cnt to low\n");
|
77
|
+
FRT_RAISE(FRT_STATE_ERROR, "store ref_cnt to low\n");
|
78
|
+
}
|
79
|
+
|
80
|
+
if (FRT_DEREF(store) == 0) {
|
81
|
+
frt_mutex_lock(&store->mutex_i);
|
82
|
+
store->close_i(store);
|
83
|
+
frt_hs_destroy(store->locks);
|
84
|
+
frt_mutex_destroy(&store->mutex);
|
85
|
+
frt_mutex_unlock(&store->mutex_i);
|
86
|
+
frt_mutex_destroy(&store->mutex_i);
|
87
|
+
free(store);
|
88
|
+
}
|
91
89
|
}
|
92
90
|
|
93
91
|
/**
|
@@ -127,7 +125,7 @@ off_t frt_os_pos(FrtOutStream *os)
|
|
127
125
|
return os->buf.start + os->buf.pos;
|
128
126
|
}
|
129
127
|
|
130
|
-
void frt_os_seek(FrtOutStream *os,
|
128
|
+
void frt_os_seek(FrtOutStream *os, frt_off_t new_pos)
|
131
129
|
{
|
132
130
|
frt_os_flush(os);
|
133
131
|
os->buf.start = new_pos;
|
@@ -186,10 +184,12 @@ void frt_os_write_bytes(FrtOutStream *os, const frt_uchar *buf, int len)
|
|
186
184
|
*/
|
187
185
|
FrtInStream *frt_is_new(void) {
|
188
186
|
FrtInStream *is = FRT_ALLOC(FrtInStream);
|
187
|
+
is->f = FRT_ALLOC_AND_ZERO(FrtInStreamFile);
|
188
|
+
is->f->ref_cnt = 1;
|
189
189
|
is->buf.start = 0;
|
190
190
|
is->buf.pos = 0;
|
191
191
|
is->buf.len = 0;
|
192
|
-
is->
|
192
|
+
is->ref_cnt = 1;
|
193
193
|
return is;
|
194
194
|
}
|
195
195
|
|
@@ -202,9 +202,9 @@ FrtInStream *frt_is_new(void) {
|
|
202
202
|
*/
|
203
203
|
static void is_refill(FrtInStream *is)
|
204
204
|
{
|
205
|
-
|
206
|
-
|
207
|
-
|
205
|
+
frt_off_t start = is->buf.start + is->buf.pos;
|
206
|
+
frt_off_t last = start + FRT_BUFFER_SIZE;
|
207
|
+
frt_off_t flen = is->m->length_i(is);
|
208
208
|
|
209
209
|
if (last > flen) { /* don't read past EOF */
|
210
210
|
last = flen;
|
@@ -254,7 +254,7 @@ off_t frt_is_pos(FrtInStream *is)
|
|
254
254
|
frt_uchar *frt_is_read_bytes(FrtInStream *is, frt_uchar *buf, int len)
|
255
255
|
{
|
256
256
|
int i;
|
257
|
-
|
257
|
+
frt_off_t start;
|
258
258
|
|
259
259
|
if ((is->buf.pos + len) < is->buf.len) {
|
260
260
|
for (i = 0; i < len; i++) {
|
@@ -273,12 +273,10 @@ frt_uchar *frt_is_read_bytes(FrtInStream *is, frt_uchar *buf, int len)
|
|
273
273
|
return buf;
|
274
274
|
}
|
275
275
|
|
276
|
-
void frt_is_seek(FrtInStream *is,
|
277
|
-
{
|
276
|
+
void frt_is_seek(FrtInStream *is, frt_off_t pos) {
|
278
277
|
if (pos >= is->buf.start && pos < (is->buf.start + is->buf.len)) {
|
279
278
|
is->buf.pos = pos - is->buf.start; /* seek within buffer */
|
280
|
-
}
|
281
|
-
else {
|
279
|
+
} else {
|
282
280
|
is->buf.start = pos;
|
283
281
|
is->buf.pos = 0;
|
284
282
|
is->buf.len = 0; /* trigger refill() on read() */
|
@@ -286,21 +284,30 @@ void frt_is_seek(FrtInStream *is, off_t pos)
|
|
286
284
|
}
|
287
285
|
}
|
288
286
|
|
289
|
-
void frt_is_close(FrtInStream *is)
|
290
|
-
{
|
291
|
-
|
292
|
-
|
293
|
-
|
287
|
+
void frt_is_close(FrtInStream *is) {
|
288
|
+
if (is->ref_cnt == 0) {
|
289
|
+
fprintf(stderr, "is ref_cnt to low\n");
|
290
|
+
FRT_RAISE(FRT_STATE_ERROR, "is ref_cnt to low\n");
|
291
|
+
}
|
292
|
+
|
293
|
+
if (FRT_DEREF(is) == 0) {
|
294
|
+
if (FRT_DEREF(is->f) == 0) {
|
295
|
+
is->m->close_i(is);
|
296
|
+
free(is->f);
|
297
|
+
}
|
298
|
+
free(is);
|
294
299
|
}
|
295
|
-
free(is);
|
296
300
|
}
|
297
301
|
|
298
302
|
FrtInStream *frt_is_clone(FrtInStream *is)
|
299
303
|
{
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
+
if (!(is->f))
|
305
|
+
return NULL;
|
306
|
+
FrtInStream *new_is = FRT_ALLOC(FrtInStream);
|
307
|
+
memcpy(new_is, is, sizeof(FrtInStream));
|
308
|
+
new_is->ref_cnt = 1;
|
309
|
+
FRT_REF(new_is->f);
|
310
|
+
return new_is;
|
304
311
|
}
|
305
312
|
|
306
313
|
frt_i32 frt_is_read_i32(FrtInStream *is)
|
@@ -377,7 +384,7 @@ unsigned int frt_is_read_vint(FrtInStream *is)
|
|
377
384
|
/* optimized to use unchecked read_byte if there is definitely space */
|
378
385
|
off_t frt_is_read_voff_t(FrtInStream *is)
|
379
386
|
{
|
380
|
-
register
|
387
|
+
register frt_off_t res, b;
|
381
388
|
register int shift = 7;
|
382
389
|
|
383
390
|
if (is->buf.pos > (is->buf.len - VINT_MAX_LEN)) {
|
@@ -546,7 +553,7 @@ void frt_os_write_vint(FrtOutStream *os, register unsigned int num)
|
|
546
553
|
}
|
547
554
|
|
548
555
|
/* optimized to use an unchecked write if there is space */
|
549
|
-
void frt_os_write_voff_t(FrtOutStream *os, register
|
556
|
+
void frt_os_write_voff_t(FrtOutStream *os, register frt_off_t num)
|
550
557
|
{
|
551
558
|
if (os->buf.pos > VINT_END) {
|
552
559
|
while (num > 127) {
|
@@ -13,9 +13,9 @@
|
|
13
13
|
typedef struct FrtBuffer
|
14
14
|
{
|
15
15
|
frt_uchar buf[FRT_BUFFER_SIZE];
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
frt_off_t start;
|
17
|
+
frt_off_t pos;
|
18
|
+
frt_off_t len;
|
19
19
|
} FrtBuffer;
|
20
20
|
|
21
21
|
typedef struct FrtOutStream FrtOutStream;
|
@@ -38,24 +38,24 @@ struct FrtOutStreamMethods {
|
|
38
38
|
* @param pos the position to seek in the stream
|
39
39
|
* @raise FRT_IO_ERROR if there is an error seeking in the output stream
|
40
40
|
*/
|
41
|
-
void (*seek_i)(struct FrtOutStream *os,
|
41
|
+
void (*seek_i)(struct FrtOutStream *os, frt_off_t pos);
|
42
42
|
|
43
43
|
/**
|
44
44
|
* Close any resources used by the output stream +os+
|
45
45
|
*
|
46
46
|
* @param os self
|
47
|
-
* @raise FRT_IO_ERROR if there is an closing the file
|
47
|
+
* @raise FRT_IO_ERROR if there is an error closing the file
|
48
48
|
*/
|
49
49
|
void (*close_i)(struct FrtOutStream *os);
|
50
50
|
};
|
51
51
|
|
52
52
|
typedef struct FrtRAMFile
|
53
53
|
{
|
54
|
-
char
|
55
|
-
frt_uchar
|
56
|
-
int
|
57
|
-
|
58
|
-
int
|
54
|
+
char *name;
|
55
|
+
frt_uchar **buffers;
|
56
|
+
int bufcnt;
|
57
|
+
frt_off_t len;
|
58
|
+
_Atomic unsigned int ref_cnt;
|
59
59
|
} FrtRAMFile;
|
60
60
|
|
61
61
|
struct FrtOutStream
|
@@ -66,7 +66,7 @@ struct FrtOutStream
|
|
66
66
|
int fd;
|
67
67
|
FrtRAMFile *rf;
|
68
68
|
} file;
|
69
|
-
|
69
|
+
frt_off_t pointer; /* only used by RAMOut */
|
70
70
|
const struct FrtOutStreamMethods *m;
|
71
71
|
};
|
72
72
|
|
@@ -95,7 +95,7 @@ struct FrtInStreamMethods
|
|
95
95
|
* @param pos the position to seek
|
96
96
|
* @raise FRT_IO_ERROR if the seek fails
|
97
97
|
*/
|
98
|
-
void (*seek_i)(struct FrtInStream *is,
|
98
|
+
void (*seek_i)(struct FrtInStream *is, frt_off_t pos);
|
99
99
|
|
100
100
|
/**
|
101
101
|
* Returns the length of the input stream +is+
|
@@ -103,7 +103,7 @@ struct FrtInStreamMethods
|
|
103
103
|
* @param is self
|
104
104
|
* @raise FRT_IO_ERROR if there is an error getting the file length
|
105
105
|
*/
|
106
|
-
|
106
|
+
frt_off_t (*length_i)(struct FrtInStream *is);
|
107
107
|
|
108
108
|
/**
|
109
109
|
* Close the resources allocated to the inputstream +is+
|
@@ -114,29 +114,31 @@ struct FrtInStreamMethods
|
|
114
114
|
void (*close_i)(struct FrtInStream *is);
|
115
115
|
};
|
116
116
|
|
117
|
-
struct
|
118
|
-
|
119
|
-
|
120
|
-
union
|
121
|
-
{
|
117
|
+
typedef struct FrtInStreamFile {
|
118
|
+
_Atomic unsigned int ref_cnt;
|
119
|
+
union {
|
122
120
|
int fd;
|
123
121
|
FrtRAMFile *rf;
|
124
122
|
} file;
|
125
|
-
|
126
|
-
|
127
|
-
|
123
|
+
} FrtInStreamFile;
|
124
|
+
|
125
|
+
struct FrtInStream {
|
126
|
+
FrtBuffer buf;
|
127
|
+
struct FrtInStreamFile *f;
|
128
|
+
union {
|
129
|
+
frt_off_t pointer; /* only used by RAMIn */
|
128
130
|
char *path; /* only used by FSIn */
|
129
131
|
FrtCompoundInStream *cis;
|
130
132
|
} d;
|
131
|
-
int
|
133
|
+
_Atomic unsigned int ref_cnt;
|
132
134
|
const struct FrtInStreamMethods *m;
|
133
135
|
};
|
134
136
|
|
135
137
|
struct FrtCompoundInStream
|
136
138
|
{
|
137
139
|
FrtInStream *sub;
|
138
|
-
|
139
|
-
|
140
|
+
frt_off_t offset;
|
141
|
+
frt_off_t length;
|
140
142
|
};
|
141
143
|
|
142
144
|
#define frt_is_length(mis) mis->m->length_i(mis)
|
@@ -161,24 +163,21 @@ typedef struct FrtCompoundStore
|
|
161
163
|
FrtInStream *stream;
|
162
164
|
} FrtCompoundStore;
|
163
165
|
|
164
|
-
struct FrtStore
|
165
|
-
|
166
|
-
int ref_cnt; /* for fs_store only */
|
166
|
+
struct FrtStore {
|
167
|
+
_Atomic unsigned int ref_cnt;
|
167
168
|
frt_mutex_t mutex_i; /* for internal use only */
|
168
169
|
frt_mutex_t mutex; /* external mutex for use outside */
|
169
|
-
union
|
170
|
-
|
171
|
-
|
172
|
-
FrtHash *ht; /* for ram_store only */
|
170
|
+
union {
|
171
|
+
char *path; /* for fs_store only */
|
172
|
+
FrtHash *ht; /* for ram_store only */
|
173
173
|
FrtCompoundStore *cmpd; /* for compound_store only */
|
174
174
|
} dir;
|
175
|
-
|
176
175
|
#if defined POSH_OS_WIN32 || defined POSH_OS_WIN64
|
177
|
-
int
|
176
|
+
int file_mode;
|
178
177
|
#else
|
179
|
-
mode_t
|
178
|
+
mode_t file_mode;
|
180
179
|
#endif
|
181
|
-
FrtHashSet
|
180
|
+
FrtHashSet *locks;
|
182
181
|
|
183
182
|
/**
|
184
183
|
* Create the file +filename+ in the +store+.
|
@@ -275,7 +274,7 @@ struct FrtStore
|
|
275
274
|
* @return the length of the file in bytes
|
276
275
|
* @raise FRT_IO_ERROR if there is an error checking the file length
|
277
276
|
*/
|
278
|
-
|
277
|
+
frt_off_t (*length)(FrtStore *store, const char *filename);
|
279
278
|
|
280
279
|
/**
|
281
280
|
* Allocate the resources needed for the output stream in the +store+ with
|
@@ -443,7 +442,7 @@ extern void frt_with_lock_name(FrtStore *store, const char *lock_name, void (*fu
|
|
443
442
|
*
|
444
443
|
* @param store the store to be dereferenced
|
445
444
|
*/
|
446
|
-
extern void
|
445
|
+
extern void frt_store_close(FrtStore *store);
|
447
446
|
|
448
447
|
/**
|
449
448
|
* Flush the buffered contents of the FrtOutStream to the store.
|
@@ -466,7 +465,7 @@ extern void frt_os_close(FrtOutStream *os);
|
|
466
465
|
* @param os the FrtOutStream to get the position from
|
467
466
|
* @return the current position in FrtOutStream +os+
|
468
467
|
*/
|
469
|
-
extern
|
468
|
+
extern frt_off_t frt_os_pos(FrtOutStream *os);
|
470
469
|
|
471
470
|
/**
|
472
471
|
* Set the current position in FrtOutStream +os+.
|
@@ -475,7 +474,7 @@ extern off_t frt_os_pos(FrtOutStream *os);
|
|
475
474
|
* @param pos the new position in the FrtOutStream
|
476
475
|
* @raise FRT_IO_ERROR if there is a file-system IO error seeking the file
|
477
476
|
*/
|
478
|
-
extern void frt_os_seek(FrtOutStream *os,
|
477
|
+
extern void frt_os_seek(FrtOutStream *os, frt_off_t new_pos);
|
479
478
|
|
480
479
|
/**
|
481
480
|
* Write a single byte +b+ to the FrtOutStream +os+
|
@@ -542,14 +541,14 @@ extern void frt_os_write_u64(FrtOutStream *os, frt_u64 num);
|
|
542
541
|
extern void frt_os_write_vint(FrtOutStream *os, register unsigned int num);
|
543
542
|
|
544
543
|
/**
|
545
|
-
* Write an unsigned
|
544
|
+
* Write an unsigned frt_off_t to FrtOutStream in compressed VINT format.
|
546
545
|
* TODO: describe VINT format
|
547
546
|
*
|
548
547
|
* @param os FrtOutStream to write to
|
549
|
-
* @param num the
|
548
|
+
* @param num the frt_off_t to write
|
550
549
|
* @raise FRT_IO_ERROR if there is an error writing to the file-system
|
551
550
|
*/
|
552
|
-
extern void frt_os_write_voff_t(FrtOutStream *os, register
|
551
|
+
extern void frt_os_write_voff_t(FrtOutStream *os, register frt_off_t num);
|
553
552
|
|
554
553
|
/**
|
555
554
|
* Write an unsigned 64bit int to FrtOutStream in compressed VINT format.
|
@@ -592,7 +591,7 @@ extern void frt_os_write_string(FrtOutStream *os, const char *str);
|
|
592
591
|
* @param is the FrtInStream to get the current position from
|
593
592
|
* @return the current position within the FrtInStream +is+
|
594
593
|
*/
|
595
|
-
extern
|
594
|
+
extern frt_off_t frt_is_pos(FrtInStream *is);
|
596
595
|
|
597
596
|
/**
|
598
597
|
* Set the current position in FrtInStream +is+ to +pos+.
|
@@ -602,7 +601,7 @@ extern off_t frt_is_pos(FrtInStream *is);
|
|
602
601
|
* @raise FRT_IO_ERROR if there is a error seeking from the file-system
|
603
602
|
* @raise FRT_EOF_ERROR if there is an attempt to seek past the end of the file
|
604
603
|
*/
|
605
|
-
extern void frt_is_seek(FrtInStream *is,
|
604
|
+
extern void frt_is_seek(FrtInStream *is, frt_off_t pos);
|
606
605
|
|
607
606
|
/**
|
608
607
|
* Close the FrtInStream freeing all allocated resources.
|
@@ -706,15 +705,15 @@ extern unsigned int frt_is_read_vint(FrtInStream *is);
|
|
706
705
|
extern void frt_is_skip_vints(FrtInStream *is, register int cnt);
|
707
706
|
|
708
707
|
/**
|
709
|
-
* Read a compressed (VINT) unsigned
|
708
|
+
* Read a compressed (VINT) unsigned frt_off_t from the FrtInStream.
|
710
709
|
* TODO: describe VINT format
|
711
710
|
*
|
712
711
|
* @param is the FrtInStream to read from
|
713
|
-
* @return a
|
712
|
+
* @return a frt_off_t
|
714
713
|
* @raise FRT_IO_ERROR if there is a error reading from the file-system
|
715
714
|
* @raise FRT_EOF_ERROR if there is an attempt to read past the end of the file
|
716
715
|
*/
|
717
|
-
extern
|
716
|
+
extern frt_off_t frt_is_read_voff_t(FrtInStream *is);
|
718
717
|
|
719
718
|
/**
|
720
719
|
* Read a compressed (VINT) unsigned 64bit int from the FrtInStream.
|
@@ -788,7 +787,6 @@ extern void frt_close_lock(FrtLock *lock);
|
|
788
787
|
extern FrtStore *frt_store_alloc();
|
789
788
|
extern FrtStore *frt_store_init(FrtStore *store);
|
790
789
|
extern FrtStore *frt_store_new();
|
791
|
-
extern void frt_store_destroy(FrtStore *store);
|
792
790
|
extern FrtOutStream *frt_os_new();
|
793
791
|
extern FrtInStream *frt_is_new();
|
794
792
|
extern int frt_file_is_lock(const char *filename);
|
@@ -4,8 +4,15 @@
|
|
4
4
|
#include <pthread.h>
|
5
5
|
|
6
6
|
typedef pthread_mutex_t frt_mutex_t;
|
7
|
-
typedef
|
7
|
+
typedef struct FrtHash *frt_thread_key_t;
|
8
8
|
typedef pthread_once_t frt_thread_once_t;
|
9
|
+
|
10
|
+
// extern void frb_thread_once(int *once_control, void (*init_routine) (void));
|
11
|
+
extern int frb_thread_key_create(frt_thread_key_t *key, void (*destr_function)(void *));
|
12
|
+
extern void frb_thread_key_delete(frt_thread_key_t key);
|
13
|
+
extern void frb_thread_setspecific(frt_thread_key_t key, const void *pointer);
|
14
|
+
extern void *frb_thread_getspecific(frt_thread_key_t key);
|
15
|
+
|
9
16
|
#define FRT_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER
|
10
17
|
#define FRT_THREAD_ONCE_INIT PTHREAD_ONCE_INIT
|
11
18
|
#define frt_mutex_init(a, b) pthread_mutex_init(a, b)
|
@@ -13,10 +20,10 @@ typedef pthread_once_t frt_thread_once_t;
|
|
13
20
|
#define frt_mutex_trylock(a) pthread_mutex_trylock(a)
|
14
21
|
#define frt_mutex_unlock(a) pthread_mutex_unlock(a)
|
15
22
|
#define frt_mutex_destroy(a) pthread_mutex_destroy(a)
|
16
|
-
#define frt_thread_key_create(a, b)
|
17
|
-
#define frt_thread_key_delete(a)
|
18
|
-
#define frt_thread_setspecific(a, b)
|
19
|
-
#define frt_thread_getspecific(a)
|
23
|
+
#define frt_thread_key_create(a, b) frb_thread_key_create(a, b)
|
24
|
+
#define frt_thread_key_delete(a) frb_thread_key_delete(a)
|
25
|
+
#define frt_thread_setspecific(a, b) frb_thread_setspecific(a, b)
|
26
|
+
#define frt_thread_getspecific(a) frb_thread_getspecific(a)
|
20
27
|
#define frt_thread_once(a, b) pthread_once(a, b)
|
21
28
|
|
22
29
|
#endif
|
@@ -46,8 +46,8 @@ VALUE cStateError;
|
|
46
46
|
void Init_Benchmark(void);
|
47
47
|
void Init_Test(void);
|
48
48
|
|
49
|
-
unsigned long
|
50
|
-
return (unsigned long
|
49
|
+
unsigned long value_hash(const void *key) {
|
50
|
+
return (unsigned long)key;
|
51
51
|
}
|
52
52
|
|
53
53
|
int value_eq(const void *key1, const void *key2) {
|
@@ -61,8 +61,9 @@ void frb_thread_once(int *once_control, void (*init_routine) (void)) {
|
|
61
61
|
}
|
62
62
|
}
|
63
63
|
|
64
|
-
|
64
|
+
int frb_thread_key_create(frt_thread_key_t *key, void (*destr_function)(void *)) {
|
65
65
|
*key = frt_h_new(&value_hash, &value_eq, NULL, destr_function);
|
66
|
+
return 0;
|
66
67
|
}
|
67
68
|
|
68
69
|
void frb_thread_key_delete(frt_thread_key_t key) {
|
@@ -29,7 +29,7 @@ void test_compound_reader(TestCase *tc, void *data)
|
|
29
29
|
Asequal("this is file 2", p = frt_is_read_string(is2)); free(p);
|
30
30
|
frt_is_close(is1);
|
31
31
|
frt_is_close(is2);
|
32
|
-
|
32
|
+
frt_store_close(c_reader);
|
33
33
|
}
|
34
34
|
|
35
35
|
void test_compound_writer(TestCase *tc, void *data)
|
@@ -42,12 +42,12 @@ void test_compound_writer(TestCase *tc, void *data)
|
|
42
42
|
FrtInStream *is;
|
43
43
|
|
44
44
|
frt_os_write_u32(os1, 20);
|
45
|
-
frt_os_write_string(os2,"this is file2");
|
45
|
+
frt_os_write_string(os2, "this is file2");
|
46
46
|
frt_os_close(os1);
|
47
47
|
frt_os_close(os2);
|
48
|
-
cw = frt_open_cw(store,
|
49
|
-
frt_cw_add_file(cw,
|
50
|
-
frt_cw_add_file(cw,
|
48
|
+
cw = frt_open_cw(store, "cfile");
|
49
|
+
frt_cw_add_file(cw, "file1");
|
50
|
+
frt_cw_add_file(cw, "file2");
|
51
51
|
frt_cw_close(cw, NULL);
|
52
52
|
|
53
53
|
is = store->open_input(store, "cfile");
|
@@ -109,7 +109,7 @@ void test_compound_io(TestCase *tc, void *data)
|
|
109
109
|
Asequal(short_string, p = frt_is_read_string(is3)); free(p);
|
110
110
|
frt_is_close(is3);
|
111
111
|
|
112
|
-
|
112
|
+
frt_store_close(c_reader);
|
113
113
|
}
|
114
114
|
|
115
115
|
#define MAX_TEST_WORDS 50
|
@@ -150,7 +150,7 @@ void test_compound_io_many_files(TestCase *tc, void *data)
|
|
150
150
|
Aiequal(frt_is_length(is), frt_is_pos(is));
|
151
151
|
frt_is_close(is);
|
152
152
|
}
|
153
|
-
|
153
|
+
frt_store_close(c_reader);
|
154
154
|
}
|
155
155
|
|
156
156
|
TestSuite *ts_compound_io(TestSuite *suite)
|
@@ -164,7 +164,7 @@ TestSuite *ts_compound_io(TestSuite *suite)
|
|
164
164
|
tst_run_test(suite, test_compound_io, store);
|
165
165
|
tst_run_test(suite, test_compound_io_many_files, store);
|
166
166
|
|
167
|
-
|
167
|
+
frt_store_close(store);
|
168
168
|
|
169
169
|
return suite;
|
170
170
|
}
|
@@ -190,7 +190,7 @@ static void test_fis_rw(TestCase *tc, void *data)
|
|
190
190
|
is = store->open_input(store, "fields");
|
191
191
|
fis = frt_fis_read(is);
|
192
192
|
frt_is_close(is);
|
193
|
-
Aiequal(FRT_STORE_YES, fis->
|
193
|
+
Aiequal(FRT_STORE_YES, fis->store_val);
|
194
194
|
Aiequal(FRT_INDEX_UNTOKENIZED_OMIT_NORMS, fis->index);
|
195
195
|
Aiequal(FRT_TERM_VECTOR_WITH_POSITIONS_OFFSETS, fis->term_vector);
|
196
196
|
|
@@ -247,7 +247,7 @@ static void test_fis_rw(TestCase *tc, void *data)
|
|
247
247
|
" term_vector: :with_positions_offsets\n", str);
|
248
248
|
free(str);
|
249
249
|
frt_fis_deref(fis);
|
250
|
-
|
250
|
+
frt_store_close(store);
|
251
251
|
}
|
252
252
|
|
253
253
|
/****************************************************************************
|
@@ -373,8 +373,8 @@ static void test_fields_rw_single(TestCase *tc, void *data)
|
|
373
373
|
check_df_data(df, 4, "go");
|
374
374
|
|
375
375
|
free(bin_data);
|
376
|
-
|
377
|
-
|
376
|
+
frt_store_close(store);
|
377
|
+
frt_doc_destroy(doc);
|
378
378
|
frt_fis_deref(fis);
|
379
379
|
}
|
380
380
|
|
@@ -453,8 +453,8 @@ static void test_fields_rw_multi(TestCase *tc, void *data)
|
|
453
453
|
check_df_data(df, 4, "go");
|
454
454
|
|
455
455
|
free(bin_data);
|
456
|
-
|
457
|
-
|
456
|
+
frt_store_close(store);
|
457
|
+
frt_doc_destroy(doc);
|
458
458
|
frt_fis_deref(fis);
|
459
459
|
}
|
460
460
|
|
@@ -490,7 +490,7 @@ static void test_lazy_field_loading(TestCase *tc, void *data)
|
|
490
490
|
lazy_doc = frt_fr_get_lazy_doc(fr, 0);
|
491
491
|
frt_fr_close(fr);
|
492
492
|
frt_fis_deref(fis);
|
493
|
-
|
493
|
+
frt_store_close(store);
|
494
494
|
|
495
495
|
lazy_df = frt_lazy_doc_get(lazy_doc, rb_intern("stored"));
|
496
496
|
Apnull(lazy_doc->fields[0]->data[0].text);
|
@@ -50,7 +50,7 @@ void prepare_filter_index(FrtStore *store)
|
|
50
50
|
frt_doc_add_field(doc, frt_df_add_data(frt_df_new(date), (char *)data[i].date, enc));
|
51
51
|
frt_doc_add_field(doc, frt_df_add_data(frt_df_new(flipflop), (char *)data[i].flipflop, enc));
|
52
52
|
frt_iw_add_doc(iw, doc);
|
53
|
-
|
53
|
+
frt_doc_destroy(doc);
|
54
54
|
}
|
55
55
|
frt_iw_close(iw);
|
56
56
|
return;
|
@@ -328,7 +328,8 @@ TestSuite *ts_filter(TestSuite *suite)
|
|
328
328
|
tst_run_test(suite, test_filter_func, searcher);
|
329
329
|
tst_run_test(suite, test_score_altering_filter_func, searcher);
|
330
330
|
|
331
|
-
|
332
|
-
|
331
|
+
frt_searcher_close(searcher);
|
332
|
+
frt_ir_close(ir);
|
333
|
+
frt_store_close(store);
|
333
334
|
return suite;
|
334
335
|
}
|
@@ -120,6 +120,7 @@ static void check_searcher_match_vector(TestCase *tc, FrtStore *store, FrtQuery
|
|
120
120
|
}
|
121
121
|
frt_matchv_destroy(mv);
|
122
122
|
frt_searcher_close(sea);
|
123
|
+
frt_ir_close(ir);
|
123
124
|
}
|
124
125
|
|
125
126
|
#define Chk_mv(query, doc_num, expected) check_match_vector(tc, store, query, doc_num, expected)
|
@@ -529,6 +530,7 @@ static void test_searcher_highlight(TestCase *tc, void *data)
|
|
529
530
|
frt_q_deref(q);
|
530
531
|
|
531
532
|
frt_searcher_close(sea);
|
533
|
+
frt_ir_close(ir);
|
532
534
|
}
|
533
535
|
|
534
536
|
TestSuite *ts_highlighter(TestSuite *suite)
|
@@ -547,6 +549,6 @@ TestSuite *ts_highlighter(TestSuite *suite)
|
|
547
549
|
tst_run_test(suite, test_searcher_get_match_vector, store);
|
548
550
|
tst_run_test(suite, test_searcher_highlight, store);
|
549
551
|
|
550
|
-
|
552
|
+
frt_store_close(store);
|
551
553
|
return suite;
|
552
554
|
}
|