|
53 | 53 |
|
54 | 54 | #include "sys-core.h"
|
55 | 55 |
|
56 |
| -#define MIN_DICT 8 // size to switch to hashing |
57 |
| - |
58 | 56 |
|
59 | 57 | /***********************************************************************
|
60 | 58 | **
|
|
74 | 72 | /*
|
75 | 73 | ** Makes a MAP block (that holds both keys and values).
|
76 | 74 | ** Size is the number of key-value pairs.
|
77 |
| -** If size >= MIN_DICT, then a hash series is also created. |
| 75 | +** Hash series is also created. |
78 | 76 | **
|
79 | 77 | ***********************************************************************/
|
80 | 78 | {
|
81 | 79 | REBSER *blk = Make_Block(size*2);
|
82 | 80 | REBSER *ser = 0;
|
83 | 81 |
|
84 |
| - if (size >= MIN_DICT) ser = Make_Hash_Array(size); |
| 82 | + ser = Make_Hash_Array(size); |
85 | 83 |
|
86 | 84 | blk->series = ser;
|
87 | 85 |
|
|
210 | 208 | REBVAL *v;
|
211 | 209 | REBCNT n;
|
212 | 210 |
|
213 |
| - if (IS_NONE(key)) return 0; |
214 |
| - |
215 |
| - // We may not be large enough yet for the hash table to |
216 |
| - // be worthwhile, so just do a linear search: |
217 |
| - if (!hser) { |
218 |
| - if (series->tail < MIN_DICT*2) { |
219 |
| - v = BLK_HEAD(series); |
220 |
| - if (ANY_WORD(key)) { |
221 |
| - for (n = 0; n < series->tail; n += 2, v += 2) { |
222 |
| - if (ANY_WORD(v) && SAME_SYM(key, v)) { |
223 |
| - if (val) *++v = *val; |
224 |
| - return n/2+1; |
225 |
| - } |
226 |
| - } |
227 |
| - } |
228 |
| - else if (ANY_BINSTR(key)) { |
229 |
| - for (n = 0; n < series->tail; n += 2, v += 2) { |
230 |
| - if (VAL_TYPE(key) == VAL_TYPE(v) && 0 == Compare_String_Vals(key, v, (REBOOL)!IS_BINARY(v))) { |
231 |
| - if (val) { |
232 |
| - *++v = *val; |
233 |
| -// VAL_SERIES(v) = Copy_Series_Value(val); |
234 |
| -// VAL_INDEX(v) = 0; |
235 |
| - } |
236 |
| - return n/2+1; |
237 |
| - } |
238 |
| - } |
239 |
| - } |
240 |
| - else if (IS_INTEGER(key)) { |
241 |
| - for (n = 0; n < series->tail; n += 2, v += 2) { |
242 |
| - if (IS_INTEGER(v) && VAL_INT64(key) == VAL_INT64(v)) { |
243 |
| - if (val) *++v = *val; |
244 |
| - return n/2+1; |
245 |
| - } |
246 |
| - } |
247 |
| - } |
248 |
| - else if (IS_CHAR(key)) { |
249 |
| - for (n = 0; n < series->tail; n += 2, v += 2) { |
250 |
| - if (IS_CHAR(v) && VAL_CHAR(key) == VAL_CHAR(v)) { |
251 |
| - if (val) *++v = *val; |
252 |
| - return n/2+1; |
253 |
| - } |
254 |
| - } |
255 |
| - } |
256 |
| - else Trap_Type(key); |
257 |
| - |
258 |
| - if (!val) return 0; |
259 |
| - Append_Val(series, key); |
260 |
| - Append_Val(series, val); // no Copy_Series_Value(val) on strings |
261 |
| - return series->tail/2; |
262 |
| - } |
263 |
| - |
264 |
| - // Add hash table: |
265 |
| - //Print("hash added %d", series->tail); |
266 |
| - series->series = hser = Make_Hash_Array(series->tail); |
267 |
| - Rehash_Hash(series); |
268 |
| - } |
| 211 | + if (IS_NONE(key) || hser == NULL) return 0; |
269 | 212 |
|
270 | 213 | // Get hash table, expand it if needed:
|
271 | 214 | if (series->tail > hser->tail/2) {
|
|
427 | 370 | REBSER *ser = 0;
|
428 | 371 | REBCNT size = SERIES_TAIL(blk);
|
429 | 372 |
|
430 |
| - if (size >= MIN_DICT) ser = Make_Hash_Array(size); |
| 373 | + ser = Make_Hash_Array(size); |
431 | 374 | blk->series = ser;
|
432 | 375 | Rehash_Hash(blk);
|
433 | 376 | }
|
|
0 commit comments