view src/uk/ac/qmul/eecs/depic/patterns/Range.java @ 4:473da40f3d39 tip

added html formatting to Daw/package-info.java
author Fiore Martin <f.martin@qmul.ac.uk>
date Thu, 25 Feb 2016 17:50:09 +0000
parents 629262395647
children
line wrap: on
line source
/*  
 Cross-Modal DAW Prototype - Prototype of a simple Cross-Modal Digital Audio Workstation.

 Copyright (C) 2015  Queen Mary University of London (http://depic.eecs.qmul.ac.uk/)
	
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package uk.ac.qmul.eecs.depic.patterns;

/**
 * 
 * Immutable class containing two comparable number which represent the start and the end of a range.
 *  
 *
 * @param <T> 
 */
 public class Range<T extends Number & Comparable<T> > {	
		protected T start;
		protected T end;
		
		public Range(T t1, T t2){
			if(t1.compareTo(t2) < 1){
				start = t1;
				end = t2;
			}else{
				start = t2;
				end = t1;
			}
		}
		
		/**
		 * Creates a new instance by comparing {@code mm1} and {@code mm2}.
		 * 
		 * The minimum of this object will be the minimum value between {@code mm1.getMin()} and {@code mm2.getMin()}.
		 * The maximum of this object will be the maximum value between {@code mm1.getMax()} and {@code mm2.getMax()}.
		 *  
		 * @param r1 the former Range whose min and max are to be compared
		 * @param r2 the latter Range whose min and max are to be compared
		 */
		public Range(Range<T> r1, Range<T> r2){
			if(r1.getStart().compareTo(r2.getStart()) < 0){ // if the minimum of mm1 is less than the minimum of mm2
				start = r1.getStart();						  //   then min is the minimum of mm1
			}else{										  // else
				start = r2.getStart();						  //   min is the minimum of mm2
			}
			
			if(r1.getEnd().compareTo(r2.getEnd()) > 0){ // if the maximum of mm1 is greater than the maximum of mm2
				end = r1.getEnd();						  //   then max is the maximum of mm1
			}else{										  // else
				end = r2.getEnd();						  //   max is the maximum of mm2
			}
		}
		
		protected Range(){
			// empty range 
		}
		
		public T getStart() {
			return start;
		}
		public T getEnd() {
			return end;
		}
		
		public float lenght(){
			return getEnd().floatValue() - getStart().floatValue();
		}
		
		@Override
		public String toString(){
			return "Range ["+ getStart()+","+getEnd()+"]";
		}
		
		public static final Range<Float> NORMALIZED_RANGE_F = new Range<>(0.0f,1.0f);
		public static final Range<Double> NORMALIZED_RANGE_D = new Range<>(0.0,1.0);
	}