aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2024-01-15 13:47:39 +0000
committerArne Juul <arnej@yahooinc.com>2024-01-15 13:47:39 +0000
commit3598f35481faa944133be47165571e46eaf6c667 (patch)
tree82733fc7ba188374afd1f495b81c55bb9a5b98dd /container-search
parentae9a732e3e16d46457da372a4da594064442be04 (diff)
allow data buffer growth inside Normalizer instances
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/ranking/Normalizer.java21
1 files changed, 18 insertions, 3 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/ranking/Normalizer.java b/container-search/src/main/java/com/yahoo/search/ranking/Normalizer.java
index eb81d0555b3..0d86e1409c3 100644
--- a/container-search/src/main/java/com/yahoo/search/ranking/Normalizer.java
+++ b/container-search/src/main/java/com/yahoo/search/ranking/Normalizer.java
@@ -3,14 +3,29 @@ package com.yahoo.search.ranking;
abstract class Normalizer {
- protected final double[] data;
+ protected double[] data;
protected int size = 0;
- Normalizer(int maxSize) {
- this.data = new double[maxSize];
+ private static int initialCapacity(int hint) {
+ for (int capacity = 64; capacity < 4096; capacity *= 2) {
+ if (hint <= capacity) {
+ return capacity;
+ }
+ }
+ return 4096;
+ }
+
+ Normalizer(int sizeHint) {
+ this.data = new double[initialCapacity(sizeHint)];
}
int addInput(double value) {
+ if (size == data.length) {
+ int newSize = size * 2;
+ var tmp = new double[newSize];
+ System.arraycopy(data, 0, tmp, 0, size);
+ this.data = tmp;
+ }
data[size] = value;
return size++;
}