package org.dgpf.gp.netautomaton.expressions;
import org.dgpf.gp.automaton.base.Expression;
import org.dgpf.gp.automaton.search.ExpressionHandler;
import org.dgpf.gp.automaton.search.Mutator;
import org.dgpf.gp.automaton.search.ProgramContext;
import org.sfc.collections.Arrays;
import org.sfc.utils.Typesafe;
/**
* The handler for the can-send-message expression.
*
* @author Thomas Weise
*/
final class CanSendMessageHandler extends ExpressionHandler<Expression>
{
/**
* The default expression mutator.
*/
private static final Mutator<Expression, Expression> MUTATOR =
Typesafe.cast(Mutator.DEFAULT_MUTATOR);
/**
* The internally shared instance of this handler.
*/
static final ExpressionHandler<Expression> INSTANCE =
new CanSendMessageHandler();
/**
* Create a new has-word expression handler.
*/
private CanSendMessageHandler()
{
super( Arrays.create(MUTATOR), new double[] {1.0d});
}
/**
* Create a new, random instance of the genotype.
*
* @param p_context The program context to be used.
* @param p_decision <code>true</code> if and only if the expression
* required is a decisional expression.
* <code>false</code> if it is an arithmetical
* expression.
* @param p_memory_size The memory size currently available.
*
* @return The random genotype instance.
*/
@Override
protected final Expression create(final ProgramContext p_context,
final boolean p_decision,
final int p_memory_size)
{
return CanSendMessage.INSTANCE;
}
/**
* Checks wether this expression handler is able to produce decisional or
* non-decisional expressions.
*
* @param p_decision <code>true</code> if and only if the expressions
* required are a decisional expression.
* <code>false</code> if they are arithmetical
* expression.
*
* @return The newly created random genotype instance.
*/
@Override
public final boolean can_produce (final boolean p_decision)
{
return p_decision;
}
}