ferret 0.10.6 → 0.10.7

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.
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
  }