package com.jivesoftware.os.amza.ui.utils;
/**
*
* @author jonathan.colt
*/
public class MinMaxLong {
/**
*
*/
public long min = Long.MAX_VALUE;
/**
*
*/
public long max = Long.MIN_VALUE;
/**
*
*/
public int minIndex = -1;
/**
*
*/
public int maxIndex = -1;
private float sum = 0;
private int count = 0;
/**
*
*/
public MinMaxLong() {
}
/**
*
* @param _min
* @param _max
*/
public MinMaxLong(long _min, long _max) {
min = _min;
max = _max;
count = 2;
}
/**
*
* @param _value
* @return
*/
public double std(long _value) {
double mean = Math.pow(mean(), 2);
double value = Math.pow((long) _value, 2);
double variation = Math.max(mean, value) - Math.min(mean, value);
return Math.sqrt(variation);
}
/**
*
* @param _p
* @return
*/
public boolean inclusivelyContained(long _p) {
if (_p < min) {
return false;
}
return _p <= max;
}
/**
*
* @return
*/
public long min() {
return min;
}
/**
*
* @return
*/
public long max() {
return max;
}
/**
*
* @param _long
* @return
*/
public long value(long _long) {
sum += _long;
if (_long > max) {
max = _long;
maxIndex = count;
}
if (_long < min) {
min = _long;
minIndex = count;
}
count++;
return _long;
}
/**
*
*/
public void reset() {
min = Long.MAX_VALUE;
max = Long.MIN_VALUE;
minIndex = -1;
maxIndex = -1;
sum = 0;
count = 0;
}
/**
*
* @return
*/
public long samples() {
return count;
}
/**
*
* @return
*/
public double mean() {
return sum / (double) count;
}
/**
*
* @return
*/
public long range() {
return max - min;
}
/**
*
* @return
*/
public long middle() {
return min + ((max - min) / 2);
}
/**
*
* @param _v
* @param _inclusive
* @return
*/
public boolean isBetween(long _v, boolean _inclusive) {
if (_inclusive) {
return _v <= max && _v >= min;
} else {
return _v < max && _v > min;
}
}
/**
*
* @param _long
* @return
*/
public double negativeOneToOne(long _long) {
return (zeroToOne(_long) - 0.5) * 2.0;
}
/**
*
* @param _long
* @return
*/
public double zeroToOne(long _long) {
return zeroToOne(min, max, _long);
}
/**
*
* @param _min
* @param _max
* @param _long
* @return
*/
public static double zeroToOne(long _min, long _max, long _long) {
return (double) (_long - _min) / (double) (_max - _min);
}
/**
*
* @param _long
* @return
*/
public long unzeroToOne(long _long) {
return unzeroToOne(min, max, _long);
}
/**
*
* @param _min
* @param _max
* @param _long
* @return
*/
public static long unzeroToOne(long _min, long _max, long _long) {
return ((_max - _min) * _long) + _min;
}
@Override
public String toString() {
return "Min:" + min + " Max:" + max;
}
}