HistoricMetric class
Пакет: com.hypixel.hytale.metrics.metric
Файл: com/hypixel/hytale/metrics/metric/HistoricMetric.java
Поля (56)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HistoricMetric[] |
EMPTY_ARRAY |
|
|
break |
|
|
break |
|
private final long |
minimumInterval |
|
private final LongList |
periods |
|
long[] |
var10 |
|
int |
var11 |
|
int |
var12 |
|
long |
var13 |
|
long |
var13 |
|
long |
var14 |
|
long |
var14 |
|
long |
var14 |
|
AverageCollector |
var16 |
|
int |
var17 |
|
|
var17 |
|
long |
var18 |
|
int |
var2 |
|
int |
var2 |
|
int |
var2 |
|
int |
var2 |
|
int |
var2 |
|
long[] |
var3 |
|
long[] |
var3 |
|
long[] |
var3 |
|
long[] |
var3 |
|
int |
var3 |
|
int |
var4 |
|
int |
var4 |
|
int |
var4 |
|
int |
var4 |
|
long |
var4 |
|
long |
var4 |
|
int |
var5 |
|
int |
var5 |
|
long[] |
var5 |
|
int |
var5 |
|
int |
var5 |
|
long |
var6 |
|
|
var6 |
|
|
var6 |
|
|
var6 |
|
long |
var6 |
|
|
var6 |
|
|
var6 |
|
|
var6 |
|
AverageCollector[] |
var6 |
|
long[] |
var6 |
|
long[] |
var6 |
|
int[] |
var7 |
|
int |
var8 |
|
long |
var9 |
|
|
var9 |
|
long |
var9 |
|
long |
var9 |
|
long[] |
var9 |
Методы (47)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
private |
Builderprivate Builder(long var1, @Nonnull TimeUnit var3) |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Period's must be increasing in length") |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Not supported") |
public |
void |
addvoid add(long var1, long var3) |
|
public HistoricMetric.Builder |
addPeriodpublic HistoricMetric.Builder addPeriod(long var1, @Nonnull TimeUnit var3) |
|
public HistoricMetric |
buildpublic HistoricMetric build() |
public |
long |
calculateMaxlong calculateMax(int var1) |
public |
long |
calculateMinlong calculateMin(int var1) |
public |
void |
clearvoid clear() |
|
|
for for(int var2 = 0; var2 < this.periodAverages.length; var2++) |
|
|
for for(long var7 : this.periodsNanos) |
|
|
for for(int var8 = var4; var8 < var5; var8++) |
|
|
for for(int var11 = var4; var11 < var2; var11++) |
|
|
for for(int var12 = 0; var12 < var5; var12++) |
|
|
for for(int var8 = var4; var8 < var5; var8++) |
|
|
for for(int var11 = var4; var11 < var2; var11++) |
|
|
for for(int var12 = 0; var12 < var5; var12++) |
|
|
for for(AverageCollector var4 : this.periodAverages) |
|
|
for for(int var13 = 0; var13 < var12; var13++) |
|
|
for for(int var6 = var2 - 2; var6 >= 0; var6--) |
abstract |
|
for for(int var6 = 0; var6 < this.periods.size() |
public |
long[] |
getAllTimestampslong[] getAllTimestamps() |
public |
long[] |
getAllValueslong[] getAllValues() |
public |
double |
getAveragedouble getAverage(int var1) |
public |
long |
getLastValuelong getLastValue() |
public |
long[] |
getPeriodsNanoslong[] getPeriodsNanos() |
public |
long[] |
getTimestampslong[] getTimestamps(int var1) |
public |
long[] |
getValueslong[] getValues(int var1) |
|
|
if if(var7 > var9) |
|
|
if if(var4 < var5) |
|
|
if if(var9 < var6) |
|
|
if if(var13 < var6) |
|
|
if if(var14 < var6) |
|
|
if if(var4 < var5) |
|
|
if if(var9 > var6) |
|
|
if if(var13 > var6) |
|
|
if if(var14 > var6) |
|
|
if if(var17 == var11) |
|
|
if if(var2 < var4) |
|
|
if if(var2 < var4) |
|
|
if if(var4 - var1[var6] >= this.periodsNanos[var3]) |
|
|
if if(++var3 >= this.periodsNanos.length) |
|
|
if if(var3 < this.periodsNanos.length) |
public |
void |
setAllTimestampsvoid setAllTimestamps(@Nonnull long[] var1) |
public |
void |
setAllValuesvoid setAllValues(@Nonnull long[] var1) |
|
|
while while(var9[var17] < var14) |
|
|
while while(var3 < this.periodsNanos.length) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.metrics.metric;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import it.unimi.dsi.fastutil.longs.LongArrayList;
class="kw">import it.unimi.dsi.fastutil.longs.LongList;
class="kw">import java.util.Arrays;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import javax.annotation.Nonnull;
class="kw">public class HistoricMetric {
class="kw">public class="kw">static class="kw">final HistoricMetric[] EMPTY_ARRAY = new HistoricMetric[0];
class="kw">public class="kw">static class="kw">final Codec<HistoricMetric> METRICS_CODEC = BuilderCodec.builder(HistoricMetric.class, HistoricMetric::new)
.append(new KeyedCodec<>("PeriodsNanos", Codec.LONG_ARRAY), (var0, var1) -> {
throw new UnsupportedOperationException("Not supported");
}, var0 -> var0.periodsNanos)
.add()
.append(new KeyedCodec<>("Timestamps", Codec.LONG_ARRAY), (var0, var1) -> {
throw new UnsupportedOperationException("Not supported");
}, HistoricMetric::getAllTimestamps)
.add()
.append(new KeyedCodec<>("Values", Codec.LONG_ARRAY), (var0, var1) -> {
throw new UnsupportedOperationException("Not supported");
}, HistoricMetric::getAllValues)
.add()
.build();
class="kw">private class="kw">final long[] periodsNanos;
@Nonnull
class="kw">private class="kw">final AverageCollector[] periodAverages;
@Nonnull
class="kw">private class="kw">final int[] startIndices;
class="kw">private class="kw">final int bufferSize;
@Nonnull
class="kw">private class="kw">final long[] timestamps;
@Nonnull
class="kw">private class="kw">final long[] values;
int nextIndex;
class="kw">private HistoricMetric() {
throw new UnsupportedOperationException("Not supported");
}
class="kw">private HistoricMetric(@Nonnull HistoricMetric.Builder var1) {
this.periodsNanos = var1.periods.toLongArray();
this.periodAverages = new AverageCollector[this.periodsNanos.length];
for (int var2 = 0; var2 < this.periodAverages.length; var2++) {
this.periodAverages[var2] = new AverageCollector();
}
this.startIndices = new int[this.periodsNanos.length];
long var9 = 0L;
for (long var7 : this.periodsNanos) {
if (var7 > var9) {
var9 = var7;
}
}
this.bufferSize = (int)MathUtil.fastCeil((double)var9 / var1.minimumInterval);
this.timestamps = new long[this.bufferSize];
this.values = new long[this.bufferSize];
Arrays.fill(this.timestamps, Long.MAX_VALUE);
}
class="kw">public long[] getPeriodsNanos() {
class="kw">return this.periodsNanos;
}
class="kw">public long calculateMin(int var1) {
int var2 = this.bufferSize;
long[] var3 = this.values;
int var4 = this.startIndices[var1];
int var5 = this.nextIndex;
long var6 = Long.MAX_VALUE;
if (var4 < var5) {
for (int var8 = var4; var8 < var5; var8++) {
long var9 = var3[var8];
if (var9 < var6) {
var6 = var9;
}
}
} else {
for (int var11 = var4; var11 < var2; var11++) {
long var13 = var3[var11];
if (var13 < var6) {
var6 = var13;
}
}
for (int var12 = 0; var12 < var5; var12++) {
long var14 = var3[var12];
if (var14 < var6) {
var6 = var14;
}
}
}
class="kw">return var6;
}
class="kw">public double getAverage(int var1) {
class="kw">return this.periodAverages[var1].get();
}
class="kw">public long calculateMax(int var1) {
int var2 = this.bufferSize;
long[] var3 = this.values;
int var4 = this.startIndices[var1];
int var5 = this.nextIndex;
long var6 = Long.MIN_VALUE;
if (var4 < var5) {
for (int var8 = var4; var8 < var5; var8++) {
long var9 = var3[var8];
if (var9 > var6) {
var6 = var9;
}
}
} else {
for (int var11 = var4; var11 < var2; var11++) {
long var13 = var3[var11];
if (var13 > var6) {
var6 = var13;
}
}
for (int var12 = 0; var12 < var5; var12++) {
long var14 = var3[var12];
if (var14 > var6) {
var6 = var14;
}
}
}
class="kw">return var6;
}
class="kw">public void clear() {
for (AverageCollector var4 : this.periodAverages) {
var4.clear();
}
Arrays.fill(this.startIndices, 0);
Arrays.fill(this.timestamps, Long.MAX_VALUE);
Arrays.fill(this.values, 0L);
this.nextIndex = 0;
}
class="kw">public void add(long var1, long var3) {
long[] var5 = this.periodsNanos;
AverageCollector[] var6 = this.periodAverages;
int[] var7 = this.startIndices;
int var8 = this.bufferSize;
long[] var9 = this.timestamps;
long[] var10 = this.values;
int var11 = this.nextIndex;
int var12 = var5.length;
for (int var13 = 0; var13 < var12; var13++) {
long var14 = var1 - var5[var13];
AverageCollector var16 = var6[var13];
int var17 = var7[var13];
while (var9[var17] < var14) {
long var18 = var10[var17];
var16.remove(var18);
var17 = (var17 + 1) % var8;
if (var17 == var11) {
break;
}
}
var7[var13] = var17;
var16.add(var3);
}
var9[var11] = var1;
var10[var11] = var3;
this.nextIndex = (var11 + 1) % var8;
}
class="kw">public long[] getTimestamps(int var1) {
int var2 = this.startIndices[var1];
long[] var3 = this.timestamps;
int var4 = this.nextIndex;
if (var2 < var4) {
class="kw">return Arrays.copyOfRange(var3, var2, var4);
}
int var5 = var3.length - var2;
long[] var6 = new long[var5 + var4];
System.arraycopy(var3, var2, var6, 0, var5);
System.arraycopy(var3, 0, var6, var5, var4);
class="kw">return var6;
}
class="kw">public long[] getValues(int var1) {
int var2 = this.startIndices[var1];
long[] var3 = this.values;
int var4 = this.nextIndex;
if (var2 < var4) {
class="kw">return Arrays.copyOfRange(var3, var2, var4);
}
int var5 = this.bufferSize - var2;
long[] var6 = new long[var5 + var4];
System.arraycopy(var3, var2, var6, 0, var5);
System.arraycopy(var3, 0, var6, var5, var4);
class="kw">return var6;
}
class="kw">public long[] getAllTimestamps() {
class="kw">return this.getTimestamps(this.periodsNanos.length - 1);
}
class="kw">public long[] getAllValues() {
class="kw">return this.getValues(this.periodsNanos.length - 1);
}
class="kw">public void setAllTimestamps(@Nonnull long[] var1) {
int var2 = var1.length;
System.arraycopy(var1, 0, this.timestamps, 0, var2);
int var3 = 0;
long var4 = var1[var2 - 1];
for (int var6 = var2 - 2; var6 >= 0; var6--) {
if (var4 - var1[var6] >= this.periodsNanos[var3]) {
this.startIndices[var3] = var6 + 1;
if (++var3 >= this.periodsNanos.length) {
break;
}
}
}
if (var3 < this.periodsNanos.length) {
while (var3 < this.periodsNanos.length) {
this.periodsNanos[var3] = 0L;
var3++;
}
}
this.nextIndex = var2;
}
class="kw">public void setAllValues(@Nonnull long[] var1) {
System.arraycopy(var1, 0, this.values, 0, var1.length);
}
class="kw">public long getLastValue() {
class="kw">return this.nextIndex == 0 ? this.values[this.bufferSize - 1] : this.values[this.nextIndex - 1];
}
@Nonnull
class="kw">public class="kw">static HistoricMetric.Builder builder(long var0, @Nonnull TimeUnit var2) {
class="kw">return new HistoricMetric.Builder(var0, var2);
}
class="kw">public class="kw">static class Builder {
class="kw">private class="kw">final long minimumInterval;
class="kw">private class="kw">final LongList periods = new LongArrayList();
class="kw">private Builder(long var1, @Nonnull TimeUnit var3) {
this.minimumInterval = var3.toNanos(var1);
}
@Nonnull
class="kw">public HistoricMetric.Builder addPeriod(long var1, @Nonnull TimeUnit var3) {
long var4 = var3.toNanos(var1);
for (int var6 = 0; var6 < this.periods.size(); var6++) {
if (this.periods.getLong(var6) > var4) {
throw new IllegalArgumentException("Period's must be increasing in length");
}
}
this.periods.add(var4);
class="kw">return this;
}
@Nonnull
class="kw">public HistoricMetric build() {
class="kw">return new HistoricMetric(this);
}
}
}