package others;
public class Range<T extends Comparable<T>>{
private T min;
private T max;
public Range(T arg1,T arg2){
min = arg1;
max = arg2;
check();
}
public T min(){
return min;
}
public T max(){
return max;
}
public void setMax(T arg_value){
max = arg_value;
check();
}
public void setMin(T arg_value){
min = arg_value;
check();
}
public boolean include(T arg_value){
return min.compareTo(arg_value)<=0&&max.compareTo(arg_value)>0;
}
public boolean include(Range<T> arg_another){
return min.compareTo(arg_another.min())<=0&&max.compareTo(arg_another.max())>=0;
}
public Range<T> and(Range<T> another){
T m_min = min.compareTo(another.min())<0 ? another.min() : min;
T m_max = max.compareTo(another.max())>0 ? another.max() : max;
if(m_max.compareTo(m_min)<0){m_min = m_max = null;}
return new Range<T>(m_min,m_max);
}
private void check(){
if(min.compareTo(max)>0){
T temp = max;
max = min;
min = temp;
}
}
}