/*
* Datei: MutationSEQ.java
* Autor(en): Lukas K�nig
* Java-Version: 6.0
* Erstellt (vor): 12.03.2009
*
* (c) Lukas K�nig, die Datei unterliegt der LGPL
* -> http://www.gnu.de/lgpl-ger.html
*/
package fmg.fmg8.endlAutomat.mutation;
import java.util.LinkedList;
import fmg.fmg8.endlAutomat.conditions.Condition;
import fmg.fmg8.endlAutomat.conditions.mutation.CondMutVerfahren;
import fmg.fmg8.endlAutomat.mutation.mutSeq.MutSeqVerf;
import fmg.fmg8.umgebung2D.Roboter;
/**
* Implementiert eine Mutation, die Code-Sequenzen aus Integer-Zahlern
* mutiert. Welche Mutation dabei zugrundegelegt wird, h�ngt von der
* �bergebenen Implementierung des Interfaces mutationSeq.MutationsVerfahren
* ab.
*
* @author Lukas K�nig
*/
public class MutationSEQ implements CondMutVerfahren {
/**
* Das Mutationsverfahren.
*/
private MutSeqVerf mut;
/**
* Ob das Verhalten mutiert werden soll.
*/
private boolean mutVerh;
/**
* Ob der Translator mutiert werden soll.
*/
private boolean mutTrans;
/**
* @param mutSeq Das Mutationsverfahren f�r Sequenzen.
* @param verh Ob das Verhalten durch diese Mutation mutiert werden
* soll.
* @param trans Ob der �bersetzer durch diese Mutation mutiert werden
* soll.
*/
public MutationSEQ(
final MutSeqVerf mutSeq,
final boolean verh,
final boolean trans) {
super();
this.mut = mutSeq;
this.mutVerh = verh;
this.mutTrans = trans;
}
/**
* Mutiert, je nach gesetztem Flag, den aktiven Automaten des �bergebenen
* Roboters und / oder seinen aktiven Translator.
*
* @param rob Der zu mutierende Roboter.
*
* @return Der mutierte Roboter.
*/
@Override
public boolean mutiere(final Roboter rob) {
Roboter rob2;
LinkedList<Integer> verhSeq;
LinkedList<Integer> tranSeq;
if (!rob.getClass().equals(Roboter.class)) {
throw new RuntimeException(
"F�r 'MutationSEQ' ist eine Instanz der Klasse Roboter"
+ " erforderlich. Gefunden wurde: " + rob.getClass());
}
rob2 = (Roboter) rob;
if (this.mutVerh && rob2.isMutV()) {
verhSeq = this.mut.mutiere(
rob2.getVerhCodes()[rob2.getAktAutNum()]);
rob2.setAktVCode(verhSeq);
}
if (this.mutTrans && rob2.isMutT()) {
tranSeq = this.mut.mutiere(
rob2.getTransCodes()[rob2.getAktAutNum()]);
rob2.setAktTCode(tranSeq);
}
return (rob2.isMutV() || rob2.isMutT());
}
/**
* Mutiert eine Bedingung. Zurzeit NICHT implementiert.
*
* @param cond Die zu mutierende Bedingung.
*
* @return Die mutierte Bedingung.
*/
@Override
public Condition mutiere(final Condition cond) {
return cond;
}
}