⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 average.java

📁 java 文件下载器。可自定义
💻 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 + -