package org.jactr.modules.pm.visual.memory; /* * default logging */ import javolution.util.FastList; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.commonreality.identifier.IIdentifier; import org.jactr.core.buffer.BufferUtilities; import org.jactr.core.buffer.IActivationBuffer; import org.jactr.core.chunk.IChunk; import org.jactr.modules.pm.common.memory.PerceptualSearchResult; import org.jactr.modules.pm.visual.IVisualModule; public class VisualUtilities { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(VisualUtilities.class); /** * return the search result, invalid or not * * @param locationChunk * @param visualMemory * @return */ static public PerceptualSearchResult getSearchResult(IChunk locationChunk, IVisualMemory visualMemory) { FastList<PerceptualSearchResult> results = FastList.newInstance(); visualMemory.getRecentSearchResults(results); for (PerceptualSearchResult result : results) if (locationChunk == result.getLocation()) return result; FastList.recycle(results); return null; } /** * return search result with identifier * @param perceptualIdentifier * @param visualMemory * @return */ static public PerceptualSearchResult getSearchResult( IIdentifier perceptualIdentifier, IVisualMemory visualMemory) { FastList<PerceptualSearchResult> results = FastList.newInstance(); visualMemory.getRecentSearchResults(results); for (PerceptualSearchResult result : results) if (result.getPerceptIdentifier().equals(perceptualIdentifier)) return result; FastList.recycle(results); return null; } /** * returns {@link PerceptualSearchResult#getLocation()} if * {@link IVisualMemory#isStickyAttentionEnabled()} is false. Otherwise, it * attends to resolve to the current visual-location of the * {@link PerceptualSearchResult#getPercept()} if it is the latest visual * search * * @param searchResult * @param visualMemory * @return */ static public IChunk getVisualLocation(PerceptualSearchResult searchResult, IVisualMemory visualMemory) { if (!visualMemory.isStickyAttentionEnabled()) return searchResult.getLocation(); if (visualMemory.getLastSearchResult() != searchResult) return searchResult.getLocation(); /* * need to snag the screen-pos for visual object */ IChunk visualChunk = searchResult.getPercept(); return (IChunk) visualChunk.getSymbolicChunk().getSlot( IVisualModule.SCREEN_POSITION_SLOT).getValue(); } /** * returns false if !{@link IVisualMemory#isStickyAttentionEnabled()}. Else if * the last visual search percept identifier matches the provided * * @param identifier * @param visualMemory * @return */ static public boolean isCurrentlySticky(IIdentifier identifier, IVisualMemory visualMemory) { if (!visualMemory.isStickyAttentionEnabled()) return false; PerceptualSearchResult searchResult = visualMemory.getLastSearchResult(); if (searchResult != null) return searchResult.getPerceptIdentifier().equals(identifier); return false; } /** * returns false if !{@link IVisualMemory#isStickyAttentionEnabled()}. Else * true if the perceptual chunk is in the associataed buffer * * @param perceptualEncoding * @param visualMemory * @param buffer * @return */ static public boolean isCurrentlySticky(IChunk perceptualEncoding, IVisualMemory visualMemory, IActivationBuffer buffer) { if (!visualMemory.isStickyAttentionEnabled()) return false; return BufferUtilities.getContainingBuffers(perceptualEncoding, true) .contains(buffer); } }