Skip to content

Commit 7c4c37c

Browse files
committed
saturated fix
1 parent 05f8c07 commit 7c4c37c

8 files changed

+6
-10
lines changed

ctl/ust.h

+6-10
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
#define B JOIN(A, node)
1313
#define I JOIN(A, it)
1414

15-
#define LAST_PRIME (24607243)
16-
1715
typedef struct B
1816
{
1917
T key;
@@ -187,7 +185,7 @@ JOIN(A, swap)(A* self, A* other)
187185
}
188186

189187
static inline size_t
190-
JOIN(A, closest_prime)(size_t number)
188+
JOIN(A, closest_prime)(size_t number, int* saturated)
191189
{
192190
static size_t primes[] = {
193191
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)
201199
480881, 520241, 562841, 608903, 658753, 712697, 771049, 834181, 902483, 976369, 1056323, 1142821, 1236397, 1337629,
202200
1447153, 1565659, 1693859, 1832561, 1982627, 2144977, 2320627, 2510653, 2716249, 2938679, 3179303, 3439651, 3721303,
203201
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
205203
};
206204
size_t min = primes[0];
207205
if(number < min)
@@ -214,7 +212,9 @@ JOIN(A, closest_prime)(size_t number)
214212
if(number >= a && number <= b)
215213
return number == a ? a : b;
216214
}
217-
return LAST_PRIME;
215+
if(saturated)
216+
*saturated = 1;
217+
return primes[size - 1];
218218
}
219219

220220
static inline B*
@@ -278,15 +278,13 @@ JOIN(A, reserve)(A* self, size_t desired_count)
278278
JOIN(A, rehash)(self, desired_count);
279279
else
280280
{
281-
size_t bucket_count = JOIN(A, closest_prime)(desired_count);
281+
size_t bucket_count = JOIN(A, closest_prime)(desired_count, &self->saturated);
282282
B** temp = (B**) calloc(bucket_count, sizeof(B*));
283283
for(size_t i = 0; i < self->bucket_count; i++)
284284
temp[i] = self->bucket[i];
285285
free(self->bucket);
286286
self->bucket = temp;
287287
self->bucket_count = bucket_count;
288-
if(bucket_count == LAST_PRIME)
289-
self->saturated = 1;
290288
}
291289
}
292290
}
@@ -431,5 +429,3 @@ JOIN(A, copy)(A* self)
431429
#undef A
432430
#undef B
433431
#undef I
434-
435-
#undef LAST_PRIME

images/compile.log.png

-6 Bytes
Loading

images/deq.log.png

3.69 KB
Loading

images/lst.log.png

435 Bytes
Loading

images/pqu.log.png

-7.75 KB
Loading

images/set.log.png

-2.19 KB
Loading

images/ust.log.png

67 Bytes
Loading

images/vec.log.png

-2.8 KB
Loading

0 commit comments

Comments
 (0)