io.deephaven.engine.table.impl.sources.FloatSingleValueSource Maven / Gradle / Ivy
Show all versions of deephaven-engine-table Show documentation
/**
* Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
*/
/*
* ---------------------------------------------------------------------------------------------------------------------
* AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY - for any changes edit CharacterSingleValueSource and regenerate
* ---------------------------------------------------------------------------------------------------------------------
*/
package io.deephaven.engine.table.impl.sources;
import io.deephaven.chunk.WritableFloatChunk;
import io.deephaven.chunk.WritableChunk;
import io.deephaven.chunk.attributes.Values;
import io.deephaven.engine.context.ExecutionContext;
import io.deephaven.engine.table.impl.MutableColumnSourceGetDefaults;
import io.deephaven.engine.rowset.chunkattributes.RowKeys;
import io.deephaven.chunk.FloatChunk;
import io.deephaven.chunk.Chunk;
import io.deephaven.chunk.LongChunk;
import io.deephaven.engine.rowset.RowSequence;
import org.jetbrains.annotations.NotNull;
import static io.deephaven.util.QueryConstants.NULL_FLOAT;
import static io.deephaven.util.type.TypeUtils.unbox;
/**
* Single value source for Float.
*
* The C-haracterSingleValueSource is replicated to all other types with
* io.deephaven.engine.table.impl.sources.Replicate.
*
* (C-haracter is deliberately spelled that way in order to prevent Replicate from altering this very comment).
*/
public class FloatSingleValueSource extends SingleValueColumnSource implements MutableColumnSourceGetDefaults.ForFloat {
private float current;
private transient float prev;
// region Constructor
public FloatSingleValueSource() {
super(float.class);
current = NULL_FLOAT;
prev = NULL_FLOAT;
}
// endregion Constructor
@Override
public final void set(Float value) {
if (isTrackingPrevValues) {
final long currentStep = updateGraph.clock().currentStep();
if (changeTime < currentStep) {
prev = current;
changeTime = currentStep;
}
}
current = unbox(value);
}
// region UnboxedSetter
@Override
public final void set(float value) {
if (isTrackingPrevValues) {
final long currentStep = updateGraph.clock().currentStep();
if (changeTime < currentStep) {
prev = current;
changeTime = currentStep;
}
}
current = value;
}
// endregion UnboxedSetter
@Override
public final void setNull() {
set(NULL_FLOAT);
}
@Override
public final void set(long key, float value) {
set(value);
}
@Override
public final float getFloat(long rowKey) {
if (rowKey == RowSequence.NULL_ROW_KEY) {
return NULL_FLOAT;
}
return current;
}
@Override
public final float getPrevFloat(long rowKey) {
if (rowKey == RowSequence.NULL_ROW_KEY) {
return NULL_FLOAT;
}
if (!isTrackingPrevValues || changeTime < updateGraph.clock().currentStep()) {
return current;
}
return prev;
}
@Override
public final void fillFromChunk(@NotNull FillFromContext context, @NotNull Chunk extends Values> src, @NotNull RowSequence rowSequence) {
if (rowSequence.size() == 0) {
return;
}
// We can only hold one value anyway, so arbitrarily take the first value in the chunk and ignore the rest.
final FloatChunk extends Values> chunk = src.asFloatChunk();
set(chunk.get(0));
}
@Override
public void fillFromChunkUnordered(@NotNull FillFromContext context, @NotNull Chunk extends Values> src, @NotNull LongChunk keys) {
if (keys.size() == 0) {
return;
}
// We can only hold one value anyway, so arbitrarily take the first value in the chunk and ignore the rest.
final FloatChunk extends Values> chunk = src.asFloatChunk();
set(chunk.get(0));
}
@Override
public void fillChunk(@NotNull FillContext context, @NotNull WritableChunk super Values> destination,
@NotNull RowSequence rowSequence) {
destination.setSize(rowSequence.intSize());
destination.asWritableFloatChunk().fillWithValue(0, rowSequence.intSize(), current);
}
@Override
public void fillPrevChunk(@NotNull FillContext context,
@NotNull WritableChunk super Values> destination, @NotNull RowSequence rowSequence) {
float value = getPrevFloat(0); // avoid duplicating the current vs prev logic in getPrevFloat
destination.setSize(rowSequence.intSize());
destination.asWritableFloatChunk().fillWithValue(0, rowSequence.intSize(), value);
}
@Override
public void fillChunkUnordered(@NotNull FillContext context, @NotNull WritableChunk super Values> dest,
@NotNull LongChunk extends RowKeys> keys) {
final WritableFloatChunk super Values> destChunk = dest.asWritableFloatChunk();
for (int ii = 0; ii < keys.size(); ++ii) {
destChunk.set(ii, keys.get(ii) == RowSequence.NULL_ROW_KEY ? NULL_FLOAT : current);
}
destChunk.setSize(keys.size());
}
@Override
public void fillPrevChunkUnordered(@NotNull FillContext context, @NotNull WritableChunk super Values> dest,
@NotNull LongChunk extends RowKeys> keys) {
float value = getPrevFloat(0); // avoid duplicating the current vs prev logic in getPrevFloat
final WritableFloatChunk super Values> destChunk = dest.asWritableFloatChunk();
for (int ii = 0; ii < keys.size(); ++ii) {
destChunk.set(ii, keys.get(ii) == RowSequence.NULL_ROW_KEY ? NULL_FLOAT : value);
}
destChunk.setSize(keys.size());
}
@Override
public boolean providesFillUnordered() {
return true;
}
}