isomorfeus-ferret 0.12.5 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +101 -19
- data/README.md +54 -4
- data/ext/isomorfeus_ferret_ext/bm_bitvector.c +22 -30
- data/ext/isomorfeus_ferret_ext/bm_hash.c +6 -12
- data/ext/isomorfeus_ferret_ext/bm_micro_string.c +3 -6
- data/ext/isomorfeus_ferret_ext/bm_store.c +11 -22
- data/ext/isomorfeus_ferret_ext/brotli_common_constants.c +15 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_constants.h +200 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_context.c +156 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_context.h +113 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_dictionary.c +5914 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_dictionary.h +64 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_platform.c +22 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_platform.h +594 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_transform.c +291 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_transform.h +85 -0
- data/ext/isomorfeus_ferret_ext/brotli_common_version.h +26 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_bit_reader.c +76 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_bit_reader.h +351 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_decode.c +2608 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_huffman.c +339 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_huffman.h +121 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_prefix.h +732 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_state.c +159 -0
- data/ext/isomorfeus_ferret_ext/brotli_dec_state.h +365 -0
- data/ext/isomorfeus_ferret_ext/brotli_decode.h +344 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_backward_references.c +145 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_backward_references.h +39 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_backward_references_hq.c +843 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_backward_references_hq.h +95 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_backward_references_inc.h +163 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_bit_cost.c +35 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_bit_cost.h +63 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_bit_cost_inc.h +127 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_block_encoder_inc.h +34 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_block_splitter.c +194 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_block_splitter.h +51 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_block_splitter_inc.h +440 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_brotli_bit_stream.c +1314 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_brotli_bit_stream.h +84 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_cluster.c +56 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_cluster.h +48 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_cluster_inc.h +320 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_command.c +28 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_command.h +190 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_compress_fragment.c +790 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_compress_fragment.h +61 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_compress_fragment_two_pass.c +645 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_compress_fragment_two_pass.h +54 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_dictionary_hash.c +1846 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_dictionary_hash.h +25 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_encode.c +1927 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_encoder_dict.c +33 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_encoder_dict.h +43 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_entropy_encode.c +503 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_entropy_encode.h +122 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_entropy_encode_static.h +539 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_fast_log.c +105 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_fast_log.h +66 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_find_match_length.h +79 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash.h +488 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash_composite_inc.h +125 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash_forgetful_chain_inc.h +293 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash_longest_match64_inc.h +267 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash_longest_match_inc.h +262 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash_longest_match_quickly_inc.h +266 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash_rolling_inc.h +212 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_hash_to_binary_tree_inc.h +329 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_histogram.c +100 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_histogram.h +63 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_histogram_inc.h +51 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_literal_cost.c +175 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_literal_cost.h +30 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_memory.c +170 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_memory.h +114 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_metablock.c +663 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_metablock.h +105 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_metablock_inc.h +183 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_params.h +46 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_prefix.h +53 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_quality.h +165 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_ringbuffer.h +167 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_static_dict.c +486 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_static_dict.h +40 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_static_dict_lut.h +5864 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_utf8_util.c +85 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_utf8_util.h +32 -0
- data/ext/isomorfeus_ferret_ext/brotli_enc_write_bits.h +87 -0
- data/ext/isomorfeus_ferret_ext/brotli_encode.h +448 -0
- data/ext/isomorfeus_ferret_ext/brotli_port.h +288 -0
- data/ext/isomorfeus_ferret_ext/brotli_types.h +83 -0
- data/ext/isomorfeus_ferret_ext/bzip_blocksort.c +1094 -0
- data/ext/isomorfeus_ferret_ext/bzip_huffman.c +205 -0
- data/ext/isomorfeus_ferret_ext/bzlib.c +1572 -0
- data/ext/isomorfeus_ferret_ext/bzlib.h +282 -0
- data/ext/isomorfeus_ferret_ext/bzlib_compress.c +672 -0
- data/ext/isomorfeus_ferret_ext/bzlib_crctable.c +104 -0
- data/ext/isomorfeus_ferret_ext/bzlib_decompress.c +652 -0
- data/ext/isomorfeus_ferret_ext/bzlib_private.h +509 -0
- data/ext/isomorfeus_ferret_ext/bzlib_randtable.c +84 -0
- data/ext/isomorfeus_ferret_ext/fio_tmpfile.h +53 -53
- data/ext/isomorfeus_ferret_ext/frb_analysis.c +785 -1192
- data/ext/isomorfeus_ferret_ext/frb_index.c +513 -464
- data/ext/isomorfeus_ferret_ext/frb_qparser.c +48 -60
- data/ext/isomorfeus_ferret_ext/frb_search.c +1520 -1002
- data/ext/isomorfeus_ferret_ext/frb_store.c +96 -96
- data/ext/isomorfeus_ferret_ext/frb_threading.h +0 -1
- data/ext/isomorfeus_ferret_ext/frb_utils.c +147 -196
- data/ext/isomorfeus_ferret_ext/frt_analysis.c +695 -1090
- data/ext/isomorfeus_ferret_ext/frt_analysis.h +174 -170
- data/ext/isomorfeus_ferret_ext/frt_array.c +2 -4
- data/ext/isomorfeus_ferret_ext/frt_bitvector.c +9 -16
- data/ext/isomorfeus_ferret_ext/frt_bitvector.h +32 -81
- data/ext/isomorfeus_ferret_ext/frt_document.c +15 -20
- data/ext/isomorfeus_ferret_ext/frt_document.h +10 -9
- data/ext/isomorfeus_ferret_ext/frt_except.c +5 -12
- data/ext/isomorfeus_ferret_ext/frt_field_index.c +3 -3
- data/ext/isomorfeus_ferret_ext/frt_field_index.h +6 -7
- data/ext/isomorfeus_ferret_ext/frt_filter.c +35 -46
- data/ext/isomorfeus_ferret_ext/frt_fs_store.c +2 -0
- data/ext/isomorfeus_ferret_ext/frt_global.c +105 -63
- data/ext/isomorfeus_ferret_ext/frt_global.h +7 -3
- data/ext/isomorfeus_ferret_ext/frt_hash.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_ind.c +32 -35
- data/ext/isomorfeus_ferret_ext/frt_ind.h +9 -9
- data/ext/isomorfeus_ferret_ext/frt_index.c +714 -384
- data/ext/isomorfeus_ferret_ext/frt_index.h +274 -290
- data/ext/isomorfeus_ferret_ext/frt_mempool.c +1 -2
- data/ext/isomorfeus_ferret_ext/frt_multimapper.c +4 -7
- data/ext/isomorfeus_ferret_ext/frt_q_boolean.c +67 -91
- data/ext/isomorfeus_ferret_ext/frt_q_const_score.c +35 -38
- data/ext/isomorfeus_ferret_ext/frt_q_filtered_query.c +53 -72
- data/ext/isomorfeus_ferret_ext/frt_q_fuzzy.c +25 -32
- data/ext/isomorfeus_ferret_ext/frt_q_match_all.c +21 -23
- data/ext/isomorfeus_ferret_ext/frt_q_multi_term.c +66 -103
- data/ext/isomorfeus_ferret_ext/frt_q_parser.c +207 -195
- data/ext/isomorfeus_ferret_ext/frt_q_phrase.c +26 -25
- data/ext/isomorfeus_ferret_ext/frt_q_prefix.c +17 -14
- data/ext/isomorfeus_ferret_ext/frt_q_range.c +102 -131
- data/ext/isomorfeus_ferret_ext/frt_q_span.c +179 -178
- data/ext/isomorfeus_ferret_ext/frt_q_term.c +47 -60
- data/ext/isomorfeus_ferret_ext/frt_q_wildcard.c +18 -16
- data/ext/isomorfeus_ferret_ext/frt_ram_store.c +46 -84
- data/ext/isomorfeus_ferret_ext/frt_search.c +105 -146
- data/ext/isomorfeus_ferret_ext/frt_search.h +331 -320
- data/ext/isomorfeus_ferret_ext/frt_similarity.c +5 -13
- data/ext/isomorfeus_ferret_ext/frt_similarity.h +7 -12
- data/ext/isomorfeus_ferret_ext/frt_sort.c +105 -149
- data/ext/isomorfeus_ferret_ext/frt_store.c +13 -7
- data/ext/isomorfeus_ferret_ext/frt_store.h +10 -2
- data/ext/isomorfeus_ferret_ext/frt_threading.h +0 -1
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.c +21 -109
- data/ext/isomorfeus_ferret_ext/isomorfeus_ferret.h +2 -32
- data/ext/isomorfeus_ferret_ext/lz4.c +2495 -0
- data/ext/isomorfeus_ferret_ext/lz4.h +774 -0
- data/ext/isomorfeus_ferret_ext/lz4frame.c +1899 -0
- data/ext/isomorfeus_ferret_ext/lz4frame.h +623 -0
- data/ext/isomorfeus_ferret_ext/lz4hc.c +1615 -0
- data/ext/isomorfeus_ferret_ext/lz4hc.h +413 -0
- data/ext/isomorfeus_ferret_ext/lz4xxhash.c +1030 -0
- data/ext/isomorfeus_ferret_ext/lz4xxhash.h +328 -0
- data/ext/isomorfeus_ferret_ext/stem_modules.h +0 -86
- data/ext/isomorfeus_ferret_ext/test.c +1 -2
- data/ext/isomorfeus_ferret_ext/test_1710.c +11 -12
- data/ext/isomorfeus_ferret_ext/test_analysis.c +590 -583
- data/ext/isomorfeus_ferret_ext/test_compound_io.c +1 -1
- data/ext/isomorfeus_ferret_ext/test_document.c +19 -15
- data/ext/isomorfeus_ferret_ext/test_except.c +1 -2
- data/ext/isomorfeus_ferret_ext/test_fields.c +111 -100
- data/ext/isomorfeus_ferret_ext/test_file_deleter.c +10 -27
- data/ext/isomorfeus_ferret_ext/test_filter.c +11 -8
- data/ext/isomorfeus_ferret_ext/test_hash.c +2 -2
- data/ext/isomorfeus_ferret_ext/test_hashset.c +1 -1
- data/ext/isomorfeus_ferret_ext/test_highlighter.c +15 -11
- data/ext/isomorfeus_ferret_ext/test_index.c +373 -363
- data/ext/isomorfeus_ferret_ext/test_q_const_score.c +5 -3
- data/ext/isomorfeus_ferret_ext/test_q_filtered.c +5 -3
- data/ext/isomorfeus_ferret_ext/test_q_fuzzy.c +13 -10
- data/ext/isomorfeus_ferret_ext/test_q_parser.c +45 -7
- data/ext/isomorfeus_ferret_ext/test_q_span.c +15 -12
- data/ext/isomorfeus_ferret_ext/test_ram_store.c +3 -3
- data/ext/isomorfeus_ferret_ext/test_search.c +60 -62
- data/ext/isomorfeus_ferret_ext/test_segments.c +5 -4
- data/ext/isomorfeus_ferret_ext/test_sort.c +17 -14
- data/ext/isomorfeus_ferret_ext/test_store.c +2 -0
- data/ext/isomorfeus_ferret_ext/test_term.c +3 -1
- data/ext/isomorfeus_ferret_ext/test_term_vectors.c +9 -10
- data/ext/isomorfeus_ferret_ext/test_test.c +1 -2
- data/ext/isomorfeus_ferret_ext/test_threading.c +9 -10
- data/ext/isomorfeus_ferret_ext/testhelper.c +1 -2
- data/lib/isomorfeus/ferret/version.rb +1 -1
- metadata +113 -58
- data/ext/isomorfeus_ferret_ext/email.rl +0 -21
- data/ext/isomorfeus_ferret_ext/frt_scanner.c +0 -900
- data/ext/isomorfeus_ferret_ext/frt_scanner.h +0 -28
- data/ext/isomorfeus_ferret_ext/frt_scanner_mb.c +0 -6706
- data/ext/isomorfeus_ferret_ext/frt_scanner_utf8.c +0 -4420
- data/ext/isomorfeus_ferret_ext/scanner.h +0 -28
- data/ext/isomorfeus_ferret_ext/scanner.in +0 -43
- data/ext/isomorfeus_ferret_ext/scanner.rl +0 -84
- data/ext/isomorfeus_ferret_ext/scanner_mb.rl +0 -200
- data/ext/isomorfeus_ferret_ext/scanner_utf8.rl +0 -85
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_basque.c +0 -1167
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_basque.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_catalan.c +0 -1433
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_catalan.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_danish.c +0 -301
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_danish.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_dutch.c +0 -590
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_dutch.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_english.c +0 -1049
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_english.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_finnish.c +0 -705
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_finnish.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_french.c +0 -1239
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_french.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_german.c +0 -477
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_german.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_hungarian.c +0 -1217
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_hungarian.h +0 -7
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_indonesian.c +0 -394
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_indonesian.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_irish.c +0 -457
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_irish.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_italian.c +0 -1009
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_italian.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_norwegian.c +0 -259
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_norwegian.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_porter.c +0 -704
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_porter.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_portuguese.c +0 -948
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_portuguese.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_spanish.c +0 -1028
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_spanish.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_swedish.c +0 -275
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_1_swedish.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_2_hungarian.c +0 -849
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_2_hungarian.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_2_romanian.c +0 -952
- data/ext/isomorfeus_ferret_ext/stem_ISO_8859_2_romanian.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_KOI8_R_russian.c +0 -669
- data/ext/isomorfeus_ferret_ext/stem_KOI8_R_russian.h +0 -6
- data/ext/isomorfeus_ferret_ext/stem_modules.txt +0 -63
- data/ext/isomorfeus_ferret_ext/uchar-ucs4.rl +0 -1854
- data/ext/isomorfeus_ferret_ext/uchar-utf8.rl +0 -1999
- data/ext/isomorfeus_ferret_ext/url.rl +0 -27
@@ -13,8 +13,7 @@
|
|
13
13
|
*
|
14
14
|
****************************************************************************/
|
15
15
|
|
16
|
-
FrtTerm *frt_term_new(
|
17
|
-
{
|
16
|
+
FrtTerm *frt_term_new(ID field, const char *text) {
|
18
17
|
FrtTerm *t = FRT_ALLOC(FrtTerm);
|
19
18
|
t->field = field;
|
20
19
|
t->text = frt_estrdup(text);
|
@@ -44,8 +43,7 @@ unsigned long long frt_term_hash(const void *t)
|
|
44
43
|
*
|
45
44
|
****************************************************************************/
|
46
45
|
|
47
|
-
static float simdef_length_norm(FrtSimilarity *s,
|
48
|
-
{
|
46
|
+
static float simdef_length_norm(FrtSimilarity *s, ID field, int num_terms) {
|
49
47
|
(void)s;
|
50
48
|
(void)field;
|
51
49
|
return (float)(1.0 / sqrt(num_terms));
|
@@ -69,17 +67,12 @@ static float simdef_sloppy_freq(struct FrtSimilarity *s, int distance)
|
|
69
67
|
return (float)(1.0 / (double)(distance + 1));
|
70
68
|
}
|
71
69
|
|
72
|
-
static float simdef_idf_term(struct FrtSimilarity *s,
|
73
|
-
FrtSearcher *searcher)
|
74
|
-
{
|
70
|
+
static float simdef_idf_term(struct FrtSimilarity *s, ID field, char *term, FrtSearcher *searcher) {
|
75
71
|
return s->idf(s, searcher->doc_freq(searcher, field, term),
|
76
72
|
searcher->max_doc(searcher));
|
77
73
|
}
|
78
74
|
|
79
|
-
static float simdef_idf_phrase(struct FrtSimilarity *s,
|
80
|
-
FrtPhrasePosition *positions,
|
81
|
-
int pp_cnt, FrtSearcher *searcher)
|
82
|
-
{
|
75
|
+
static float simdef_idf_phrase(struct FrtSimilarity *s, ID field, FrtPhrasePosition *positions, int pp_cnt, FrtSearcher *searcher) {
|
83
76
|
float idf = 0.0f;
|
84
77
|
int i, j;
|
85
78
|
for (i = 0; i < pp_cnt; i++) {
|
@@ -136,8 +129,7 @@ static FrtSimilarity default_similarity = {
|
|
136
129
|
&simdef_destroy
|
137
130
|
};
|
138
131
|
|
139
|
-
FrtSimilarity *frt_sim_create_default()
|
140
|
-
{
|
132
|
+
FrtSimilarity *frt_sim_create_default(void) {
|
141
133
|
int i;
|
142
134
|
if (!default_similarity.data) {
|
143
135
|
for (i = 0; i < 256; i++) {
|
@@ -9,13 +9,12 @@ typedef struct FrtSearcher FrtSearcher;
|
|
9
9
|
*
|
10
10
|
****************************************************************************/
|
11
11
|
|
12
|
-
typedef struct FrtTerm
|
13
|
-
|
14
|
-
FrtSymbol field;
|
12
|
+
typedef struct FrtTerm {
|
13
|
+
ID field;
|
15
14
|
char *text;
|
16
15
|
} FrtTerm;
|
17
16
|
|
18
|
-
extern FrtTerm *frt_term_new(
|
17
|
+
extern FrtTerm *frt_term_new(ID field, const char *text);
|
19
18
|
extern void frt_term_destroy(FrtTerm *self);
|
20
19
|
extern int frt_term_eq(const void *t1, const void *t2);
|
21
20
|
extern unsigned long long frt_term_hash(const void *t);
|
@@ -40,19 +39,15 @@ typedef struct FrtPhrasePosition
|
|
40
39
|
|
41
40
|
typedef struct FrtSimilarity FrtSimilarity;
|
42
41
|
|
43
|
-
struct FrtSimilarity
|
44
|
-
{
|
42
|
+
struct FrtSimilarity {
|
45
43
|
void *data;
|
46
44
|
float norm_table[256];
|
47
|
-
float (*length_norm)(FrtSimilarity *self,
|
45
|
+
float (*length_norm)(FrtSimilarity *self, ID field, int num_terms);
|
48
46
|
float (*query_norm)(FrtSimilarity *self, float sum_of_squared_weights);
|
49
47
|
float (*tf)(FrtSimilarity *self, float freq);
|
50
48
|
float (*sloppy_freq)(FrtSimilarity *self, int distance);
|
51
|
-
float (*idf_term)(FrtSimilarity *self,
|
52
|
-
|
53
|
-
float (*idf_phrase)(FrtSimilarity *self, FrtSymbol field,
|
54
|
-
FrtPhrasePosition *positions,
|
55
|
-
int pp_cnt, FrtSearcher *searcher);
|
49
|
+
float (*idf_term)(FrtSimilarity *self, ID field, char *term, FrtSearcher *searcher);
|
50
|
+
float (*idf_phrase)(FrtSimilarity *self, ID field, FrtPhrasePosition *positions, int pp_cnt, FrtSearcher *searcher);
|
56
51
|
float (*idf)(FrtSimilarity *self, int doc_freq, int num_docs);
|
57
52
|
float (*coord)(FrtSimilarity *self, int overlap, int max_overlap);
|
58
53
|
float (*decode_norm)(FrtSimilarity *self, unsigned char b);
|
@@ -3,68 +3,75 @@
|
|
3
3
|
#include "frt_index.h"
|
4
4
|
#include "frt_field_index.h"
|
5
5
|
|
6
|
+
#undef close
|
7
|
+
|
6
8
|
/***************************************************************************
|
7
9
|
*
|
8
10
|
* FrtSortField
|
9
11
|
*
|
10
12
|
***************************************************************************/
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
14
|
+
FrtSortField *frt_sort_field_alloc(void) {
|
15
|
+
return FRT_ALLOC(FrtSortField);
|
16
|
+
}
|
17
|
+
|
18
|
+
static FrtSortField *sort_field_init(FrtSortField *self, ID field, SortType type, bool reverse,
|
15
19
|
int (*compare)(void *index_ptr, FrtHit *hit1, FrtHit *hit2),
|
16
20
|
void (*get_val)(void *index_ptr, FrtHit *hit1, FrtComparable *comparable),
|
17
|
-
const FrtFieldIndexClass *field_index_class)
|
18
|
-
{
|
19
|
-
FrtSortField *self = FRT_ALLOC(FrtSortField);
|
21
|
+
const FrtFieldIndexClass *field_index_class) {
|
20
22
|
self->field = field;
|
21
23
|
self->type = type;
|
22
24
|
self->reverse = reverse;
|
23
25
|
self->field_index_class = field_index_class;
|
24
26
|
self->compare = compare;
|
25
27
|
self->get_val = get_val;
|
28
|
+
self->rfield = Qnil;
|
26
29
|
return self;
|
27
30
|
}
|
28
31
|
|
29
|
-
FrtSortField *
|
30
|
-
|
31
|
-
|
32
|
+
static FrtSortField *sort_field_new(ID field, SortType type, bool reverse,
|
33
|
+
int (*compare)(void *index_ptr, FrtHit *hit1, FrtHit *hit2),
|
34
|
+
void (*get_val)(void *index_ptr, FrtHit *hit1, FrtComparable *comparable),
|
35
|
+
const FrtFieldIndexClass *field_index_class) {
|
36
|
+
FrtSortField *self = frt_sort_field_alloc();
|
37
|
+
return sort_field_init(self, field, type, reverse, compare, get_val, field_index_class);
|
38
|
+
}
|
39
|
+
|
40
|
+
FrtSortField *frt_sort_field_init(FrtSortField *sf, ID field, SortType type, bool reverse) {
|
32
41
|
switch (type) {
|
33
42
|
case FRT_SORT_TYPE_SCORE:
|
34
|
-
sf =
|
43
|
+
sf = frt_sort_field_score_init(sf, reverse);
|
35
44
|
break;
|
36
45
|
case FRT_SORT_TYPE_DOC:
|
37
|
-
sf =
|
46
|
+
sf = frt_sort_field_doc_init(sf, reverse);
|
38
47
|
break;
|
39
48
|
case FRT_SORT_TYPE_BYTE:
|
40
|
-
sf =
|
49
|
+
sf = frt_sort_field_byte_init(sf, field, reverse);
|
41
50
|
break;
|
42
51
|
case FRT_SORT_TYPE_INTEGER:
|
43
|
-
sf =
|
52
|
+
sf = frt_sort_field_int_init(sf, field, reverse);
|
44
53
|
break;
|
45
54
|
case FRT_SORT_TYPE_FLOAT:
|
46
|
-
sf =
|
55
|
+
sf = frt_sort_field_float_init(sf, field, reverse);
|
47
56
|
break;
|
48
57
|
case FRT_SORT_TYPE_STRING:
|
49
|
-
sf =
|
58
|
+
sf = frt_sort_field_string_init(sf, field, reverse);
|
50
59
|
break;
|
51
60
|
case FRT_SORT_TYPE_AUTO:
|
52
|
-
sf =
|
61
|
+
sf = frt_sort_field_auto_init(sf, field, reverse);
|
53
62
|
break;
|
54
63
|
}
|
55
64
|
return sf;
|
56
65
|
}
|
57
66
|
|
58
|
-
void frt_sort_field_destroy(void *p)
|
59
|
-
{
|
67
|
+
void frt_sort_field_destroy(void *p) {
|
60
68
|
free(p);
|
61
69
|
}
|
62
70
|
|
63
71
|
/*
|
64
72
|
* field:<type>!
|
65
73
|
*/
|
66
|
-
char *frt_sort_field_to_s(FrtSortField *self)
|
67
|
-
{
|
74
|
+
char *frt_sort_field_to_s(FrtSortField *self) {
|
68
75
|
char *str;
|
69
76
|
const char *type = NULL;
|
70
77
|
switch (self->type) {
|
@@ -106,14 +113,12 @@ char *frt_sort_field_to_s(FrtSortField *self)
|
|
106
113
|
* ScoreSortField
|
107
114
|
***************************************************************************/
|
108
115
|
|
109
|
-
|
110
|
-
{
|
116
|
+
void frt_sort_field_score_get_val(void *index, FrtHit *hit, FrtComparable *comparable) {
|
111
117
|
(void)index;
|
112
118
|
comparable->val.f = hit->score;
|
113
119
|
}
|
114
120
|
|
115
|
-
|
116
|
-
{
|
121
|
+
int frt_sort_field_score_compare(void *index_ptr, FrtHit *hit2, FrtHit *hit1) {
|
117
122
|
float val1 = hit1->score;
|
118
123
|
float val2 = hit2->score;
|
119
124
|
(void)index_ptr;
|
@@ -123,41 +128,27 @@ static int sf_score_compare(void *index_ptr, FrtHit *hit2, FrtHit *hit1)
|
|
123
128
|
else return 0;
|
124
129
|
}
|
125
130
|
|
126
|
-
FrtSortField *
|
127
|
-
|
128
|
-
return sort_field_alloc((ID)NULL, FRT_SORT_TYPE_SCORE, reverse, &sf_score_compare, &sf_score_get_val, NULL);
|
131
|
+
FrtSortField *frt_sort_field_score_init(FrtSortField *self, bool reverse) {
|
132
|
+
return sort_field_init(self, (ID)NULL, FRT_SORT_TYPE_SCORE, reverse, &frt_sort_field_score_compare, &frt_sort_field_score_get_val, NULL);
|
129
133
|
}
|
130
134
|
|
131
|
-
|
132
|
-
NULL,
|
133
|
-
|
134
|
-
FRT_SORT_TYPE_SCORE, /* type */
|
135
|
-
false, /* reverse */
|
136
|
-
&sf_score_compare, /* compare */
|
137
|
-
&sf_score_get_val, /* get_val */
|
138
|
-
};
|
135
|
+
FrtSortField *frt_sort_field_score_new(bool reverse) {
|
136
|
+
return sort_field_new((ID)NULL, FRT_SORT_TYPE_SCORE, reverse, &frt_sort_field_score_compare, &frt_sort_field_score_get_val, NULL);
|
137
|
+
}
|
139
138
|
|
140
|
-
|
141
|
-
|
142
|
-
(ID)NULL, /* field */
|
143
|
-
FRT_SORT_TYPE_SCORE, /* type */
|
144
|
-
true, /* reverse */
|
145
|
-
&sf_score_compare, /* compare */
|
146
|
-
&sf_score_get_val, /* get_val */
|
147
|
-
};
|
139
|
+
FrtSortField *FRT_SORT_FIELD_SCORE;
|
140
|
+
FrtSortField *FRT_SORT_FIELD_SCORE_REV;
|
148
141
|
|
149
142
|
/**************************************************************************
|
150
143
|
* DocSortField
|
151
144
|
***************************************************************************/
|
152
145
|
|
153
|
-
|
154
|
-
{
|
146
|
+
void frt_sort_field_doc_get_val(void *index, FrtHit *hit, FrtComparable *comparable) {
|
155
147
|
(void)index;
|
156
148
|
comparable->val.l = hit->doc;
|
157
149
|
}
|
158
150
|
|
159
|
-
|
160
|
-
{
|
151
|
+
int frt_sort_field_doc_compare(void *index_ptr, FrtHit *hit1, FrtHit *hit2) {
|
161
152
|
int val1 = hit1->doc;
|
162
153
|
int val2 = hit2->doc;
|
163
154
|
(void)index_ptr;
|
@@ -167,41 +158,26 @@ static int sf_doc_compare(void *index_ptr, FrtHit *hit1, FrtHit *hit2)
|
|
167
158
|
else return 0;
|
168
159
|
}
|
169
160
|
|
170
|
-
FrtSortField *
|
171
|
-
|
172
|
-
return sort_field_alloc((ID)NULL, FRT_SORT_TYPE_DOC, reverse,
|
173
|
-
&sf_doc_compare, &sf_doc_get_val, NULL);
|
161
|
+
FrtSortField *frt_sort_field_doc_init(FrtSortField *self, bool reverse) {
|
162
|
+
return sort_field_init(self, (ID)NULL, FRT_SORT_TYPE_DOC, reverse, &frt_sort_field_doc_compare, &frt_sort_field_doc_get_val, NULL);
|
174
163
|
}
|
175
164
|
|
176
|
-
|
177
|
-
NULL,
|
178
|
-
|
179
|
-
FRT_SORT_TYPE_DOC, /* type */
|
180
|
-
false, /* reverse */
|
181
|
-
&sf_doc_compare, /* compare */
|
182
|
-
&sf_doc_get_val, /* get_val */
|
183
|
-
};
|
165
|
+
FrtSortField *frt_sort_field_doc_new(bool reverse) {
|
166
|
+
return sort_field_new((ID)NULL, FRT_SORT_TYPE_DOC, reverse, &frt_sort_field_doc_compare, &frt_sort_field_doc_get_val, NULL);
|
167
|
+
}
|
184
168
|
|
185
|
-
|
186
|
-
|
187
|
-
(ID)NULL, /* field */
|
188
|
-
FRT_SORT_TYPE_DOC, /* type */
|
189
|
-
true, /* reverse */
|
190
|
-
&sf_doc_compare, /* compare */
|
191
|
-
&sf_doc_get_val, /* get_val */
|
192
|
-
};
|
169
|
+
FrtSortField *FRT_SORT_FIELD_DOC;
|
170
|
+
FrtSortField *FRT_SORT_FIELD_DOC_REV;
|
193
171
|
|
194
172
|
/***************************************************************************
|
195
173
|
* ByteSortField
|
196
174
|
***************************************************************************/
|
197
175
|
|
198
|
-
static void sf_byte_get_val(void *index, FrtHit *hit, FrtComparable *comparable)
|
199
|
-
{
|
176
|
+
static void sf_byte_get_val(void *index, FrtHit *hit, FrtComparable *comparable) {
|
200
177
|
comparable->val.l = ((long *)index)[hit->doc];
|
201
178
|
}
|
202
179
|
|
203
|
-
static int sf_byte_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
204
|
-
{
|
180
|
+
static int sf_byte_compare(void *index, FrtHit *hit1, FrtHit *hit2) {
|
205
181
|
long val1 = ((long *)index)[hit1->doc];
|
206
182
|
long val2 = ((long *)index)[hit2->doc];
|
207
183
|
if (val1 > val2) return 1;
|
@@ -209,24 +185,23 @@ static int sf_byte_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
|
209
185
|
else return 0;
|
210
186
|
}
|
211
187
|
|
212
|
-
FrtSortField *
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
188
|
+
FrtSortField *frt_sort_field_byte_init(FrtSortField *self, ID field, bool reverse) {
|
189
|
+
return sort_field_init(self, field, FRT_SORT_TYPE_BYTE, reverse, &sf_byte_compare, &sf_byte_get_val, &FRT_BYTE_FIELD_INDEX_CLASS);
|
190
|
+
}
|
191
|
+
|
192
|
+
FrtSortField *frt_sort_field_byte_new(ID field, bool reverse) {
|
193
|
+
return sort_field_new(field, FRT_SORT_TYPE_BYTE, reverse, &sf_byte_compare, &sf_byte_get_val, &FRT_BYTE_FIELD_INDEX_CLASS);
|
217
194
|
}
|
218
195
|
|
219
196
|
/***************************************************************************
|
220
197
|
* IntegerSortField
|
221
198
|
***************************************************************************/
|
222
199
|
|
223
|
-
static void sf_int_get_val(void *index, FrtHit *hit, FrtComparable *comparable)
|
224
|
-
{
|
200
|
+
static void sf_int_get_val(void *index, FrtHit *hit, FrtComparable *comparable) {
|
225
201
|
comparable->val.l = ((long *)index)[hit->doc];
|
226
202
|
}
|
227
203
|
|
228
|
-
static int sf_int_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
229
|
-
{
|
204
|
+
static int sf_int_compare(void *index, FrtHit *hit1, FrtHit *hit2) {
|
230
205
|
long val1 = ((long *)index)[hit1->doc];
|
231
206
|
long val2 = ((long *)index)[hit2->doc];
|
232
207
|
if (val1 > val2) return 1;
|
@@ -234,24 +209,23 @@ static int sf_int_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
|
234
209
|
else return 0;
|
235
210
|
}
|
236
211
|
|
237
|
-
FrtSortField *
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
212
|
+
FrtSortField *frt_sort_field_int_init(FrtSortField *self, ID field, bool reverse) {
|
213
|
+
return sort_field_init(self, field, FRT_SORT_TYPE_INTEGER, reverse, &sf_int_compare, &sf_int_get_val, &FRT_INTEGER_FIELD_INDEX_CLASS);
|
214
|
+
}
|
215
|
+
|
216
|
+
FrtSortField *frt_sort_field_int_new(ID field, bool reverse) {
|
217
|
+
return sort_field_new(field, FRT_SORT_TYPE_INTEGER, reverse, &sf_int_compare, &sf_int_get_val, &FRT_INTEGER_FIELD_INDEX_CLASS);
|
242
218
|
}
|
243
219
|
|
244
220
|
/***************************************************************************
|
245
221
|
* FloatSortField
|
246
222
|
***************************************************************************/
|
247
223
|
|
248
|
-
static void sf_float_get_val(void *index, FrtHit *hit, FrtComparable *comparable)
|
249
|
-
{
|
224
|
+
static void sf_float_get_val(void *index, FrtHit *hit, FrtComparable *comparable) {
|
250
225
|
comparable->val.f = ((float *)index)[hit->doc];
|
251
226
|
}
|
252
227
|
|
253
|
-
static int sf_float_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
254
|
-
{
|
228
|
+
static int sf_float_compare(void *index, FrtHit *hit1, FrtHit *hit2) {
|
255
229
|
float val1 = ((float *)index)[hit1->doc];
|
256
230
|
float val2 = ((float *)index)[hit2->doc];
|
257
231
|
if (val1 > val2) return 1;
|
@@ -259,26 +233,25 @@ static int sf_float_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
|
259
233
|
else return 0;
|
260
234
|
}
|
261
235
|
|
262
|
-
FrtSortField *
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
236
|
+
FrtSortField *frt_sort_field_float_init(FrtSortField *self, ID field, bool reverse) {
|
237
|
+
return sort_field_init(self, field, FRT_SORT_TYPE_FLOAT, reverse, &sf_float_compare, &sf_float_get_val, &FRT_FLOAT_FIELD_INDEX_CLASS);
|
238
|
+
}
|
239
|
+
|
240
|
+
FrtSortField *frt_sort_field_float_new(ID field, bool reverse) {
|
241
|
+
return sort_field_new(field, FRT_SORT_TYPE_FLOAT, reverse, &sf_float_compare, &sf_float_get_val, &FRT_FLOAT_FIELD_INDEX_CLASS);
|
267
242
|
}
|
268
243
|
|
269
244
|
/***************************************************************************
|
270
245
|
* StringSortField
|
271
246
|
***************************************************************************/
|
272
247
|
|
273
|
-
static void sf_string_get_val(void *index, FrtHit *hit, FrtComparable *comparable)
|
274
|
-
{
|
248
|
+
static void sf_string_get_val(void *index, FrtHit *hit, FrtComparable *comparable) {
|
275
249
|
comparable->val.s
|
276
250
|
= ((FrtStringIndex *)index)->values[
|
277
251
|
((FrtStringIndex *)index)->index[hit->doc]];
|
278
252
|
}
|
279
253
|
|
280
|
-
static int sf_string_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
281
|
-
{
|
254
|
+
static int sf_string_compare(void *index, FrtHit *hit1, FrtHit *hit2) {
|
282
255
|
char *s1 = ((FrtStringIndex *)index)->values[
|
283
256
|
((FrtStringIndex *)index)->index[hit1->doc]];
|
284
257
|
char *s2 = ((FrtStringIndex *)index)->values[
|
@@ -304,20 +277,24 @@ static int sf_string_compare(void *index, FrtHit *hit1, FrtHit *hit2)
|
|
304
277
|
*/
|
305
278
|
}
|
306
279
|
|
307
|
-
FrtSortField *
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
280
|
+
FrtSortField *frt_sort_field_string_init(FrtSortField *self, ID field, bool reverse) {
|
281
|
+
return sort_field_init(self, field, FRT_SORT_TYPE_STRING, reverse, &sf_string_compare, &sf_string_get_val, &FRT_STRING_FIELD_INDEX_CLASS);
|
282
|
+
}
|
283
|
+
|
284
|
+
FrtSortField *frt_sort_field_string_new(ID field, bool reverse) {
|
285
|
+
return sort_field_new(field, FRT_SORT_TYPE_STRING, reverse, &sf_string_compare, &sf_string_get_val, &FRT_STRING_FIELD_INDEX_CLASS);
|
312
286
|
}
|
313
287
|
|
314
288
|
/***************************************************************************
|
315
289
|
* AutoSortField
|
316
290
|
***************************************************************************/
|
317
291
|
|
318
|
-
FrtSortField *
|
319
|
-
|
320
|
-
|
292
|
+
FrtSortField *frt_sort_field_auto_init(FrtSortField *self, ID field, bool reverse) {
|
293
|
+
return sort_field_init(self, field, FRT_SORT_TYPE_AUTO, reverse, NULL, NULL, NULL);
|
294
|
+
}
|
295
|
+
|
296
|
+
FrtSortField *frt_sort_field_auto_new(ID field, bool reverse) {
|
297
|
+
return sort_field_new(field, FRT_SORT_TYPE_AUTO, reverse, NULL, NULL, NULL);
|
321
298
|
}
|
322
299
|
|
323
300
|
/***************************************************************************
|
@@ -336,9 +313,7 @@ typedef struct Comparator {
|
|
336
313
|
int (*compare)(void *index_ptr, FrtHit *hit1, FrtHit *hit2);
|
337
314
|
} Comparator;
|
338
315
|
|
339
|
-
static Comparator *comparator_new(void *index, bool reverse,
|
340
|
-
int (*compare)(void *index_ptr, FrtHit *hit1, FrtHit *hit2))
|
341
|
-
{
|
316
|
+
static Comparator *comparator_new(void *index, bool reverse, int (*compare)(void *index_ptr, FrtHit *hit1, FrtHit *hit2)) {
|
342
317
|
Comparator *self = FRT_ALLOC(Comparator);
|
343
318
|
self->index = index;
|
344
319
|
self->reverse = reverse;
|
@@ -362,8 +337,7 @@ typedef struct Sorter {
|
|
362
337
|
sf->compare = sf_ ## lower_type ## _compare;\
|
363
338
|
sf->get_val = sf_ ## lower_type ## _get_val
|
364
339
|
|
365
|
-
static void sort_field_auto_evaluate(FrtSortField *sf, char *text)
|
366
|
-
{
|
340
|
+
static void sort_field_auto_evaluate(FrtSortField *sf, char *text) {
|
367
341
|
int int_val;
|
368
342
|
float float_val;
|
369
343
|
int text_len = 0, scan_len = 0;
|
@@ -382,8 +356,7 @@ static void sort_field_auto_evaluate(FrtSortField *sf, char *text)
|
|
382
356
|
}
|
383
357
|
}
|
384
358
|
|
385
|
-
static Comparator *sorter_get_comparator(FrtSortField *sf, FrtIndexReader *ir)
|
386
|
-
{
|
359
|
+
static Comparator *sorter_get_comparator(FrtSortField *sf, FrtIndexReader *ir) {
|
387
360
|
void *index = NULL;
|
388
361
|
if (sf->type > FRT_SORT_TYPE_DOC) {
|
389
362
|
FrtFieldIndex *field_index = NULL;
|
@@ -407,8 +380,7 @@ static Comparator *sorter_get_comparator(FrtSortField *sf, FrtIndexReader *ir)
|
|
407
380
|
return comparator_new(index, sf->reverse, sf->compare);
|
408
381
|
}
|
409
382
|
|
410
|
-
static void sorter_destroy(Sorter *self)
|
411
|
-
{
|
383
|
+
static void sorter_destroy(Sorter *self) {
|
412
384
|
int i;
|
413
385
|
|
414
386
|
for (i = 0; i < self->c_cnt; i++) {
|
@@ -418,8 +390,7 @@ static void sorter_destroy(Sorter *self)
|
|
418
390
|
free(self);
|
419
391
|
}
|
420
392
|
|
421
|
-
static Sorter *sorter_new(FrtSort *sort)
|
422
|
-
{
|
393
|
+
static Sorter *sorter_new(FrtSort *sort) {
|
423
394
|
Sorter *self = FRT_ALLOC(Sorter);
|
424
395
|
self->c_cnt = sort->size;
|
425
396
|
self->comparators = FRT_ALLOC_AND_ZERO_N(Comparator *, self->c_cnt);
|
@@ -431,8 +402,7 @@ static Sorter *sorter_new(FrtSort *sort)
|
|
431
402
|
* FieldSortedHitQueue
|
432
403
|
***************************************************************************/
|
433
404
|
|
434
|
-
static bool fshq_less_than(const void *hit1, const void *hit2)
|
435
|
-
{
|
405
|
+
static bool fshq_less_than(const void *hit1, const void *hit2) {
|
436
406
|
int cmp = 0;
|
437
407
|
printf("Whoops, shouldn't call this.\n");
|
438
408
|
if (cmp != 0) {
|
@@ -442,8 +412,7 @@ static bool fshq_less_than(const void *hit1, const void *hit2)
|
|
442
412
|
}
|
443
413
|
}
|
444
414
|
|
445
|
-
static bool fshq_lt(Sorter *sorter, FrtHit *hit1, FrtHit *hit2)
|
446
|
-
{
|
415
|
+
static bool fshq_lt(Sorter *sorter, FrtHit *hit1, FrtHit *hit2) {
|
447
416
|
Comparator *comp;
|
448
417
|
int diff = 0, i;
|
449
418
|
for (i = 0; i < sorter->c_cnt && diff == 0; i++) {
|
@@ -462,8 +431,7 @@ static bool fshq_lt(Sorter *sorter, FrtHit *hit1, FrtHit *hit2)
|
|
462
431
|
}
|
463
432
|
}
|
464
433
|
|
465
|
-
void fshq_pq_down(FrtPriorityQueue *pq)
|
466
|
-
{
|
434
|
+
void fshq_pq_down(FrtPriorityQueue *pq) {
|
467
435
|
register int i = 1;
|
468
436
|
register int j = 2; /* i << 1; */
|
469
437
|
register int k = 3; /* j + 1; */
|
@@ -487,8 +455,7 @@ void fshq_pq_down(FrtPriorityQueue *pq)
|
|
487
455
|
heap[i] = node;
|
488
456
|
}
|
489
457
|
|
490
|
-
FrtHit *frt_fshq_pq_pop(FrtPriorityQueue *pq)
|
491
|
-
{
|
458
|
+
FrtHit *frt_fshq_pq_pop(FrtPriorityQueue *pq) {
|
492
459
|
if (pq->size > 0) {
|
493
460
|
FrtHit *hit = (FrtHit *)pq->heap[1]; /* save first value */
|
494
461
|
pq->heap[1] = pq->heap[pq->size]; /* move last to first */
|
@@ -501,8 +468,7 @@ FrtHit *frt_fshq_pq_pop(FrtPriorityQueue *pq)
|
|
501
468
|
}
|
502
469
|
}
|
503
470
|
|
504
|
-
static void fshq_pq_up(FrtPriorityQueue *pq)
|
505
|
-
{
|
471
|
+
static void fshq_pq_up(FrtPriorityQueue *pq) {
|
506
472
|
FrtHit **heap = (FrtHit **)pq->heap;
|
507
473
|
FrtHit *node;
|
508
474
|
int i = pq->size;
|
@@ -518,8 +484,7 @@ static void fshq_pq_up(FrtPriorityQueue *pq)
|
|
518
484
|
heap[i] = node;
|
519
485
|
}
|
520
486
|
|
521
|
-
void frt_fshq_pq_insert(FrtPriorityQueue *pq, FrtHit *hit)
|
522
|
-
{
|
487
|
+
void frt_fshq_pq_insert(FrtPriorityQueue *pq, FrtHit *hit) {
|
523
488
|
if (pq->size < pq->capa) {
|
524
489
|
FrtHit *new_hit = FRT_ALLOC(FrtHit);
|
525
490
|
memcpy(new_hit, hit, sizeof(FrtHit));
|
@@ -537,14 +502,13 @@ void frt_fshq_pq_insert(FrtPriorityQueue *pq, FrtHit *hit)
|
|
537
502
|
}
|
538
503
|
}
|
539
504
|
|
540
|
-
void frt_fshq_pq_destroy(FrtPriorityQueue *self)
|
541
|
-
{
|
505
|
+
void frt_fshq_pq_destroy(FrtPriorityQueue *self) {
|
542
506
|
sorter_destroy((Sorter *)self->heap[0]);
|
507
|
+
frt_pq_clear(self);
|
543
508
|
frt_pq_destroy(self);
|
544
509
|
}
|
545
510
|
|
546
|
-
FrtPriorityQueue *frt_fshq_pq_new(int size, FrtSort *sort, FrtIndexReader *ir)
|
547
|
-
{
|
511
|
+
FrtPriorityQueue *frt_fshq_pq_new(int size, FrtSort *sort, FrtIndexReader *ir) {
|
548
512
|
FrtPriorityQueue *self = frt_pq_new(size, &fshq_less_than, &free);
|
549
513
|
int i;
|
550
514
|
Sorter *sorter = sorter_new(sort);
|
@@ -559,12 +523,10 @@ FrtPriorityQueue *frt_fshq_pq_new(int size, FrtSort *sort, FrtIndexReader *ir)
|
|
559
523
|
return self;
|
560
524
|
}
|
561
525
|
|
562
|
-
FrtHit *frt_fshq_pq_pop_fd(FrtPriorityQueue *pq)
|
563
|
-
{
|
526
|
+
FrtHit *frt_fshq_pq_pop_fd(FrtPriorityQueue *pq) {
|
564
527
|
if (pq->size <= 0) {
|
565
528
|
return NULL;
|
566
|
-
}
|
567
|
-
else {
|
529
|
+
} else {
|
568
530
|
int j;
|
569
531
|
Sorter *sorter = (Sorter *)pq->heap[0];
|
570
532
|
const int cmp_cnt = sorter->c_cnt;
|
@@ -599,8 +561,7 @@ FrtHit *frt_fshq_pq_pop_fd(FrtPriorityQueue *pq)
|
|
599
561
|
* FieldDocSortedHitQueue
|
600
562
|
***************************************************************************/
|
601
563
|
|
602
|
-
bool frt_fdshq_lt(FrtFieldDoc *fd1, FrtFieldDoc *fd2)
|
603
|
-
{
|
564
|
+
bool frt_fdshq_lt(FrtFieldDoc *fd1, FrtFieldDoc *fd2) {
|
604
565
|
int i;
|
605
566
|
bool c = false;
|
606
567
|
bool all_equal = false;
|
@@ -725,8 +686,7 @@ bool frt_fdshq_lt(FrtFieldDoc *fd1, FrtFieldDoc *fd2)
|
|
725
686
|
|
726
687
|
#define SORT_INIT_SIZE 4
|
727
688
|
|
728
|
-
FrtSort *frt_sort_new()
|
729
|
-
{
|
689
|
+
FrtSort *frt_sort_new(void) {
|
730
690
|
FrtSort *self = FRT_ALLOC(FrtSort);
|
731
691
|
self->size = 0;
|
732
692
|
self->capa = SORT_INIT_SIZE;
|
@@ -737,8 +697,7 @@ FrtSort *frt_sort_new()
|
|
737
697
|
return self;
|
738
698
|
}
|
739
699
|
|
740
|
-
void frt_sort_clear(FrtSort *self)
|
741
|
-
{
|
700
|
+
void frt_sort_clear(FrtSort *self) {
|
742
701
|
int i;
|
743
702
|
if (self->destroy_all) {
|
744
703
|
for (i = 0; i < self->size; i++) {
|
@@ -748,16 +707,14 @@ void frt_sort_clear(FrtSort *self)
|
|
748
707
|
self->size = 0;
|
749
708
|
}
|
750
709
|
|
751
|
-
void frt_sort_destroy(void *p)
|
752
|
-
{
|
710
|
+
void frt_sort_destroy(void *p) {
|
753
711
|
FrtSort *self = (FrtSort *)p;
|
754
712
|
frt_sort_clear(self);
|
755
713
|
free(self->sort_fields);
|
756
714
|
free(self);
|
757
715
|
}
|
758
716
|
|
759
|
-
void frt_sort_add_sort_field(FrtSort *self, FrtSortField *sf)
|
760
|
-
{
|
717
|
+
void frt_sort_add_sort_field(FrtSort *self, FrtSortField *sf) {
|
761
718
|
if (self->size == self->capa) {
|
762
719
|
self->capa <<= 1;
|
763
720
|
FRT_REALLOC_N(self->sort_fields, FrtSortField *, self->capa);
|
@@ -767,8 +724,7 @@ void frt_sort_add_sort_field(FrtSort *self, FrtSortField *sf)
|
|
767
724
|
self->size++;
|
768
725
|
}
|
769
726
|
|
770
|
-
char *frt_sort_to_s(FrtSort *self)
|
771
|
-
{
|
727
|
+
char *frt_sort_to_s(FrtSort *self) {
|
772
728
|
int i, len = 20;
|
773
729
|
char *s;
|
774
730
|
char *str;
|
@@ -59,16 +59,24 @@ static void frt_close_lock_i(FrtLock *lock)
|
|
59
59
|
/**
|
60
60
|
* Create a store struct initializing the mutex.
|
61
61
|
*/
|
62
|
-
FrtStore *
|
63
|
-
|
64
|
-
|
62
|
+
FrtStore *frt_store_alloc(void) {
|
63
|
+
return FRT_ALLOC(FrtStore);
|
64
|
+
}
|
65
|
+
|
66
|
+
FrtStore *frt_store_init(FrtStore *store) {
|
65
67
|
store->ref_cnt = 1;
|
66
68
|
frt_mutex_init(&store->mutex_i, NULL);
|
67
69
|
frt_mutex_init(&store->mutex, NULL);
|
68
70
|
store->locks = frt_hs_new_ptr((frt_free_ft)&frt_close_lock_i);
|
71
|
+
store->rstore = Qnil;
|
69
72
|
return store;
|
70
73
|
}
|
71
74
|
|
75
|
+
FrtStore *frt_store_new(void) {
|
76
|
+
FrtStore *store = frt_store_alloc();
|
77
|
+
return frt_store_init(store);
|
78
|
+
}
|
79
|
+
|
72
80
|
/**
|
73
81
|
* Destroy the store freeing allocated resources
|
74
82
|
*
|
@@ -87,8 +95,7 @@ void frt_store_destroy(FrtStore *store)
|
|
87
95
|
*
|
88
96
|
* @return a newly allocated and initialized OutStream object
|
89
97
|
*/
|
90
|
-
FrtOutStream *frt_os_new()
|
91
|
-
{
|
98
|
+
FrtOutStream *frt_os_new(void) {
|
92
99
|
FrtOutStream *os = FRT_ALLOC(FrtOutStream);
|
93
100
|
os->buf.start = 0;
|
94
101
|
os->buf.pos = 0;
|
@@ -180,8 +187,7 @@ void frt_os_write_bytes(FrtOutStream *os, const frt_uchar *buf, int len)
|
|
180
187
|
*
|
181
188
|
* @return a newly allocated and initialized InStream
|
182
189
|
*/
|
183
|
-
FrtInStream *frt_is_new()
|
184
|
-
{
|
190
|
+
FrtInStream *frt_is_new(void) {
|
185
191
|
FrtInStream *is = FRT_ALLOC(FrtInStream);
|
186
192
|
is->buf.start = 0;
|
187
193
|
is->buf.pos = 0;
|