📄 average.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: Average.java
package org.gudy.azureus2.core3.util;
// Referenced classes of package org.gudy.azureus2.core3.util:
// DisplayFormatters, SystemTime
public class Average
{
private int refreshRate;
private int period;
private int nbElements;
private long lastUpdate;
private long values[];
protected Average(int _refreshRate, int _period)
{
refreshRate = _refreshRate;
period = _period;
nbElements = (_period * 1000) / _refreshRate + 2;
lastUpdate = getEffectiveTime() / (long)_refreshRate;
}
public static Average getInstance(int refreshRate, int period)
{
if (refreshRate < 100)
return null;
if (period * 1000 < refreshRate)
return null;
else
return new Average(refreshRate, period);
}
private synchronized void update(long timeFactor)
{
if (lastUpdate < timeFactor - (long)nbElements)
lastUpdate = timeFactor - (long)nbElements - 1L;
if (values != null)
{
for (long i = lastUpdate + 1L; i <= timeFactor; i++)
values[(int)(i % (long)nbElements)] = 0L;
values[(int)((timeFactor + 1L) % (long)nbElements)] = 0L;
}
lastUpdate = timeFactor;
}
public void addValue(long value)
{
if (values == null && value != 0L)
values = new long[nbElements];
if (values != null)
{
long timeFactor = getEffectiveTime() / (long)refreshRate;
update(timeFactor);
values[(int)(timeFactor % (long)nbElements)] += value;
}
}
public long getAverage()
{
return getSum() / (long)period;
}
public double getDoubleAverage()
{
return (double)getSum() / (double)period;
}
public String getDoubleAverageAsString(int precision)
{
return DisplayFormatters.formatDecimal(getDoubleAverage(), precision);
}
public long getAverage(int average_period)
{
int slots = average_period > 0 ? average_period / refreshRate : nbElements - 2;
if (slots <= 0)
slots = 1;
else
if (slots > nbElements - 2)
slots = nbElements - 2;
if (slots == 1)
{
return getPointValue();
} else
{
long res = getSum(slots) / (long)((period * slots) / (nbElements - 2));
return res;
}
}
public long getPointValue()
{
long timeFactor = getEffectiveTime() / (long)refreshRate;
update(timeFactor);
return values == null ? 0L : values[(int)((timeFactor - 1L) % (long)nbElements)];
}
protected final long getSum()
{
long sum = 0L;
if (values != null)
{
long timeFactor = getEffectiveTime() / (long)refreshRate;
update(timeFactor);
for (long i = timeFactor + 2L; i < timeFactor + (long)nbElements; i++)
sum += values[(int)(i % (long)nbElements)];
}
return sum;
}
protected final long getSum(int slots)
{
long timeFactor = getEffectiveTime() / (long)refreshRate;
update(timeFactor);
long sum = 0L;
if (slots < 1)
slots = 1;
else
if (slots > nbElements - 2)
slots = nbElements - 2;
long end_slot = timeFactor + (long)nbElements;
long start_slot = end_slot - (long)slots;
if (values != null)
{
for (long i = start_slot; i < end_slot; i++)
sum += values[(int)(i % (long)nbElements)];
}
return sum;
}
protected long getEffectiveTime()
{
return SystemTime.getMonotonousTime();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -