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);
      }
   }
}