Skip to content

Commit 88e4406

Browse files
awalter17imagejan
authored andcommitted
Add fill methods to columns
1 parent 1301ddd commit 88e4406

10 files changed

Lines changed: 242 additions & 9 deletions

File tree

src/main/java/net/imagej/table/BoolColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code boolean} primitives.
38-
*
38+
*
3939
* @author Alison Walter
4040
*/
4141
public class BoolColumn extends BoolArray implements Column<Boolean> {
@@ -66,4 +66,31 @@ public Class<Boolean> getType() {
6666
return Boolean.class;
6767
}
6868

69+
@Override
70+
public void fill(final Boolean[] values) {
71+
final boolean[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Boolean[] values, final int offset) {
77+
final boolean[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private boolean[] toPrimitive(final Boolean[] values) {
89+
final boolean[] prim = new boolean[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].booleanValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

src/main/java/net/imagej/table/ByteColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code byte} primitives.
38-
*
38+
*
3939
* @author Alison Walter
4040
*/
4141
public class ByteColumn extends ByteArray implements Column<Byte> {
@@ -66,4 +66,31 @@ public Class<Byte> getType() {
6666
return Byte.class;
6767
}
6868

69+
@Override
70+
public void fill(final Byte[] values) {
71+
final byte[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Byte[] values, final int offset) {
77+
final byte[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private byte[] toPrimitive(final Byte[] values) {
89+
final byte[] prim = new byte[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].byteValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

src/main/java/net/imagej/table/CharColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code char} primitives.
38-
*
38+
*
3939
* @author Alison Walter
4040
*/
4141
public class CharColumn extends CharArray implements Column<Character> {
@@ -66,4 +66,31 @@ public Class<Character> getType() {
6666
return Character.class;
6767
}
6868

69+
@Override
70+
public void fill(final Character[] values) {
71+
final char[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Character[] values, final int offset) {
77+
final char[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private char[] toPrimitive(final Character[] values) {
89+
final char[] prim = new char[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].charValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

src/main/java/net/imagej/table/Column.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737

3838
/**
3939
* A column of data of a {@link Table}.
40-
*
40+
*
4141
* @author Curtis Rueden
4242
* @param <T> The type of data stored in the table.
4343
*/
@@ -59,4 +59,11 @@ public interface Column<T> extends List<T>, Sizable {
5959

6060
/** Returns the actual type of data stored in the column. */
6161
Class<T> getType();
62+
63+
/** Fills the column with the values in the given array. */
64+
void fill(T[] values);
65+
66+
/** Fills the column with the values in the given array. */
67+
void fill(T[] values, int offset);
68+
6269
}

src/main/java/net/imagej/table/DefaultColumn.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,14 @@ public Class<T> getType() {
7171
return type;
7272
}
7373

74+
@Override
75+
public void fill(final T[] values) {
76+
fill(values, 0);
77+
}
78+
79+
@Override
80+
public void fill(final T[] values, final int offset) {
81+
System.arraycopy(values, 0, this.toArray(), 0, values.length);
82+
}
83+
7484
}

src/main/java/net/imagej/table/DoubleColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code double} primitives.
38-
*
38+
*
3939
* @author Curtis Rueden
4040
*/
4141
public class DoubleColumn extends DoubleArray implements Column<Double> {
@@ -66,4 +66,31 @@ public Class<Double> getType() {
6666
return Double.class;
6767
}
6868

69+
@Override
70+
public void fill(final Double[] values) {
71+
final double[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Double[] values, final int offset) {
77+
final double[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private double[] toPrimitive(final Double[] values) {
89+
final double[] prim = new double[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].doubleValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

src/main/java/net/imagej/table/FloatColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code float} primitives.
38-
*
38+
*
3939
* @author Alison Walter
4040
*/
4141
public class FloatColumn extends FloatArray implements Column<Float> {
@@ -66,4 +66,31 @@ public Class<Float> getType() {
6666
return Float.class;
6767
}
6868

69+
@Override
70+
public void fill(final Float[] values) {
71+
final float[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Float[] values, final int offset) {
77+
final float[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private float[] toPrimitive(final Float[] values) {
89+
final float[] prim = new float[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].floatValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

src/main/java/net/imagej/table/IntColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code int} primitives.
38-
*
38+
*
3939
* @author Alison Walter
4040
*/
4141
public class IntColumn extends IntArray implements Column<Integer> {
@@ -66,4 +66,31 @@ public Class<Integer> getType() {
6666
return Integer.class;
6767
}
6868

69+
@Override
70+
public void fill(final Integer[] values) {
71+
final int[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Integer[] values, final int offset) {
77+
final int[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private int[] toPrimitive(final Integer[] values) {
89+
final int[] prim = new int[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].intValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

src/main/java/net/imagej/table/LongColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code long} primitives.
38-
*
38+
*
3939
* @author Alison Walter
4040
*/
4141
public class LongColumn extends LongArray implements Column<Long> {
@@ -66,4 +66,31 @@ public Class<Long> getType() {
6666
return Long.class;
6767
}
6868

69+
@Override
70+
public void fill(final Long[] values) {
71+
final long[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Long[] values, final int offset) {
77+
final long[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private long[] toPrimitive(final Long[] values) {
89+
final long[] prim = new long[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].longValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

src/main/java/net/imagej/table/ShortColumn.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
/**
3737
* Efficient implementation of {@link Column} for {@code short} primitives.
38-
*
38+
*
3939
* @author Alison Walter
4040
*/
4141
public class ShortColumn extends ShortArray implements Column<Short> {
@@ -66,4 +66,31 @@ public Class<Short> getType() {
6666
return Short.class;
6767
}
6868

69+
@Override
70+
public void fill(final Short[] values) {
71+
final short[] prim = toPrimitive(values);
72+
this.setArray(prim);
73+
}
74+
75+
@Override
76+
public void fill(final Short[] values, final int offset) {
77+
final short[] prim = toPrimitive(values);
78+
79+
// Check if array has been initialized
80+
if (this.getArray() == null) this.setArray(prim);
81+
else {
82+
System.arraycopy(prim, 0, this.getArray(), offset, prim.length);
83+
}
84+
}
85+
86+
// -- Helper methods --
87+
88+
private short[] toPrimitive(final Short[] values) {
89+
final short[] prim = new short[values.length];
90+
for (int i = 0; i < prim.length; i++) {
91+
prim[i] = values[i].shortValue();
92+
}
93+
return prim;
94+
}
95+
6996
}

0 commit comments

Comments
 (0)