001 package net.sf.cpsolver.ifs.model;
002
003 /**
004 * Binary constraint.
005 * <br><br>
006 * Extension of {@link Constraint} that links exactly two variables.
007 *
008 * @see Variable
009 * @see Constraint
010 * @see Model
011 *
012 * @version
013 * IFS 1.1 (Iterative Forward Search)<br>
014 * Copyright (C) 2006 Tomáš Müller<br>
015 * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
016 * Lazenska 391, 76314 Zlin, Czech Republic<br>
017 * <br>
018 * This library is free software; you can redistribute it and/or
019 * modify it under the terms of the GNU Lesser General Public
020 * License as published by the Free Software Foundation; either
021 * version 2.1 of the License, or (at your option) any later version.
022 * <br><br>
023 * This library is distributed in the hope that it will be useful,
024 * but WITHOUT ANY WARRANTY; without even the implied warranty of
025 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
026 * Lesser General Public License for more details.
027 * <br><br>
028 * You should have received a copy of the GNU Lesser General Public
029 * License along with this library; if not, write to the Free Software
030 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
031 */
032
033 public abstract class BinaryConstraint extends Constraint {
034 private Variable iFirst = null, iSecond = null;
035 public BinaryConstraint() {
036 super();
037 }
038
039 public void addVariable(Variable var) {
040 if (iFirst == null)
041 iFirst = (Variable)var;
042 else
043 iSecond = (Variable)var;
044 super.addVariable(var);
045 }
046
047 /** First variable */
048 public Variable first() {
049 return iFirst;
050 }
051
052 /** Second variable */
053 public Variable second() {
054 return iSecond;
055 }
056
057 /** True, id the given variable is the first one */
058 public boolean isFirst(Variable variable) {
059 return variable.equals(first());
060 }
061
062 /** Returns the variable out of the constraints variables which is different from the given variable.*/
063 public Variable another(Variable variable) {
064 return (
065 first() != null && variable.equals(first()) ? second() : first());
066 }
067 }