/*
Copyright 2006 by Sean Luke and George Mason University
Licensed under the Academic Free License version 3.0
See the file "LICENSE" for more information
*/
package ec.rule;
import ec.*;
import ec.util.*;
/*
* RuleConstraints.java
*
* Created: Tue Feb 20 13:16:00 2001
* By: Liviu Panait and Sean Luke
*/
/**
* RuleConstraints is a class for constraints applicable to rules.
* You can subclass this to add additional constraints information
* for different kinds of rules.
*
* @author Liviu Panait and Sean Luke
* @version 1.0
Parameters
base.size
int >= 1 |
(number of rule constraints) |
base.n.name
String |
(name of rule constraint n) |
*/
public class RuleConstraints implements Clique
{
// public static final int SIZE_OF_BYTE = 256;
public final static String P_NAME = "name";
// public final static String P_SIZE = "size";
/** The byte value of the constraints -- we can only have 256 of them */
public byte constraintNumber;
/** The name of the RuleConstraints object */
public String name;
/** Converting the rule to a string ( the name ) */
public String toString() { return name; }
public void setup(final EvolutionState state, final Parameter base)
{
// What's my name?
name = state.parameters.getString(base.push(P_NAME),null);
if (name==null)
state.output.fatal("No name was given for this Rule Constraints.",
base.push(P_NAME));
// Register me
RuleConstraints old_constraints = (RuleConstraints)(((RuleInitializer)state.initializer).ruleConstraintRepository.put(name,this));
if (old_constraints != null)
state.output.fatal("The rule constraints \"" + name + "\" has been defined multiple times.", base.push(P_NAME));
}
/** You must guarantee that after calling constraintsFor(...) one or
several times, you call state.output.exitIfErrors() once. */
public static RuleConstraints constraintsFor(final String constraintsName,
final EvolutionState state)
{
RuleConstraints myConstraints = (RuleConstraints)(((RuleInitializer)state.initializer).ruleConstraintRepository.get(constraintsName));
if (myConstraints==null)
state.output.error("The rule constraints \"" + constraintsName + "\" could not be found.");
return myConstraints;
}
}