summaryrefslogtreecommitdiffstats
path: root/vespajlib
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-04-26 14:48:50 +0200
committerJon Bratseth <bratseth@verizonmedia.com>2019-04-26 14:48:50 +0200
commitf0f7f4962e6339ad2b4fbd293e89df86a6ec7a0a (patch)
tree577ba74ca8917cd5fa16eb950be363bf0771a61f /vespajlib
parentae5d5e058f1bb2fd197886ac374ce807065fdb77 (diff)
Decode directly as float
Diffstat (limited to 'vespajlib')
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/serialization/DenseBinaryFormat.java28
1 files changed, 20 insertions, 8 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/serialization/DenseBinaryFormat.java b/vespajlib/src/main/java/com/yahoo/tensor/serialization/DenseBinaryFormat.java
index 5072484567d..ec8c7de1e72 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/serialization/DenseBinaryFormat.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/serialization/DenseBinaryFormat.java
@@ -51,15 +51,22 @@ public class DenseBinaryFormat implements BinaryFormat {
private void encodeCells(GrowableByteBuffer buffer, Tensor tensor) {
switch (serializationValueType) {
- case DOUBLE: encodeCells(tensor, buffer::putDouble); break;
- case FLOAT: encodeCells(tensor, (i) -> buffer.putFloat(i.floatValue())); break;
+ case DOUBLE: encodeDoubleCells(tensor, buffer); break;
+ case FLOAT: encodeFloatCells(tensor, buffer); break;
}
}
- private void encodeCells(Tensor tensor, Consumer<Double> consumer) {
+ private void encodeDoubleCells(Tensor tensor, GrowableByteBuffer buffer) {
Iterator<Double> i = tensor.valueIterator();
while (i.hasNext()) {
- consumer.accept(i.next());
+ buffer.putDouble(i.next());
+ }
+ }
+
+ private void encodeFloatCells(Tensor tensor, GrowableByteBuffer buffer) {
+ Iterator<Double> i = tensor.valueIterator(); // TODO: floatValueIterator
+ while (i.hasNext()) {
+ buffer.putFloat(i.next().floatValue());
}
}
@@ -106,14 +113,19 @@ public class DenseBinaryFormat implements BinaryFormat {
private void decodeCells(DimensionSizes sizes, GrowableByteBuffer buffer, IndexedTensor.BoundBuilder builder) {
switch (serializationValueType) {
- case DOUBLE: decodeCells(sizes, builder, buffer::getDouble); break;
- case FLOAT: decodeCells(sizes, builder, () -> (double)buffer.getFloat()); break;
+ case DOUBLE: decodeDoubleCells(sizes, builder, buffer); break;
+ case FLOAT: decodeFloatCells(sizes, builder, buffer); break;
}
}
- private void decodeCells(DimensionSizes sizes, IndexedTensor.BoundBuilder builder, Supplier<Double> supplier) {
+ private void decodeDoubleCells(DimensionSizes sizes, IndexedTensor.BoundBuilder builder, GrowableByteBuffer buffer) {
+ for (long i = 0; i < sizes.totalSize(); i++)
+ builder.cellByDirectIndex(i, buffer.getDouble());
+ }
+
+ private void decodeFloatCells(DimensionSizes sizes, IndexedTensor.BoundBuilder builder, GrowableByteBuffer buffer) {
for (long i = 0; i < sizes.totalSize(); i++)
- builder.cellByDirectIndex(i, supplier.get());
+ builder.cellByDirectIndex(i, buffer.getFloat());
}
}