ferret 0.10.6 → 0.10.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/ext/analysis.c +136 -107
  2. data/ext/analysis.h +4 -0
  3. data/ext/bitvector.c +2 -2
  4. data/ext/bitvector.h +1 -1
  5. data/ext/compound_io.c +4 -4
  6. data/ext/defines.h +0 -2
  7. data/ext/filter.c +3 -3
  8. data/ext/fs_store.c +4 -4
  9. data/ext/hash.c +29 -18
  10. data/ext/hash.h +34 -16
  11. data/ext/hashset.c +6 -3
  12. data/ext/hashset.h +1 -1
  13. data/ext/index.c +22 -20
  14. data/ext/q_boolean.c +3 -3
  15. data/ext/q_const_score.c +1 -1
  16. data/ext/q_fuzzy.c +1 -1
  17. data/ext/q_match_all.c +1 -1
  18. data/ext/q_multi_term.c +2 -2
  19. data/ext/q_parser.c +21 -6
  20. data/ext/q_phrase.c +2 -2
  21. data/ext/q_prefix.c +1 -1
  22. data/ext/q_range.c +3 -3
  23. data/ext/q_span.c +8 -8
  24. data/ext/q_term.c +1 -1
  25. data/ext/q_wildcard.c +1 -1
  26. data/ext/r_analysis.c +10 -4
  27. data/ext/r_index.c +89 -12
  28. data/ext/r_qparser.c +67 -4
  29. data/ext/r_search.c +11 -1
  30. data/ext/r_store.c +51 -35
  31. data/ext/ram_store.c +18 -18
  32. data/ext/search.c +1 -1
  33. data/ext/search.h +25 -23
  34. data/ext/similarity.c +1 -1
  35. data/ext/sort.c +1 -1
  36. data/ext/store.c +22 -3
  37. data/ext/store.h +8 -2
  38. data/lib/ferret/index.rb +14 -4
  39. data/lib/ferret_version.rb +1 -1
  40. data/test/test_helper.rb +3 -0
  41. data/test/unit/analysis/tc_analyzer.rb +5 -5
  42. data/test/unit/analysis/tc_token_stream.rb +3 -3
  43. data/test/unit/index/tc_index_writer.rb +1 -1
  44. data/test/unit/query_parser/tc_query_parser.rb +7 -5
  45. data/test/unit/search/tc_filter.rb +1 -1
  46. data/test/unit/search/tc_fuzzy_query.rb +1 -1
  47. data/test/unit/search/tc_index_searcher.rb +1 -1
  48. data/test/unit/search/tc_multi_searcher.rb +1 -1
  49. data/test/unit/search/tc_search_and_sort.rb +1 -1
  50. data/test/unit/search/tc_spans.rb +1 -1
  51. metadata +4 -3
data/ext/analysis.c CHANGED
@@ -230,6 +230,43 @@ Analyzer *analyzer_new(TokenStream *ts,
230
230
  return a;
231
231
  }
232
232
 
233
+ /****************************************************************************
234
+ *
235
+ * Non
236
+ *
237
+ ****************************************************************************/
238
+
239
+ /*
240
+ * NonTokenizer
241
+ */
242
+ static Token *nt_next(TokenStream *ts)
243
+ {
244
+ if (ts->t) {
245
+ size_t len = strlen(ts->t);
246
+ ts->t = NULL;
247
+
248
+ return tk_set(&(CTS(ts)->token), ts->text, len, 0, len, 1);
249
+ }
250
+ else {
251
+ return NULL;
252
+ }
253
+ }
254
+
255
+ TokenStream *non_tokenizer_new()
256
+ {
257
+ TokenStream *ts = cts_new();
258
+ ts->next = &nt_next;
259
+ return ts;
260
+ }
261
+
262
+ /*
263
+ * NonAnalyzer
264
+ */
265
+ Analyzer *non_analyzer_new()
266
+ {
267
+ return analyzer_new(non_tokenizer_new(), NULL, NULL);
268
+ }
269
+
233
270
  /****************************************************************************
234
271
  *
235
272
  * Whitespace
@@ -520,7 +557,7 @@ static int std_get_alpha(TokenStream *ts, char *token)
520
557
  {
521
558
  int i = 0;
522
559
  char *t = ts->t;
523
- while (t[i] != '\0' && isalpha(t[i])) {
560
+ while (t[i] != '\0' && isalnum(t[i])) {
524
561
  if (i < MAX_WORD_SIZE) {
525
562
  token[i] = t[i];
526
563
  }
@@ -538,7 +575,7 @@ static int mb_std_get_alpha(TokenStream *ts, char *token)
538
575
 
539
576
  i = mb_next_char(&wchr, t, &state);
540
577
 
541
- while (wchr != 0 && iswalpha(wchr)) {
578
+ while (wchr != 0 && iswalnum(wchr)) {
542
579
  t += i;
543
580
  i = mb_next_char(&wchr, t, &state);
544
581
  }
@@ -820,133 +857,125 @@ static Token *std_next(TokenStream *ts)
820
857
  }
821
858
 
822
859
  start = t = ts->t;
823
- if ((isdigit(*t) || isnumpunc(*t))
824
- && ((len = std_get_number(t)) > 0)) {
825
- t += len;
860
+ token_i = std_tz->get_alpha(ts, token);
861
+ t += token_i;
862
+
863
+ if (!std_tz->is_tok_char(t)) {
864
+ /* very common case, ie a plain word, so check and return */
826
865
  ts->t = t;
827
- tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
866
+ return tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
828
867
  }
829
- else {
830
- token_i = std_tz->get_alpha(ts, token);
831
- t += token_i;
832
868
 
833
- if (!std_tz->is_tok_char(t)) {
834
- /* very common case, ie a plain word, so check and return */
835
- ts->t = t;
836
- return tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
869
+ if (*t == '\'') { /* apostrophe case. */
870
+ t += std_tz->get_apostrophe(t);
871
+ ts->t = t;
872
+ len = (int)(t - start);
873
+ /* strip possesive */
874
+ if ((t[-1] == 's' || t[-1] == 'S') && t[-2] == '\'') {
875
+ t -= 2;
876
+ tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
877
+ CTS(ts)->token.end += 2;
878
+ }
879
+ else {
880
+ tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
837
881
  }
838
882
 
839
- if (*t == '\'') { /* apostrophe case. */
840
- t += std_tz->get_apostrophe(t);
841
- ts->t = t;
842
- len = (int)(t - start);
843
- /* strip possesive */
844
- if ((t[-1] == 's' || t[-1] == 'S') && t[-2] == '\'') {
845
- t -= 2;
846
- tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
847
- CTS(ts)->token.end += 2;
848
- }
849
- else {
850
- tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
851
- }
883
+ return &(CTS(ts)->token);
884
+ }
852
885
 
853
- return &(CTS(ts)->token);
854
- }
886
+ if (*t == '&') { /* apostrophe case. */
887
+ t += std_get_company_name(t);
888
+ ts->t = t;
889
+ return tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
890
+ }
855
891
 
856
- if (*t == '&') { /* apostrophe case. */
857
- t += std_get_company_name(t);
858
- ts->t = t;
859
- return tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
892
+ if ((isdigit(*t) || isnumpunc(*t)) /* possibly a number */
893
+ && (len = std_get_number(t) > 0)) {
894
+ num_end = start + len;
895
+ if (!std_tz->is_tok_char(num_end)) { /* won't find a longer token */
896
+ ts->t = num_end;
897
+ return tk_set_ts(&(CTS(ts)->token), start, num_end, ts->text, 1);
860
898
  }
899
+ /* else there may be a longer token so check */
900
+ }
861
901
 
862
- if ((isdigit(*t) || isnumpunc(*t)) /* possibly a number */
863
- && (len = std_get_number(t) > 0)) {
864
- num_end = start + len;
865
- if (!std_tz->is_tok_char(num_end)) { /* won't find a longer token */
866
- ts->t = num_end;
867
- return tk_set_ts(&(CTS(ts)->token), start, num_end, ts->text, 1);
868
- }
869
- /* else there may be a longer token so check */
902
+ if (t[0] == ':' && t[1] == '/' && t[2] == '/') {
903
+ /* check for a known url start */
904
+ token[token_i] = '\0';
905
+ t += 3;
906
+ while (*t == '/') {
907
+ t++;
870
908
  }
871
-
872
- if (t[0] == ':' && t[1] == '/' && t[2] == '/') {
873
- /* check for a known url start */
874
- token[token_i] = '\0';
875
- t += 3;
876
- while (*t == '/') {
877
- t++;
878
- }
879
- if (isalpha(*t) &&
880
- (memcmp(token, "ftp", 3) == 0 ||
881
- memcmp(token, "http", 4) == 0 ||
882
- memcmp(token, "https", 5) == 0 ||
883
- memcmp(token, "file", 4) == 0)) {
884
- len = std_get_url(t, token, 0); /* dispose of first part of the URL */
885
- }
886
- else { /* still treat as url but keep the first part */
887
- token_i = (int)(t - start);
888
- memcpy(token, start, token_i * sizeof(char));
889
- len = token_i + std_get_url(t, token, token_i); /* keep start */
890
- }
891
- ts->t = t + len;
892
- token[len] = 0;
893
- return tk_set(&(CTS(ts)->token), token, len, (int)(start - ts->text),
894
- (int)(ts->t - ts->text), 1);
909
+ if (isalpha(*t) &&
910
+ (memcmp(token, "ftp", 3) == 0 ||
911
+ memcmp(token, "http", 4) == 0 ||
912
+ memcmp(token, "https", 5) == 0 ||
913
+ memcmp(token, "file", 4) == 0)) {
914
+ len = std_get_url(t, token, 0); /* dispose of first part of the URL */
895
915
  }
896
-
897
- /* now see how long a url we can find. */
898
- is_acronym = true;
899
- seen_at_symbol = false;
900
- while (isurlxatc(*t)) {
901
- if (is_acronym && !isalpha(*t) && (*t != '.')) {
902
- is_acronym = false;
903
- }
904
- if (isurlxatpunc(*t) && isurlxatpunc(t[-1])) {
905
- break; /* can't have two punctuation characters in a row */
916
+ else { /* still treat as url but keep the first part */
917
+ token_i = (int)(t - start);
918
+ memcpy(token, start, token_i * sizeof(char));
919
+ len = token_i + std_get_url(t, token, token_i); /* keep start */
920
+ }
921
+ ts->t = t + len;
922
+ token[len] = 0;
923
+ return tk_set(&(CTS(ts)->token), token, len, (int)(start - ts->text),
924
+ (int)(ts->t - ts->text), 1);
925
+ }
926
+
927
+ /* now see how long a url we can find. */
928
+ is_acronym = true;
929
+ seen_at_symbol = false;
930
+ while (isurlxatc(*t)) {
931
+ if (is_acronym && !isalpha(*t) && (*t != '.')) {
932
+ is_acronym = false;
933
+ }
934
+ if (isurlxatpunc(*t) && isurlxatpunc(t[-1])) {
935
+ break; /* can't have two punctuation characters in a row */
936
+ }
937
+ if (*t == '@') {
938
+ if (seen_at_symbol) {
939
+ break; /* we can only have one @ symbol */
906
940
  }
907
- if (*t == '@') {
908
- if (seen_at_symbol) {
909
- break; /* we can only have one @ symbol */
910
- }
911
- else {
912
- seen_at_symbol = true;
913
- }
941
+ else {
942
+ seen_at_symbol = true;
914
943
  }
915
- t++;
916
- }
917
- while (isurlxatpunc(t[-1])) {
918
- t--; /* strip trailing punctuation */
919
944
  }
945
+ t++;
946
+ }
947
+ while (isurlxatpunc(t[-1])) {
948
+ t--; /* strip trailing punctuation */
949
+ }
920
950
 
921
- if (num_end == NULL || t > num_end) {
922
- ts->t = t;
951
+ if (num_end == NULL || t > num_end) {
952
+ ts->t = t;
923
953
 
924
- if (is_acronym) { /* check it is one letter followed by one '.' */
925
- for (s = start; s < t - 1; s++) {
926
- if (isalpha(*s) && (s[1] != '.'))
927
- is_acronym = false;
928
- }
954
+ if (is_acronym) { /* check it is one letter followed by one '.' */
955
+ for (s = start; s < t - 1; s++) {
956
+ if (isalpha(*s) && (s[1] != '.'))
957
+ is_acronym = false;
929
958
  }
930
- if (is_acronym) { /* strip '.'s */
931
- for (s = start + token_i; s < t; s++) {
932
- if (*s != '.') {
933
- token[token_i] = *s;
934
- token_i++;
935
- }
959
+ }
960
+ if (is_acronym) { /* strip '.'s */
961
+ for (s = start + token_i; s < t; s++) {
962
+ if (*s != '.') {
963
+ token[token_i] = *s;
964
+ token_i++;
936
965
  }
937
- tk_set(&(CTS(ts)->token), token, token_i,
938
- (int)(start - ts->text),
939
- (int)(t - ts->text), 1);
940
- }
941
- else { /* just return the url as is */
942
- tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
943
966
  }
967
+ tk_set(&(CTS(ts)->token), token, token_i,
968
+ (int)(start - ts->text),
969
+ (int)(t - ts->text), 1);
944
970
  }
945
- else { /* return the number */
946
- ts->t = num_end;
947
- tk_set_ts(&(CTS(ts)->token), start, num_end, ts->text, 1);
971
+ else { /* just return the url as is */
972
+ tk_set_ts(&(CTS(ts)->token), start, t, ts->text, 1);
948
973
  }
949
974
  }
975
+ else { /* return the number */
976
+ ts->t = num_end;
977
+ tk_set_ts(&(CTS(ts)->token), start, num_end, ts->text, 1);
978
+ }
950
979
 
951
980
  return &(CTS(ts)->token);
952
981
  }
data/ext/analysis.h CHANGED
@@ -112,6 +112,8 @@ typedef struct StemFilter
112
112
 
113
113
  extern void ts_deref(TokenStream *ts);
114
114
 
115
+ extern TokenStream *non_tokenizer_new();
116
+
115
117
  extern TokenStream *whitespace_tokenizer_new();
116
118
  extern TokenStream *mb_whitespace_tokenizer_new(bool lowercase);
117
119
 
@@ -172,6 +174,8 @@ extern Analyzer *analyzer_new(TokenStream *ts,
172
174
  char *field,
173
175
  char *text));
174
176
  extern void a_standard_destroy(Analyzer *a);
177
+ extern Analyzer *non_analyzer_new();
178
+
175
179
  extern Analyzer *whitespace_analyzer_new(bool lowercase);
176
180
  extern Analyzer *mb_whitespace_analyzer_new(bool lowercase);
177
181
 
data/ext/bitvector.c CHANGED
@@ -345,9 +345,9 @@ int bv_eq(BitVector *bv1, BitVector *bv2)
345
345
  return true;
346
346
  }
347
347
 
348
- ulong bv_hash(BitVector *bv)
348
+ unsigned long bv_hash(BitVector *bv)
349
349
  {
350
- ulong hash = 0;
350
+ unsigned long hash = 0;
351
351
  const f_u32 empty_word = bv->extends_as_ones ? 0xFFFFFFFF : 0;
352
352
  int i;
353
353
  for (i = (bv->size >> 5); i >= 0; i--) {
data/ext/bitvector.h CHANGED
@@ -193,7 +193,7 @@ extern int bv_eq(BitVector *bv1, BitVector *bv2);
193
193
  * @param bv the BitVector to hash
194
194
  * @return A hash value for the BitVector
195
195
  */
196
- extern ulong bv_hash(BitVector *bv);
196
+ extern unsigned long bv_hash(BitVector *bv);
197
197
 
198
198
  /**
199
199
  * ANDs two BitVectors (+bv1+ and +bv2+) together and return the resultant
data/ext/compound_io.c CHANGED
@@ -181,7 +181,7 @@ static OutStream *cmpd_new_output(Store *store, const char *file_name)
181
181
  return NULL;
182
182
  }
183
183
 
184
- static Lock *cmpd_open_lock(Store *store, char *lock_name)
184
+ static Lock *cmpd_open_lock_i(Store *store, char *lock_name)
185
185
  {
186
186
  (void)store;
187
187
  (void)lock_name;
@@ -189,7 +189,7 @@ static Lock *cmpd_open_lock(Store *store, char *lock_name)
189
189
  return NULL;
190
190
  }
191
191
 
192
- static void cmpd_close_lock(Lock *lock)
192
+ static void cmpd_close_lock_i(Lock *lock)
193
193
  {
194
194
  (void)lock;
195
195
  RAISE(UNSUPPORTED_ERROR, UNSUPPORTED_ERROR_MSG);
@@ -246,8 +246,8 @@ Store *open_cmpd_store(Store *store, const char *name)
246
246
  new_store->close_i = &cmpd_close_i;
247
247
  new_store->new_output = &cmpd_new_output;
248
248
  new_store->open_input = &cmpd_open_input;
249
- new_store->open_lock = &cmpd_open_lock;
250
- new_store->close_lock = &cmpd_close_lock;
249
+ new_store->open_lock_i = &cmpd_open_lock_i;
250
+ new_store->close_lock_i = &cmpd_close_lock_i;
251
251
 
252
252
  return new_store;
253
253
  }
data/ext/defines.h CHANGED
@@ -13,8 +13,6 @@
13
13
 
14
14
  typedef unsigned int bool;
15
15
  typedef unsigned char uchar;
16
- typedef unsigned int uint;
17
- typedef unsigned long int ulong;
18
16
 
19
17
  typedef posh_u16_t f_u16;
20
18
  typedef posh_i16_t f_i16;
data/ext/filter.c CHANGED
@@ -41,7 +41,7 @@ static char *filt_to_s_i(Filter *filt)
41
41
  return estrdup(filt->name);
42
42
  }
43
43
 
44
- ulong filt_hash_default(Filter *filt)
44
+ unsigned long filt_hash_default(Filter *filt)
45
45
  {
46
46
  (void)filt;
47
47
  return 0;
@@ -66,7 +66,7 @@ Filter *filt_create(size_t size, const char *name)
66
66
  return filt;
67
67
  }
68
68
 
69
- ulong filt_hash(Filter *filt)
69
+ unsigned long filt_hash(Filter *filt)
70
70
  {
71
71
  return str_hash(filt->name) ^ filt->hash(filt);
72
72
  }
@@ -118,7 +118,7 @@ static BitVector *qfilt_get_bv_i(Filter *filt, IndexReader *ir)
118
118
  return bv;
119
119
  }
120
120
 
121
- static ulong qfilt_hash(Filter *filt)
121
+ static unsigned long qfilt_hash(Filter *filt)
122
122
  {
123
123
  return q_hash(QF(filt)->query);
124
124
  }
data/ext/fs_store.c CHANGED
@@ -384,7 +384,7 @@ void fs_lock_release(Lock *lock)
384
384
  remove(lock->name);
385
385
  }
386
386
 
387
- static Lock *fs_open_lock(Store *store, char *lockname)
387
+ static Lock *fs_open_lock_i(Store *store, char *lockname)
388
388
  {
389
389
  Lock *lock = ALLOC(Lock);
390
390
  char lname[100];
@@ -398,7 +398,7 @@ static Lock *fs_open_lock(Store *store, char *lockname)
398
398
  return lock;
399
399
  }
400
400
 
401
- static void fs_close_lock(Lock *lock)
401
+ static void fs_close_lock_i(Lock *lock)
402
402
  {
403
403
  remove(lock->name);
404
404
  free(lock->name);
@@ -447,8 +447,8 @@ static Store *fs_store_new(const char *pathname)
447
447
  new_store->each = &fs_each;
448
448
  new_store->new_output = &fs_new_output;
449
449
  new_store->open_input = &fs_open_input;
450
- new_store->open_lock = &fs_open_lock;
451
- new_store->close_lock = &fs_close_lock;
450
+ new_store->open_lock_i = &fs_open_lock_i;
451
+ new_store->close_lock_i = &fs_close_lock_i;
452
452
  return new_store;
453
453
  }
454
454
 
data/ext/hash.c CHANGED
@@ -18,16 +18,16 @@ static char *dummy_key = "";
18
18
  static HashTable *free_hts[MAX_FREE_HASH_TABLES];
19
19
  static int num_free_hts = 0;
20
20
 
21
- ulong *imalloc(ulong value)
21
+ unsigned long *imalloc(unsigned long value)
22
22
  {
23
- ulong *p = ALLOC(ulong);
23
+ unsigned long *p = ALLOC(unsigned long);
24
24
  *p = value;
25
25
  return p;
26
26
  }
27
27
 
28
- ulong str_hash(const char *const str)
28
+ unsigned long str_hash(const char *const str)
29
29
  {
30
- register ulong h = 0;
30
+ register unsigned long h = 0;
31
31
  register unsigned char *p = (unsigned char *) str;
32
32
 
33
33
  for (; *p; p++) {
@@ -37,6 +37,16 @@ ulong str_hash(const char *const str)
37
37
  return h;
38
38
  }
39
39
 
40
+ unsigned long ptr_hash(const void *const ptr)
41
+ {
42
+ return (unsigned long)ptr;
43
+ }
44
+
45
+ int ptr_eq(const void *q1, const void *q2)
46
+ {
47
+ return q1 == q2;
48
+ }
49
+
40
50
  static int int_eq(const void *q1, const void *q2)
41
51
  {
42
52
  (void)q1;
@@ -44,9 +54,9 @@ static int int_eq(const void *q1, const void *q2)
44
54
  return true;
45
55
  }
46
56
 
47
- static ulong int_hash(const void *i)
57
+ static unsigned long int_hash(const void *i)
48
58
  {
49
- return *((ulong *)i);
59
+ return *((unsigned long *)i);
50
60
  }
51
61
 
52
62
  typedef HashEntry *(*lookup_ft)(struct HashTable *ht, register const void *key);
@@ -58,9 +68,10 @@ typedef HashEntry *(*lookup_ft)(struct HashTable *ht, register const void *key);
58
68
  * @param ht the HashTable to do the fast lookup in
59
69
  * @param the hashkey we are looking for
60
70
  */
61
- static __inline HashEntry *h_resize_lookup(HashTable *ht, register const ulong hash)
71
+ static __inline HashEntry *h_resize_lookup(HashTable *ht,
72
+ register const unsigned long hash)
62
73
  {
63
- register ulong perturb;
74
+ register unsigned long perturb;
64
75
  register int mask = ht->mask;
65
76
  register HashEntry *he0 = ht->table;
66
77
  register int i = hash & mask;
@@ -83,8 +94,8 @@ static __inline HashEntry *h_resize_lookup(HashTable *ht, register const ulong h
83
94
 
84
95
  HashEntry *h_lookup_int(HashTable *ht, const void *key)
85
96
  {
86
- register ulong hash = *((int *)key);
87
- register ulong perturb;
97
+ register unsigned long hash = *((int *)key);
98
+ register unsigned long perturb;
88
99
  register int mask = ht->mask;
89
100
  register HashEntry *he0 = ht->table;
90
101
  register int i = hash & mask;
@@ -120,8 +131,8 @@ HashEntry *h_lookup_int(HashTable *ht, const void *key)
120
131
 
121
132
  HashEntry *h_lookup_str(HashTable *ht, register const char *key)
122
133
  {
123
- register ulong hash = str_hash(key);
124
- register ulong perturb;
134
+ register unsigned long hash = str_hash(key);
135
+ register unsigned long perturb;
125
136
  register int mask = ht->mask;
126
137
  register HashEntry *he0 = ht->table;
127
138
  register int i = hash & mask;
@@ -477,32 +488,32 @@ int h_has_key(HashTable *ht, const void *key)
477
488
  }
478
489
  }
479
490
 
480
- void *h_get_int(HashTable *self, const ulong key)
491
+ void *h_get_int(HashTable *self, const unsigned long key)
481
492
  {
482
493
  return h_get(self, &key);
483
494
  }
484
495
 
485
- int h_del_int(HashTable *self, const ulong key)
496
+ int h_del_int(HashTable *self, const unsigned long key)
486
497
  {
487
498
  return h_del(self, &key);
488
499
  }
489
500
 
490
- void *h_rem_int(HashTable *self, const ulong key)
501
+ void *h_rem_int(HashTable *self, const unsigned long key)
491
502
  {
492
503
  return h_rem(self, &key, false);
493
504
  }
494
505
 
495
- int h_set_int(HashTable *self, const ulong key, void *value)
506
+ int h_set_int(HashTable *self, const unsigned long key, void *value)
496
507
  {
497
508
  return h_set(self, &key, value);
498
509
  }
499
510
 
500
- int h_set_safe_int(HashTable *self, const ulong key, void *value)
511
+ int h_set_safe_int(HashTable *self, const unsigned long key, void *value)
501
512
  {
502
513
  return h_set_safe(self, &key, value);
503
514
  }
504
515
 
505
- int h_has_key_int(HashTable *self, const ulong key)
516
+ int h_has_key_int(HashTable *self, const unsigned long key)
506
517
  {
507
518
  return h_has_key(self, &key);
508
519
  }