mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2025-07-04 00:45:57 +00:00
make BinaryColumn#or able to OR columns of different size
This commit is contained in:
parent
9c024df9e5
commit
8a35e3f21d
@ -18,6 +18,7 @@ import java.util.function.IntConsumer;
|
|||||||
public class BinaryColumn {
|
public class BinaryColumn {
|
||||||
private final boolean[] data;
|
private final boolean[] data;
|
||||||
private final int minY;
|
private final int minY;
|
||||||
|
private final int maxY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new {@link BinaryColumn} with all values initiated to {@code false}
|
* Constructs a new {@link BinaryColumn} with all values initiated to {@code false}
|
||||||
@ -26,6 +27,7 @@ public class BinaryColumn {
|
|||||||
*/
|
*/
|
||||||
public BinaryColumn(int minY, int maxY) {
|
public BinaryColumn(int minY, int maxY) {
|
||||||
this.minY = minY;
|
this.minY = minY;
|
||||||
|
this.maxY = maxY;
|
||||||
if(maxY <= minY) throw new IllegalArgumentException("Max y must be greater than min y");
|
if(maxY <= minY) throw new IllegalArgumentException("Max y must be greater than min y");
|
||||||
this.data = new boolean[maxY - minY];
|
this.data = new boolean[maxY - minY];
|
||||||
}
|
}
|
||||||
@ -90,12 +92,23 @@ public class BinaryColumn {
|
|||||||
* @throws IllegalArgumentException if column heights do not match
|
* @throws IllegalArgumentException if column heights do not match
|
||||||
*/
|
*/
|
||||||
public BinaryColumn or(BinaryColumn that) {
|
public BinaryColumn or(BinaryColumn that) {
|
||||||
if(that.minY != this.minY) throw new IllegalArgumentException("Must share same min Y");
|
int smallMinY = Math.min(this.minY, that.minY);
|
||||||
if(that.data.length != this.data.length) throw new IllegalArgumentException("Must share same max Y");
|
int bigMaxY = Math.max(this.maxY, that.maxY);
|
||||||
BinaryColumn next = new BinaryColumn(minY, data.length - minY);
|
|
||||||
|
|
||||||
for(int i = 0; i < this.data.length; i++) {
|
BinaryColumn next = new BinaryColumn(smallMinY, bigMaxY);
|
||||||
next.data[i] = this.data[i] || that.data[i];
|
|
||||||
|
for(int i = smallMinY; i < bigMaxY; i++) {
|
||||||
|
int index = i - smallMinY;
|
||||||
|
boolean left = false;
|
||||||
|
boolean right = false;
|
||||||
|
if(this.data.length > index) {
|
||||||
|
left = this.data[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(that.data.length > index) {
|
||||||
|
right = this.data[index];
|
||||||
|
}
|
||||||
|
next.data[i] = left || right;
|
||||||
}
|
}
|
||||||
|
|
||||||
return next;
|
return next;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user