41 lines
		
	
	
	
		
			859 B
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			859 B
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.renderer;
 | |
| 
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class RunningTrimmedMean {
 | |
| 	private final long[] values;
 | |
| 	private int count;
 | |
| 	private int cursor;
 | |
| 
 | |
| 	public RunningTrimmedMean(int size) {
 | |
| 		this.values = new long[size];
 | |
| 	}
 | |
| 
 | |
| 	public long registerValueAndGetMean(long value) {
 | |
| 		if (this.count < this.values.length) {
 | |
| 			this.count++;
 | |
| 		}
 | |
| 
 | |
| 		this.values[this.cursor] = value;
 | |
| 		this.cursor = (this.cursor + 1) % this.values.length;
 | |
| 		long l = Long.MAX_VALUE;
 | |
| 		long m = Long.MIN_VALUE;
 | |
| 		long n = 0L;
 | |
| 
 | |
| 		for (int i = 0; i < this.count; i++) {
 | |
| 			long o = this.values[i];
 | |
| 			n += o;
 | |
| 			l = Math.min(l, o);
 | |
| 			m = Math.max(m, o);
 | |
| 		}
 | |
| 
 | |
| 		if (this.count > 2) {
 | |
| 			n -= l + m;
 | |
| 			return n / (this.count - 2);
 | |
| 		} else {
 | |
| 			return n > 0L ? this.count / n : 0L;
 | |
| 		}
 | |
| 	}
 | |
| }
 |