package org.drools.chance.reteoo; import org.drools.chance.degree.simple.SimpleDegree; import org.drools.chance.evaluation.Evaluation; import org.drools.chance.evaluation.MockEvaluation; import org.drools.chance.core.util.IntHashMap; import org.drools.common.DefaultFactHandle; import org.drools.runtime.rule.WorkingMemoryEntryPoint; public class DefaultChanceFactHandle extends DefaultFactHandle implements ChanceFactHandle { private IntHashMap<Evaluation> cachedEvaluations = new IntHashMap<Evaluation>(); public DefaultChanceFactHandle() { } public DefaultChanceFactHandle(int id, Object object) { super(id, object); } public DefaultChanceFactHandle(int id, Object object, long recency, WorkingMemoryEntryPoint wmEntryPoint) { super(id, object, recency, wmEntryPoint); } public DefaultChanceFactHandle(int id, int identityHashCode, Object object, long recency, WorkingMemoryEntryPoint wmEntryPoint) { super(id, identityHashCode, object, recency, wmEntryPoint, false); } public DefaultChanceFactHandle(int id, String wmEntryPointId, int identityHashCode, int objectHashCode, long recency, Object object) { super(id, wmEntryPointId, identityHashCode, objectHashCode, recency, object); } public DefaultChanceFactHandle(String externalFormat) { super(externalFormat); } public Evaluation getCachedEvaluation( int key, boolean compensateNodeSkips ) { Evaluation eval = cachedEvaluations.get( key ); if ( compensateNodeSkips && eval == null ) { eval = new MockEvaluation( key, SimpleDegree.TRUE ); addEvaluation( key, eval ); } return eval; } public Evaluation getCachedEvaluation( int key ) { return cachedEvaluations.get( key ); } public boolean isEvaluationCached( int key ) { return cachedEvaluations.containsKey( key ); } public void addEvaluation( int key, Evaluation eval ) { if ( ! cachedEvaluations.containsKey( key ) ) { cachedEvaluations.put( key, eval ); } else { cachedEvaluations.get( key ).merge( eval ); } } public void setEvaluation( int key, Evaluation eval ) { cachedEvaluations.put( key, eval ); } }