Constraint.java
/* Copyright 2015 Laurent COCAULT
* Licensed to Laurent COCAULT under one or more contributor license agreements.
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership. Laurent COCAULT licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not use this
* file except in compliance with the License. You may obtain a copy of the
* License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.csp.constraint.model;
/**
* Represents a constraint of a constraint solving problem.
*/
public abstract class Constraint<T> {
/** Name of the constraint. */
private String name_;
/** Enable the constraint to propagate. */
private boolean enablePropagate_;
/**
* Constructor.
* @param name
* Name of the constraint
*/
public Constraint(final String name) {
name_ = name;
}
/**
* Enable or disable the constraint propagation.
* @param enable
* True if the constraint propagation is enabled, false otherwise
*/
public void enablePropagate(final boolean enable) {
enablePropagate_ = enable;
}
/**
* Get the name of the constraint.
* @return The name of the constraint
*/
public String getName() {
return name_;
}
/**
* Tests if the constraint is binary.
* @return True if the constraint is a binary constraint
*/
public abstract boolean isBinary();
/**
* Tell if the propagation of the constraint is enabled.
* @return True if the constraint propagation is enabled
*/
public boolean isPropagationEnabled() {
return enablePropagate_;
}
/**
* Tests if the constraint is ternary.
* @return True if the constraint is a ternary constraint
*/
public abstract boolean isTernary();
/**
* Tests if the constraint is unary.
* @return True if the constraint is an unary constraint
*/
public abstract boolean isUnary();
/**
* Tests if the constraint is unsized.
* @return True if the constraint is an unsized N-ary constraint
*/
public abstract boolean isUnsized();
/**
* Indicates if the given variable is referenced by the constraint, ie if
* the constraint may reduce it.
* @param variable
* Variable whose reference is checked
* @return True if the variable is referenced by the constraint
*/
abstract boolean isVariableReferenced(Variable<T> variable);
/**
* Propagate the constraint (reduce the domain of each variable associated
* with the constraint).
*/
public abstract void propagate();
/**
* Revise the constraint consistency.
* @return True if the constraint is consistent (the domain of each variable
* associated with the constraint is not empty)
*/
public abstract boolean revise();
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return name_;
}
};