/*
* Range.java
*
* Created on May 17, 2002, 3:27 PM
*/
package hep.aida.ref.function;
/**
*
* Implementation of IRange.
*
* @author Tony Johnson, Victor Serbo, Max Turri
*
*/
public class Range implements hep.aida.ext.IRange {
private double upperBound = Double.POSITIVE_INFINITY;
private double lowerBound = Double.NEGATIVE_INFINITY;
private int rangeType;
/**
* Creates a new instance of Range.
*/
public Range() {
this(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, INCLUDE_BOUNDS );
}
/**
* Creates a new instance of Range with type INCLUDE_BOUNDS.
* @param lowerBound The lower bound.
* @param upperBound The upper bound.
*
*/
public Range( double lowerBound, double upperBound ) {
this( lowerBound, upperBound, INCLUDE_BOUNDS );
}
/**
* Creates a new instance of Range.
* @param lowerBound The lower bound.
* @param upperBound The upper bound.
* @param type The Range type.
*
*/
public Range( double lowerBound, double upperBound, int type ) {
this.lowerBound = lowerBound;
this.upperBound = upperBound;
setType( type );
}
/**
* Get the IRange type.
* @return The IRange type.
*
*/
public int type() {
return rangeType;
}
/**
* Set the IRange type.
* @param type The IRange type.
* @return <code>true</code> if the type was set succesfully
* <code>false</code> otherwise
*
*/
public boolean setType( int type ) {
this.rangeType = type;
return true;
/*
switch ( type ) {
case INCLUDE_BOUNDS :
if ( lowerBound != Double.NEGATIVE_INFINITY && upperBound != Double.POSITIVE_INFINITY ) {
rangeType = type;
return true;
}
break;
case INCLUDE_UPPER_BOUND :
if ( upperBound != Double.POSITIVE_INFINITY ) {
rangeType = type;
return true;
}
break;
case INCLUDE_LOWER_BOUND :
if ( lowerBound != Double.NEGATIVE_INFINITY ) {
rangeType = type;
return true;
}
break;
case EXCLUDE_BOUNDS :
rangeType = type;
return true;
default :
System.out.println("Unknown type "+type+" for a Range!!");
}
throw new RuntimeException("Could not set the range type");
// return false;
*/
}
/**
* Get the lower bound.
* @return The lower bound.
*
*/
public double lowerBound() {
return lowerBound;
}
/**
* Get the upper bound.
* @return The upper bound.
*
*/
public double upperBound() {
return upperBound;
}
/**
* Set the lower bound.
* @param lowerBound The lower bound.
* @return <code>true</code> if the lower bound was set succesfully
* <code>false</code> if lowerBound is greater than the upper bound.
*
*/
public boolean setLowerBound( double lowerBound ) {
if ( lowerBound < upperBound ) {
this.lowerBound = lowerBound;
return true;
}
return false;
}
/**
* Set the upper bound.
* @param upperBound The upper bound.
* @return <code>true</code> if the upper bound was set succesfully
* <code>false</code> if upperBound is smaller than the lower bound.
*
*/
public boolean setUpperBound( double upperBound ) {
if ( upperBound > lowerBound ) {
this.upperBound = upperBound;
return true;
}
return false;
}
/**
* Check if a value is within the IRange.
* @param value The value to check.
* @return <code>true</code> if the value is within the range.
* <code>false</code> otherwise.
*
*/
public boolean isInRange( double value ) {
if ( value < upperBound && value > lowerBound ) return true;
if( value > upperBound || value < lowerBound ) return false;
if ( value == upperBound )
if ( rangeType == INCLUDE_BOUNDS || rangeType == INCLUDE_UPPER_BOUND ) return true;
else
if ( rangeType == INCLUDE_BOUNDS || rangeType == INCLUDE_LOWER_BOUND ) return true;
return false;
}
}