org.elasticsearch.compute.data.X-VectorBuilder.st Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of x-pack-esql-compute Show documentation
Show all versions of x-pack-esql-compute Show documentation
Elasticsearch subproject :x-pack:plugin:esql:compute
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
package org.elasticsearch.compute.data;
$if(BytesRef)$
import org.apache.lucene.util.BytesRef;
import org.elasticsearch.common.util.BigArrays;
import org.elasticsearch.common.util.BytesRefArray;
import org.elasticsearch.core.Releasables;
$else$
import java.util.Arrays;
$endif$
/**
* Builder for {@link $Type$Vector}s that grows as needed.
* This class is generated. Do not edit it.
*/
final class $Type$VectorBuilder extends AbstractVectorBuilder implements $Type$Vector.Builder {
$if(BytesRef)$
private BytesRefArray values;
BytesRefVectorBuilder(int estimatedSize, BlockFactory blockFactory) {
this(estimatedSize, BigArrays.NON_RECYCLING_INSTANCE, blockFactory);
}
BytesRefVectorBuilder(int estimatedSize, BigArrays bigArrays, BlockFactory blockFactory) {
super(blockFactory);
values = new BytesRefArray(Math.max(estimatedSize, 2), bigArrays);
}
$else$
private $type$[] values;
$Type$VectorBuilder(int estimatedSize, BlockFactory blockFactory) {
super(blockFactory);
int initialSize = Math.max(estimatedSize, 2);
adjustBreaker(initialSize);
values = new $type$[Math.max(estimatedSize, 2)];
}
$endif$
@Override
public $Type$VectorBuilder append$Type$($type$ value) {
ensureCapacity();
$if(BytesRef)$
values.append(value);
$else$
values[valueCount] = value;
$endif$
valueCount++;
return this;
}
@Override
protected int elementSize() {
return $if(BytesRef)$-1$else$$BYTES$$endif$;
}
@Override
protected int valuesLength() {
$if(BytesRef)$
return Integer.MAX_VALUE; // allow the BytesRefArray through its own append
$else$
return values.length;
$endif$
}
@Override
protected void growValuesArray(int newSize) {
$if(BytesRef)$
throw new AssertionError("should not reach here");
$else$
values = Arrays.copyOf(values, newSize);
$endif$
}
@Override
public $Type$Vector build() {
finish();
$Type$Vector vector;
$if(BytesRef)$
assert estimatedBytes == 0;
if (valueCount == 1) {
vector = new ConstantBytesRefVector(BytesRef.deepCopyOf(values.get(0, new BytesRef())), 1, blockFactory);
/*
* Update the breaker with the actual bytes used.
* We pass false below even though we've used the bytes. That's weird,
* but if we break here we will throw away the used memory, letting
* it be deallocated. The exception will bubble up and the builder will
* still technically be open, meaning the calling code should close it
* which will return all used memory to the breaker.
*/
blockFactory.adjustBreaker(vector.ramBytesUsed());
Releasables.closeExpectNoException(values);
} else {
vector = new $Type$ArrayVector(values, valueCount, blockFactory);
/*
* Update the breaker with the actual bytes used.
* We pass false below even though we've used the bytes. That's weird,
* but if we break here we will throw away the used memory, letting
* it be deallocated. The exception will bubble up and the builder will
* still technically be open, meaning the calling code should close it
* which will return all used memory to the breaker.
*/
blockFactory.adjustBreaker(vector.ramBytesUsed() - values.bigArraysRamBytesUsed());
}
values = null;
$else$
if (valueCount == 1) {
vector = blockFactory.newConstant$Type$BlockWith(values[0], 1, estimatedBytes).asVector();
} else {
if (values.length - valueCount > 1024 || valueCount < (values.length / 2)) {
values = Arrays.copyOf(values, valueCount);
}
vector = blockFactory.new$Type$ArrayVector(values, valueCount, estimatedBytes);
}
$endif$
built();
return vector;
}
$if(BytesRef)$
@Override
public void extraClose() {
Releasables.closeExpectNoException(values);
}
$endif$
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy