Skip to content

Commit 87c77cc

Browse files
dfa1claude
andcommitted
refactor(array): hoist elementCount into AbstractMaterializedArray
Derive the broadcast element count once in the base class from the dtype's PType byteSize instead of duplicating buffer.byteSize() / width in all six numeric Materialized* leaves. Bool and Float16 (never broadcast) fall back to length. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 089b6e3 commit 87c77cc

7 files changed

Lines changed: 8 additions & 18 deletions

File tree

reader/src/main/java/io/github/dfa1/vortex/reader/array/AbstractMaterializedArray.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,19 @@ abstract class AbstractMaterializedArray {
2323
final DType dtype;
2424
final long length;
2525
final MemorySegment buffer;
26+
/// Number of physical elements the buffer actually holds, derived from its byte size
27+
/// and the element width. Equals [#length] except for broadcast buffers (e.g. a
28+
/// `ConstantEncoding` of one element), where the leaf hot loops take `i % elementCount`.
29+
final long elementCount;
2630

2731
AbstractMaterializedArray(DType dtype, long length, MemorySegment buffer) {
2832
this.dtype = dtype;
2933
this.length = length;
3034
this.buffer = buffer;
35+
this.elementCount = switch (dtype) {
36+
case DType.Primitive p -> buffer.byteSize() / p.ptype().byteSize();
37+
default -> length;
38+
};
3139
}
3240

3341
public final DType dtype() {

reader/src/main/java/io/github/dfa1/vortex/reader/array/MaterializedByteArray.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@
1212
/// either materialises the output eagerly or has no lazy variant of its own.
1313
public final class MaterializedByteArray extends AbstractMaterializedArray implements ByteArray {
1414

15-
private final long elementCount;
16-
1715
/// Constructs a `MaterializedByteArray` backed by the given buffer.
1816
///
1917
/// @param dtype logical type, must be a [io.github.dfa1.vortex.core.DType.Primitive] with ptype I8 or U8
2018
/// @param length number of logical elements
2119
/// @param buffer raw byte data (one byte per element)
2220
public MaterializedByteArray(DType dtype, long length, MemorySegment buffer) {
2321
super(dtype, length, buffer);
24-
this.elementCount = buffer.byteSize();
2522
}
2623

2724
@Override

reader/src/main/java/io/github/dfa1/vortex/reader/array/MaterializedDoubleArray.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,13 @@
1111
/// either materialises the output eagerly or has no lazy variant of its own.
1212
public final class MaterializedDoubleArray extends AbstractMaterializedArray implements DoubleArray {
1313

14-
private final long elementCount;
15-
1614
/// Constructs a `MaterializedDoubleArray` backed by the given buffer.
1715
///
1816
/// @param dtype logical type, must be a [io.github.dfa1.vortex.core.DType.Primitive] with ptype F64
1917
/// @param length number of logical elements
2018
/// @param buffer raw double data (8 bytes per element, little-endian)
2119
public MaterializedDoubleArray(DType dtype, long length, MemorySegment buffer) {
2220
super(dtype, length, buffer);
23-
this.elementCount = buffer.byteSize() / PTypeIO.LE_DOUBLE.byteSize();
2421
}
2522

2623
@Override

reader/src/main/java/io/github/dfa1/vortex/reader/array/MaterializedFloatArray.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,13 @@
1111
/// either materialises the output eagerly or has no lazy variant of its own.
1212
public final class MaterializedFloatArray extends AbstractMaterializedArray implements FloatArray {
1313

14-
private final long elementCount;
15-
1614
/// Creates a new `MaterializedFloatArray` backed by the given memory segment.
1715
///
1816
/// @param dtype logical type, must be F32
1917
/// @param length number of elements
2018
/// @param buffer little-endian float data (4 bytes per element)
2119
public MaterializedFloatArray(DType dtype, long length, MemorySegment buffer) {
2220
super(dtype, length, buffer);
23-
this.elementCount = buffer.byteSize() / PTypeIO.LE_FLOAT.byteSize();
2421
}
2522

2623
@Override

reader/src/main/java/io/github/dfa1/vortex/reader/array/MaterializedIntArray.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@
1212
/// either materialises the output eagerly or has no lazy variant of its own.
1313
public final class MaterializedIntArray extends AbstractMaterializedArray implements IntArray {
1414

15-
private final long elementCount;
16-
1715
/// Creates a new `MaterializedIntArray` backed by the given memory segment.
1816
///
1917
/// @param dtype logical type, must be I32 or U32
2018
/// @param length number of elements
2119
/// @param buffer little-endian int data (4 bytes per element)
2220
public MaterializedIntArray(DType dtype, long length, MemorySegment buffer) {
2321
super(dtype, length, buffer);
24-
this.elementCount = buffer.byteSize() / PTypeIO.LE_INT.byteSize();
2522
}
2623

2724
@Override

reader/src/main/java/io/github/dfa1/vortex/reader/array/MaterializedLongArray.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@
1212
/// either materialises the output eagerly or has no lazy variant of its own.
1313
public final class MaterializedLongArray extends AbstractMaterializedArray implements LongArray {
1414

15-
private final long elementCount;
16-
1715
/// Creates a new `MaterializedLongArray` backed by the given memory segment.
1816
///
1917
/// @param dtype logical type, must be I64 or U64
2018
/// @param length number of elements
2119
/// @param buffer little-endian long data (8 bytes per element)
2220
public MaterializedLongArray(DType dtype, long length, MemorySegment buffer) {
2321
super(dtype, length, buffer);
24-
this.elementCount = buffer.byteSize() / PTypeIO.LE_LONG.byteSize();
2522
}
2623

2724
@Override

reader/src/main/java/io/github/dfa1/vortex/reader/array/MaterializedShortArray.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@
1212
/// either materialises the output eagerly or has no lazy variant of its own.
1313
public final class MaterializedShortArray extends AbstractMaterializedArray implements ShortArray {
1414

15-
private final long elementCount;
16-
1715
/// Creates a new `MaterializedShortArray` backed by the given memory segment.
1816
///
1917
/// @param dtype logical type, must be I16 or U16
2018
/// @param length number of elements
2119
/// @param buffer little-endian short data (2 bytes per element)
2220
public MaterializedShortArray(DType dtype, long length, MemorySegment buffer) {
2321
super(dtype, length, buffer);
24-
this.elementCount = buffer.byteSize() / PTypeIO.LE_SHORT.byteSize();
2522
}
2623

2724
@Override

0 commit comments

Comments
 (0)