/* Copyright 2009-2016 David Hadka * * This file is part of the MOEA Framework. * * The MOEA Framework is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * The MOEA Framework 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the MOEA Framework. If not, see <http://www.gnu.org/licenses/>. */ package org.moeaframework.util.tree; /** * The node for truncating, or bounding, a number within a range. If the * number is outside the defined range, the number is set to the nearest number * within the range. The inputs and * outputs to this node are shown below: * * <table border="1" cellpadding="3" cellspacing="0"> * <tr class="TableHeadingColor"> * <th width="25%" align="left">Name</th> * <th width="25%" align="left">Type</th> * <th width="50%" align="left">Description</th> * </tr> * <tr> * <td>Argument 1</td> * <td>Number</td> * <td>The first number</td> * </tr> * <tr> * <td>Return Value</td> * <td>Number</td> * <td>The value of the number truncated to reside within a given range</td> * </tr> * </table> */ public class Truncate extends Node { /** * The minimum value in the range. */ private final double min; /** * The maximum value in the range. */ private final double max; /** * Constructs a new node for truncating a number within a range. * * @param min the minimum value in the range * @param max the maximum value in the range */ public Truncate(double min, double max) { super(Number.class, Number.class); this.min = min; this.max = max; } @Override public Truncate copyNode() { return new Truncate(min, max); } @Override public Number evaluate(Environment environment) { Number value = (Number)getArgument(0).evaluate(environment); if (NumberArithmetic.lessThan(value, min)) { return min; } else if (NumberArithmetic.greaterThan(value, max)) { return max; } else { return value; } } }