@@ -79,6 +79,14 @@ template <typename T> auto PandasIsNA(bool mask_value, T &scalar_value) {
79
79
}
80
80
}
81
81
82
+ template <typename T>
83
+ auto MaybeResizeKlibContainer (T& container) {
84
+ const auto current_size = container.size ();
85
+ if (container.n_buckets () == current_size) {
86
+ container.resize (current_size * 4 );
87
+ }
88
+ }
89
+
82
90
template <typename T> class PandasVector {
83
91
public:
84
92
explicit PandasVector<T>() : external_view_exists_(false ) {}
@@ -222,6 +230,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
222
230
const auto n = values_v.shape (0 );
223
231
for (auto i = decltype (n){0 }; i < n; i++) {
224
232
hash_map_[keys_v (i)] = values_v (i);
233
+ MaybeResizeKlibContainer (hash_map_);
225
234
}
226
235
}
227
236
@@ -246,13 +255,15 @@ template <typename T, bool IsMasked> class PandasHashTable {
246
255
na_position = i;
247
256
} else {
248
257
hash_map_[values_v (i)] = i;
258
+ MaybeResizeKlibContainer (hash_map_);
249
259
}
250
260
}
251
261
na_position_ = na_position;
252
262
} else {
253
263
for (auto i = decltype (n){0 }; i < n; i++) {
254
264
const auto key = values_v (i);
255
265
hash_map_[key] = i;
266
+ MaybeResizeKlibContainer (hash_map_);
256
267
}
257
268
}
258
269
}
@@ -421,6 +432,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
421
432
int dummy;
422
433
k = hash_map_.put (val, &dummy);
423
434
hash_map_.value (k) = count;
435
+ MaybeResizeKlibContainer (hash_map_);
424
436
uniques.Append (val);
425
437
labels[i] = count;
426
438
count++;
@@ -479,6 +491,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
479
491
k = hash_map_.put (val, &dummy);
480
492
uniques.Append (val);
481
493
hash_map_.value (k) = count_prior;
494
+ MaybeResizeKlibContainer (hash_map_);
482
495
labels[i] = count_prior;
483
496
count_prior++;
484
497
} else {
@@ -512,6 +525,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
512
525
k = hash_map_.put (val, &dummy);
513
526
uniques.Append (val);
514
527
hash_map_.value (k) = count_prior;
528
+ MaybeResizeKlibContainer (hash_map_);
515
529
labels[i] = count_prior;
516
530
count_prior++;
517
531
} else {
@@ -566,6 +580,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
566
580
567
581
int absent;
568
582
hash_set_.put (val, &absent);
583
+ MaybeResizeKlibContainer (hash_set_);
569
584
if (absent) {
570
585
uniques.Append (val);
571
586
result.Append (0 );
@@ -577,6 +592,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
577
592
const auto val = values_v (i);
578
593
int absent;
579
594
hash_set_.put (val, &absent);
595
+ MaybeResizeKlibContainer (hash_set_);
580
596
if (absent) {
581
597
uniques.Append (val);
582
598
result.Append (0 );
@@ -600,6 +616,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
600
616
if (k == hash_map_.end ()) {
601
617
int dummy;
602
618
k = hash_map_.put (val, &dummy);
619
+ MaybeResizeKlibContainer (hash_map_);
603
620
uniques.Append (val);
604
621
}
605
622
}
0 commit comments