12
12
#define B JOIN(A, node)
13
13
#define I JOIN(A, it)
14
14
15
- #define LAST_PRIME (24607243)
16
-
17
15
typedef struct B
18
16
{
19
17
T key ;
@@ -187,7 +185,7 @@ JOIN(A, swap)(A* self, A* other)
187
185
}
188
186
189
187
static inline size_t
190
- JOIN (A , closest_prime )(size_t number )
188
+ JOIN (A , closest_prime )(size_t number , int * saturated )
191
189
{
192
190
static size_t primes [] = {
193
191
2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97 ,
@@ -201,7 +199,7 @@ JOIN(A, closest_prime)(size_t number)
201
199
480881 , 520241 , 562841 , 608903 , 658753 , 712697 , 771049 , 834181 , 902483 , 976369 , 1056323 , 1142821 , 1236397 , 1337629 ,
202
200
1447153 , 1565659 , 1693859 , 1832561 , 1982627 , 2144977 , 2320627 , 2510653 , 2716249 , 2938679 , 3179303 , 3439651 , 3721303 ,
203
201
4026031 , 4355707 , 4712381 , 5098259 , 5515729 , 5967347 , 6456007 , 6984629 , 7556579 , 8175383 , 8844859 , 9569143 , 10352717 ,
204
- 11200489 , 12117689 , 13109983 , 14183539 , 15345007 , 16601593 , 17961079 , 19431899 , 21023161 , 22744717 , LAST_PRIME
202
+ 11200489 , 12117689 , 13109983 , 14183539 , 15345007 , 16601593 , 17961079 , 19431899 , 21023161 , 22744717 , 24607243
205
203
};
206
204
size_t min = primes [0 ];
207
205
if (number < min )
@@ -214,7 +212,9 @@ JOIN(A, closest_prime)(size_t number)
214
212
if (number >= a && number <= b )
215
213
return number == a ? a : b ;
216
214
}
217
- return LAST_PRIME ;
215
+ if (saturated )
216
+ * saturated = 1 ;
217
+ return primes [size - 1 ];
218
218
}
219
219
220
220
static inline B *
@@ -278,15 +278,13 @@ JOIN(A, reserve)(A* self, size_t desired_count)
278
278
JOIN (A , rehash )(self , desired_count );
279
279
else
280
280
{
281
- size_t bucket_count = JOIN (A , closest_prime )(desired_count );
281
+ size_t bucket_count = JOIN (A , closest_prime )(desired_count , & self -> saturated );
282
282
B * * temp = (B * * ) calloc (bucket_count , sizeof (B * ));
283
283
for (size_t i = 0 ; i < self -> bucket_count ; i ++ )
284
284
temp [i ] = self -> bucket [i ];
285
285
free (self -> bucket );
286
286
self -> bucket = temp ;
287
287
self -> bucket_count = bucket_count ;
288
- if (bucket_count == LAST_PRIME )
289
- self -> saturated = 1 ;
290
288
}
291
289
}
292
290
}
@@ -431,5 +429,3 @@ JOIN(A, copy)(A* self)
431
429
#undef A
432
430
#undef B
433
431
#undef I
434
-
435
- #undef LAST_PRIME
0 commit comments