Skip to content

Commit 0ae5084

Browse files
committed
Container resizing
1 parent 2cb2e40 commit 0ae5084

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

pandas/_libs/new_vector.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
8290
template <typename T> class PandasVector {
8391
public:
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

Comments
 (0)