001    package net.sf.cpsolver.ifs.model;
002    
003    import java.util.*;
004    
005    /**
006     * IFS constraint listener.
007     *
008     * @see Constraint
009     *
010     * @version
011     * IFS 1.1 (Iterative Forward Search)<br>
012     * Copyright (C) 2006 Tomáš Müller<br>
013     * <a href="mailto:muller@unitime.org">muller@unitime.org</a><br>
014     * Lazenska 391, 76314 Zlin, Czech Republic<br>
015     * <br>
016     * This library is free software; you can redistribute it and/or
017     * modify it under the terms of the GNU Lesser General Public
018     * License as published by the Free Software Foundation; either
019     * version 2.1 of the License, or (at your option) any later version.
020     * <br><br>
021     * This library is distributed in the hope that it will be useful,
022     * but WITHOUT ANY WARRANTY; without even the implied warranty of
023     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
024     * Lesser General Public License for more details.
025     * <br><br>
026     * You should have received a copy of the GNU Lesser General Public
027     * License along with this library; if not, write to the Free Software
028     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
029     */
030    public interface ConstraintListener {
031        /** Called by the constraint, before a value is assigned to its variable.
032         * @param iteration current iteration
033         * @param constraint source constraint
034         * @param assigned value which will be assigned to its variable ({@link Value#variable()})
035         * @param unassigned set of conflicting values which will be unassigned by the constraint before it assigns the given value
036         */
037        public void constraintBeforeAssigned(long iteration, Constraint constraint, Value assigned, Set unassigned);
038    
039        /** Called by the constraint, after a value is assigned to its variable.
040         * @param iteration current iteration
041         * @param constraint source constraint
042         * @param assigned value which was assigned to its variable ({@link Value#variable()})
043         * @param unassigned set of conflicting values which were unassigned by the constraint before it assigned the given value
044         */
045        public void constraintAfterAssigned(long iteration, Constraint constraint, Value assigned, Set unassigned);
046    }