File tree Expand file tree Collapse file tree
core/src/main/java/io/github/dfa1/vortex/core/array
integration/src/test/java/io/github/dfa1/vortex/integration Expand file tree Collapse file tree Original file line number Diff line number Diff line change 66
77import java .lang .foreign .MemorySegment ;
88import java .lang .foreign .ValueLayout ;
9+ import java .util .function .LongBinaryOperator ;
910
1011/// Concrete [Array] for I8/U8 primitive columns.
1112public final class ByteArray implements Array {
@@ -53,4 +54,14 @@ public int getInt(long i) {
5354 boolean unsigned = dtype instanceof DType .Primitive p && p .ptype () == PType .U8 ;
5455 return unsigned ? Byte .toUnsignedInt (raw ) : raw ;
5556 }
57+
58+ public long fold (long identity , LongBinaryOperator op ) {
59+ MemorySegment buf = buffer ;
60+ long n = length ;
61+ long result = identity ;
62+ for (long i = 0 ; i < n ; i ++) {
63+ result = op .applyAsLong (result , buf .get (ValueLayout .JAVA_BYTE , i ));
64+ }
65+ return result ;
66+ }
5667}
Original file line number Diff line number Diff line change 55import io .github .dfa1 .vortex .encoding .PTypeIO ;
66
77import java .lang .foreign .MemorySegment ;
8+ import java .util .function .DoubleBinaryOperator ;
89
910/// Concrete [Array] for F32 primitive columns.
1011public final class FloatArray implements Array {
@@ -46,4 +47,14 @@ public MemorySegment buffer(int i) {
4647 public float getFloat (long i ) {
4748 return buffer .getAtIndex (PTypeIO .LE_FLOAT , i );
4849 }
50+
51+ public double fold (double identity , DoubleBinaryOperator op ) {
52+ MemorySegment buf = buffer ;
53+ long n = length ;
54+ double result = identity ;
55+ for (long i = 0 ; i < n ; i ++) {
56+ result = op .applyAsDouble (result , buf .getAtIndex (PTypeIO .LE_FLOAT , i ));
57+ }
58+ return result ;
59+ }
4960}
Original file line number Diff line number Diff line change 44import io .github .dfa1 .vortex .core .DType ;
55import io .github .dfa1 .vortex .encoding .PTypeIO ;
66import java .lang .foreign .MemorySegment ;
7+ import java .util .function .IntBinaryOperator ;
78import java .util .function .IntConsumer ;
89
910/// Concrete [Array] for I32/U32 primitive columns.
@@ -54,4 +55,14 @@ public void forEachInt(IntConsumer c) {
5455 c .accept (buf .getAtIndex (PTypeIO .LE_INT , i ));
5556 }
5657 }
58+
59+ public int fold (int identity , IntBinaryOperator op ) {
60+ MemorySegment buf = buffer ;
61+ long n = length ;
62+ int result = identity ;
63+ for (long i = 0 ; i < n ; i ++) {
64+ result = op .applyAsInt (result , buf .getAtIndex (PTypeIO .LE_INT , i ));
65+ }
66+ return result ;
67+ }
5768}
Original file line number Diff line number Diff line change 66import io .github .dfa1 .vortex .encoding .PTypeIO ;
77
88import java .lang .foreign .MemorySegment ;
9+ import java .util .function .LongBinaryOperator ;
910
1011/// Concrete [Array] for I16/U16 primitive columns.
1112public final class ShortArray implements Array {
@@ -53,4 +54,14 @@ public int getInt(long i) {
5354 boolean unsigned = dtype instanceof DType .Primitive p && p .ptype () == PType .U16 ;
5455 return unsigned ? Short .toUnsignedInt (raw ) : raw ;
5556 }
57+
58+ public long fold (long identity , LongBinaryOperator op ) {
59+ MemorySegment buf = buffer ;
60+ long n = length ;
61+ long result = identity ;
62+ for (long i = 0 ; i < n ; i ++) {
63+ result = op .applyAsLong (result , buf .getAtIndex (PTypeIO .LE_SHORT , i ));
64+ }
65+ return result ;
66+ }
5667}
Original file line number Diff line number Diff line change @@ -339,27 +339,9 @@ private static Double numericSum(Array arr) {
339339 return switch (arr ) {
340340 case LongArray v -> (double ) v .fold (0L , Long ::sum );
341341 case DoubleArray v -> v .fold (0.0 , Double ::sum );
342- case IntArray v -> {
343- long s = 0 ;
344- for (long i = 0 ; i < v .length (); i ++) {
345- s += v .getInt (i );
346- }
347- yield (double ) s ;
348- }
349- case FloatArray v -> {
350- double s = 0 ;
351- for (long i = 0 ; i < v .length (); i ++) {
352- s += v .getFloat (i );
353- }
354- yield s ;
355- }
356- case ShortArray v -> {
357- long s = 0 ;
358- for (long i = 0 ; i < v .length (); i ++) {
359- s += v .getShort (i );
360- }
361- yield (double ) s ;
362- }
342+ case IntArray v -> (double ) v .fold (0 , Integer ::sum );
343+ case FloatArray v -> v .fold (0.0 , Double ::sum );
344+ case ShortArray v -> (double ) v .fold (0L , Long ::sum );
363345 default -> null ;
364346 };
365347 }
You can’t perform that action at this time.
0 commit comments