/* * A base class for monotonic function property constraints. * * Copyright (c) 1998-2009 The Regents of the University of California. All * rights reserved. Permission is hereby granted, without written agreement and * without license or royalty fees, to use, copy, modify, and distribute this * software and its documentation for any purpose, provided that the above * copyright notice and the following two paragraphs appear in all copies of * this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN * "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * PT_COPYRIGHT_VERSION_2 COPYRIGHTENDKEY */ package ptolemy.data.properties.lattice; import java.util.ArrayList; import java.util.List; import ptolemy.graph.InequalityTerm; ////////////////////////////////////////////////////////////////////////// //// MonotonicFunction /** * Monotonic functions are often used as part of the declaration of property * constraints. This base class makes it easy to do so. It is simply necessary * to implement the _getDependentTerms abstract methods. * * @author Man-Kit Leung * @version $Id$ * @since Ptolemy II 7.1 * @Pt.ProposedRating Red (mankit) * @Pt.AcceptedRating Red (mankit) */ public abstract class MonotonicFunction extends ptolemy.data.type.MonotonicFunction implements PropertyTerm { /////////////////////////////////////////////////////////////////// //// public methods //// /** * Return the type variables in this inequality term. Derived classes should * implement this method to return an array of InequalityTerms that this * function depends on. * @return An array of InequalityTerm. */ public final InequalityTerm[] getVariables() { List<InequalityTerm> terms = new ArrayList<InequalityTerm>(); for (InequalityTerm term : _getDependentTerms()) { if (term.isSettable()) { terms.add(term); } } InequalityTerm[] array = new InequalityTerm[terms.size()]; System.arraycopy(terms.toArray(), 0, array, 0, terms.size()); return array; } /** * Return an array of constants contained in this term. If this term is a * variable, return an array of size zero; if this term is a constant, * return an array of size one that contains this constants; if this term is * a function, return an array containing all the constants in the function. * @return An array of InequalityTerms */ public final InequalityTerm[] getConstants() { List<InequalityTerm> terms = new ArrayList<InequalityTerm>(); for (InequalityTerm term : _getDependentTerms()) { if (!term.isSettable()) { terms.add(term); } } InequalityTerm[] array = new InequalityTerm[terms.size()]; System.arraycopy(terms.toArray(), 0, array, 0, terms.size()); return array; } /////////////////////////////////////////////////////////////////// //// protected methods //// /** * Return an array of terms depended by this monotonic function. * @return an array of terms depended by this monotonic function. */ protected abstract InequalityTerm[] _getDependentTerms(); }