package org.jactr.core.module.procedural.six.learning;
/*
* default logging
*/
import java.util.SortedMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jactr.core.module.procedural.IProceduralModule;
import org.jactr.core.module.procedural.five.learning.ICompilableBuffer;
import org.jactr.core.module.procedural.five.learning.ICompilableContext;
import org.jactr.core.module.procedural.five.learning.IProductionCompiler;
import org.jactr.core.production.IInstantiation;
import org.jactr.core.production.IProduction;
import org.jactr.core.production.action.AddAction;
import org.jactr.core.production.action.IAction;
import org.jactr.core.production.action.ModifyAction;
import org.jactr.core.production.action.RemoveAction;
import org.jactr.core.production.condition.IBufferCondition;
import org.jactr.core.production.condition.ICondition;
import org.jactr.core.production.condition.QueryCondition;
public class DefaultProductionCompiler6 implements IProductionCompiler
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(DefaultProductionCompiler6.class);
static private SortedMap<Integer, Evaluator> _evaluationTable;
private IInstantiation _lastInstantiation;
public IProduction productionFired(IInstantiation instantiation,
IProceduralModule proceduralModule)
{
if (_lastInstantiation != null)
{
}
_lastInstantiation = instantiation;
return null;
}
protected boolean canCompile(IProduction one, IProduction two,
ICompilableBuffer buffer)
{
String bufferName = buffer.getName();
boolean oneMatches = matches(one, bufferName);
boolean twoMatches = matches(two, bufferName);
boolean oneQueries = queries(one, bufferName);
boolean twoQueries = queries(two, bufferName);
boolean oneAdds = adds(one, bufferName);
boolean twoAdds = adds(two, bufferName);
boolean oneModifies = modifies(one, bufferName);
boolean twoModifies = modifies(two, bufferName);
boolean oneRemoves = removes(one, bufferName);
boolean twoRemoves = removes(two, bufferName);
ICompilableContext context = buffer.getCompilableContext();
boolean isImmediate = context.isImmediate();
boolean canCompileOut = context.canCompileOut();
boolean isJammable = context.isJammable();
boolean rtn = false;
/*
* goal/imaginal buffer..
*/
if (isImmediate)
{
}
if (LOGGER.isDebugEnabled())
{
LOGGER.debug(one + " and " + two + " can" + (rtn ? "" : "'t")
+ " be compiled on " + bufferName);
LOGGER.debug(bufferName + " isImmediate=" + isImmediate + " isJammable="
+ isJammable + " compiledOut=" + canCompileOut);
LOGGER.debug(one + " (" + (oneQueries ? "?" : "")
+ (oneMatches ? "=" : "") + ")->(" + (oneAdds ? "+" : "")
+ (oneModifies ? "=" : "") + (oneRemoves ? "-" : ""));
LOGGER.debug(two + " (" + (twoQueries ? "?" : "")
+ (twoMatches ? "=" : "") + ")->(" + (twoAdds ? "+" : "")
+ (twoModifies ? "=" : "") + (twoRemoves ? "-" : ""));
}
return rtn;
}
protected boolean queries(IProduction production, String bufferName)
{
for (ICondition condition : production.getSymbolicProduction()
.getConditions())
if (condition instanceof QueryCondition
&& ((QueryCondition) condition).getBufferName().equals(bufferName))
return true;
return false;
}
protected boolean matches(IProduction production, String bufferName)
{
for (ICondition condition : production.getSymbolicProduction()
.getConditions())
if (condition instanceof IBufferCondition
&& !(condition instanceof QueryCondition)
&& ((IBufferCondition) condition).getBufferName().equals(bufferName))
return true;
return false;
}
protected boolean modifies(IProduction production, String bufferName)
{
for (IAction action : production.getSymbolicProduction().getActions())
if (action instanceof ModifyAction
&& ((ModifyAction) action).getBufferName().equals(bufferName))
return true;
return false;
}
protected boolean adds(IProduction production, String bufferName)
{
for (IAction action : production.getSymbolicProduction().getActions())
if (action instanceof AddAction
&& ((AddAction) action).getBufferName().equals(bufferName))
return true;
return false;
}
protected boolean removes(IProduction production, String bufferName)
{
for (IAction action : production.getSymbolicProduction().getActions())
if (action instanceof RemoveAction
&& ((RemoveAction) action).getBufferName().equals(bufferName))
return true;
return false;
}
static private class Evaluator
{
static public Evaluator TRUE = new Evaluator(){
public boolean couldCompile(IProduction one, IProduction two)
{
return true;
}
};
static public Evaluator FALSE = new Evaluator(){
public boolean couldCompile(IProduction one, IProduction two)
{
return false;
}
};
public boolean couldCompile(IProduction one, IProduction two)
{
return false;
}
}
}