25 |
*/ |
*/ |
26 |
|
|
27 |
package org.fenfire.spanimages.gl; |
package org.fenfire.spanimages.gl; |
28 |
|
import org.nongnu.libvob.util.CacheControl; |
29 |
import org.fenfire.spanimages.*; |
import org.fenfire.spanimages.*; |
30 |
import org.nongnu.navidoc.util.*; |
import org.nongnu.navidoc.util.*; |
31 |
import org.nongnu.alph.*; |
import org.nongnu.alph.*; |
39 |
private Map cache = Collections.synchronizedMap( |
private Map cache = Collections.synchronizedMap( |
40 |
new SoftValueMap()); |
new SoftValueMap()); |
41 |
public SpanImageFactory factory; |
public SpanImageFactory factory; |
42 |
|
CacheControl.Listener listener; |
43 |
|
|
44 |
public CachingSpanImageFactory(SpanImageFactory factory) { |
public CachingSpanImageFactory(SpanImageFactory factory) { |
45 |
this.factory = factory; |
this.factory = factory; |
46 |
|
listener = CacheControl.registerCache(this, |
47 |
|
"SpanImage cache for "+factory); |
48 |
} |
} |
49 |
|
|
50 |
public void clear() { |
public void clear() { |
54 |
public SpanImageVob getSpanImageVob(ImageSpan s) { |
public SpanImageVob getSpanImageVob(ImageSpan s) { |
55 |
SpanImageVob ret = (SpanImageVob)cache.get(s); |
SpanImageVob ret = (SpanImageVob)cache.get(s); |
56 |
if(ret == null) { |
if(ret == null) { |
57 |
|
listener.startMiss(s); |
58 |
ret = factory.getSpanImageVob(s); |
ret = factory.getSpanImageVob(s); |
59 |
cache.put(s, ret); |
cache.put(s, ret); |
60 |
} |
listener.endMiss(s); |
61 |
|
} else |
62 |
|
listener.hit(s); |
63 |
return ret; |
return ret; |
64 |
} |
} |
65 |
} |
} |