mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
package aspects.caching;
 | 
						|
 | 
						|
import java.util.Map;
 | 
						|
 | 
						|
/**
 | 
						|
 * Cache aspect for optimize recursive functions.
 | 
						|
 * 
 | 
						|
 * @author Migueli
 | 
						|
 * @date 05/11/2013
 | 
						|
 * @version 1.0
 | 
						|
 *
 | 
						|
 */
 | 
						|
public abstract aspect OptimizeRecursionCache {
 | 
						|
		
 | 
						|
	@SuppressWarnings("rawtypes")
 | 
						|
	private Map _cache;
 | 
						|
	
 | 
						|
	public OptimizeRecursionCache() {
 | 
						|
		_cache = getCache();
 | 
						|
	}
 | 
						|
	
 | 
						|
	@SuppressWarnings("rawtypes")
 | 
						|
	abstract public Map getCache();
 | 
						|
	
 | 
						|
	abstract public pointcut operation(Object o);
 | 
						|
 | 
						|
	pointcut topLevelOperation(Object o): operation(o) && !cflowbelow(operation(Object));
 | 
						|
 | 
						|
	before(Object o) : topLevelOperation(o) {
 | 
						|
		System.out.println("Seeking value for " + o);
 | 
						|
	}
 | 
						|
 | 
						|
	Object around(Object o) : operation(o) {
 | 
						|
		Object cachedValue = _cache.get(o);
 | 
						|
		if (cachedValue != null) {
 | 
						|
			System.out.println("Found cached value for " + o + ": " + cachedValue);
 | 
						|
			return cachedValue;
 | 
						|
		}
 | 
						|
		return proceed(o);
 | 
						|
	}
 | 
						|
 | 
						|
	@SuppressWarnings("unchecked")
 | 
						|
	after(Object o) returning(Object result) : topLevelOperation(o) {
 | 
						|
		_cache.put(o, result);
 | 
						|
	}
 | 
						|
	
 | 
						|
	after(Object o) returning(Object result) : topLevelOperation(o) {
 | 
						|
		System.out.println("cache size: " + _cache.size());
 | 
						|
	}
 | 
						|
}
 |