@@ -79,6 +79,14 @@ template <typename T> auto PandasIsNA(bool mask_value, T &scalar_value) {
7979 }
8080}
8181
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+
8290template <typename T> class PandasVector {
8391public:
8492 explicit PandasVector<T>() : external_view_exists_(false ) {}
@@ -222,6 +230,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
222230 const auto n = values_v.shape (0 );
223231 for (auto i = decltype (n){0 }; i < n; i++) {
224232 hash_map_[keys_v (i)] = values_v (i);
233+ MaybeResizeKlibContainer (hash_map_);
225234 }
226235 }
227236
@@ -246,13 +255,15 @@ template <typename T, bool IsMasked> class PandasHashTable {
246255 na_position = i;
247256 } else {
248257 hash_map_[values_v (i)] = i;
258+ MaybeResizeKlibContainer (hash_map_);
249259 }
250260 }
251261 na_position_ = na_position;
252262 } else {
253263 for (auto i = decltype (n){0 }; i < n; i++) {
254264 const auto key = values_v (i);
255265 hash_map_[key] = i;
266+ MaybeResizeKlibContainer (hash_map_);
256267 }
257268 }
258269 }
@@ -421,6 +432,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
421432 int dummy;
422433 k = hash_map_.put (val, &dummy);
423434 hash_map_.value (k) = count;
435+ MaybeResizeKlibContainer (hash_map_);
424436 uniques.Append (val);
425437 labels[i] = count;
426438 count++;
@@ -479,6 +491,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
479491 k = hash_map_.put (val, &dummy);
480492 uniques.Append (val);
481493 hash_map_.value (k) = count_prior;
494+ MaybeResizeKlibContainer (hash_map_);
482495 labels[i] = count_prior;
483496 count_prior++;
484497 } else {
@@ -512,6 +525,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
512525 k = hash_map_.put (val, &dummy);
513526 uniques.Append (val);
514527 hash_map_.value (k) = count_prior;
528+ MaybeResizeKlibContainer (hash_map_);
515529 labels[i] = count_prior;
516530 count_prior++;
517531 } else {
@@ -566,6 +580,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
566580
567581 int absent;
568582 hash_set_.put (val, &absent);
583+ MaybeResizeKlibContainer (hash_set_);
569584 if (absent) {
570585 uniques.Append (val);
571586 result.Append (0 );
@@ -577,6 +592,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
577592 const auto val = values_v (i);
578593 int absent;
579594 hash_set_.put (val, &absent);
595+ MaybeResizeKlibContainer (hash_set_);
580596 if (absent) {
581597 uniques.Append (val);
582598 result.Append (0 );
@@ -600,6 +616,7 @@ template <typename T, bool IsMasked> class PandasHashTable {
600616 if (k == hash_map_.end ()) {
601617 int dummy;
602618 k = hash_map_.put (val, &dummy);
619+ MaybeResizeKlibContainer (hash_map_);
603620 uniques.Append (val);
604621 }
605622 }
0 commit comments