56 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.phys.shapes;
 | |
| 
 | |
| import it.unimi.dsi.fastutil.doubles.AbstractDoubleList;
 | |
| import it.unimi.dsi.fastutil.doubles.DoubleList;
 | |
| 
 | |
| public class NonOverlappingMerger extends AbstractDoubleList implements IndexMerger {
 | |
| 	private final DoubleList lower;
 | |
| 	private final DoubleList upper;
 | |
| 	private final boolean swap;
 | |
| 
 | |
| 	protected NonOverlappingMerger(DoubleList lower, DoubleList upper, boolean swap) {
 | |
| 		this.lower = lower;
 | |
| 		this.upper = upper;
 | |
| 		this.swap = swap;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public int size() {
 | |
| 		return this.lower.size() + this.upper.size();
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public boolean forMergedIndexes(IndexMerger.IndexConsumer consumer) {
 | |
| 		return this.swap ? this.forNonSwappedIndexes((i, j, k) -> consumer.merge(j, i, k)) : this.forNonSwappedIndexes(consumer);
 | |
| 	}
 | |
| 
 | |
| 	private boolean forNonSwappedIndexes(IndexMerger.IndexConsumer consumer) {
 | |
| 		int i = this.lower.size();
 | |
| 
 | |
| 		for (int j = 0; j < i; j++) {
 | |
| 			if (!consumer.merge(j, -1, j)) {
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		int jx = this.upper.size() - 1;
 | |
| 
 | |
| 		for (int k = 0; k < jx; k++) {
 | |
| 			if (!consumer.merge(i - 1, k, i + k)) {
 | |
| 				return false;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return true;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public double getDouble(int i) {
 | |
| 		return i < this.lower.size() ? this.lower.getDouble(i) : this.upper.getDouble(i - this.lower.size());
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public DoubleList getList() {
 | |
| 		return this;
 | |
| 	}
 | |
| }
 |